# 5.4 아날로그 입력 코딩

이제 마지막으로 아날로그 입력으로서 외부장치로 부터 아날로그 입력값을 읽어 활용하는 블록코딩을 해봅시다. [5.2장 디지털 입력 코딩](digital_input)에서 만든 자동등과 유사한 자동등을 만들어 봅시다. 디지털 입력 코딩에서의 자동등은 PIR 센서로부터 물제의 움직임에 대한 판단유무를 디지털 입력값으로 받아 LED를 켜고 껐다면, 이번에는 **조도 센서(Photoresistor)로부터 빛의 밝고/어두움의 정도를 아날로그 입력값으로 받아, 이 값의 정도에 따라 즉 주변이 밝으면 LED를 꺼두지만, 주변이 어두워지면 LED를 켜도록** 하겠습니다. 이러한 예로 우리 일상에서 쉽게 볼 수 있는 것으로는 해가 지거나 날씨가 흐릴 때 자동으로 점등하는 자동차의 자동 전조등, 도로 가에 설치된 자동 점등 가로등 등을 들 수 있습니다. 또한 스마트 폰에도 화면밝기 제어로 해당 기능이 들어가는데 스마트폰을 주머니나 가방속에 넣거나, 수신된 통화를 받기 위해 귀에 가까이 가져갈 때 화면을 끄는 용도로도 사용합니다.

![](https://1238842542-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MaoCrU7aM6SgouXppME%2F-MbbI4oNjvwyEdPYQ0YX%2F-MbbbHfujrh5VHOeZRKt%2Fimage.png?alt=media\&token=cd7118dd-c469-4246-8065-f7502971909e)

먼저 전자 회로 구성을 살펴보겠습니다. 본 회로는 [5.2 장의 디지털 입력 코딩](digital_input) 때와 마찬가지로 독립된 2개의 회로로 구성된 것으로 간주할 수 있습니다. 첫번 째로 LED를 디지털 출력으로 LED를 제어하는 회로인데 이제 이것은 너무나 익숙하실 것 같습니다. 두번 째는 **조도 센서로부터 아날로그 출력값(아두이노 보드 입장에서는 보드로 들어오는 입력값)을 읽어 내기 위한 회로로** [**4.2장**](../../board_basic/input_output#analog-input)**에서 살펴보았듯이 아두이노 우노 보드 상에는 아날로그 입력핀들(A0\~A5핀, 6개)은 공용이 아닌 별도로 존재하고 이들 중 하나인 A0 핀과 연결**해 회로를 꾸몄습니다.

회로를 이해하시기 위해서는 조도 센서 기본적인 특성을 이해하셔야 되는데 **조도 센서는 주변 빛의 밝기에 따라 변화하는 일종의 가변 저항(저항값이 고정된 것이 아니라 변동적인)이라는 것이고, 빛이 밝으면(빛의 세기가 강해지면) 저항값이 작아지고, 반대로 빛이 어두우면(빛의 세기가 약해지면) 저항값은 커집니다. 회로를 보시면 조도 센서 앞단에 저항이 하나 연결된 것을 보실 수 있습니다. 조도 센서 자체도 (가변)저항이니 결국 이 회로는 저항 2개가 직렬로 연결된 회로라고 이해**하시면 됩니다. **따라서, 회로상 아두이노 보드 입장에서 아날로그 입력으로 받아드리고 있는 값의 실체는 결국 전압분배법칙(**&#xBC95;칙을 잘 모르시는 분들은 [참조 링크](https://www.youtube.com/watch?v=4GtcaMhOOv0\&t=428s)의 7:08부분 참조)**에 의해 결정된 조도 센서의 전압값**입니다.

![](https://1238842542-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MaoCrU7aM6SgouXppME%2F-MbbI4oNjvwyEdPYQ0YX%2F-MbbbfFTWZGT26H39_iK%2Fimage.png?alt=media\&token=f60e902c-6ee3-447a-9510-da067e66c81b)

그렇다면 **조도센서가 자체가 저항인데 왜 추가로 저항을 달아야 하나가 궁금하실 수 있는데, 조도 센서 자체를 보호하기 위해 저항을 단 것이 아니라**, 조도 센서가 빛의 밝으면 밝을 수록  저항값이 점점 더 작아진다고 했는데, 조도 센서의 종류에 따라서는 저항값이 너무 작아져, 그 얘기는 반대로 **지나치게 큰 전류가 흐르게 되어 아두이노에 손상을 입히지 않도록 제한을 두기 위한 목적도 있고, 조도 센서 자체 특성으로 표현되는 가변저항의 최소/최대값 범위에 맞춰 저항의 직렬 연결에 따른 회로의 전압 분배법칙(잘 모르시는 분들은** [**참조 링크**](https://www.youtube.com/watch?v=4GtcaMhOOv0\&t=428s)**의 7:08부분 참조)으로 의한 적당한 범위의 아날로그 출력값을 외부로 내보내고자 하는 목적의 저항**으로 이해하시면 됩니다. 조도 센서의 종류에 따라 달라질 수 있는데 미니 사이즈 조도 센서에는 보통 10K$$\Omega$$정도를 달게 됩니다. 자세한 조도 센서의 특성과 저항값의 결정, 그리고 그 저항값에 따른 조도 센서의 특성 변화 등 자세히 알고 싶은 분을 위해 별도의 [참고 링크](https://makeabilitylab.github.io/physcomp/sensors/photoresistors.html)를 남기니 이를 참고하시면 좋겠습니다.

다음으로 블록코딩 내역을 살펴보겠습니다. 이번 아날로그 입력 코딩에서 새롭게 추가된 블록을 발견하셨나요? 그것은 바로 **아두이노의 아날로그 핀에서 값을 읽는 아날로그 핀 읽기 전용 블록**입니다.&#x20;

![](https://1238842542-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MaoCrU7aM6SgouXppME%2F-MbbcJTcxQTJkPyUxZF4%2F-MbbcaisOSNjuSy8f86k%2Fimage.png?alt=media\&token=3b103f00-9baf-4359-87e5-fbba75cf6651)

다음은 해당 블록을 적용한 전체 블록코딩 내역입니다. 먼저  [3.3장](../../coding_start/digital_analog#analog-output)에서 외부 아날로그 신호가 아두이노에 탑재된 10비트(bits) 짜리 ADC(Analog to Digital Converter)에 의해서 0v\~5v의 아날로그적 전압 변화량이 0\~1023의 디지털 값으로 변환되어 전달된다는 것을 기억하실 겁니다. 그러나, 이 회로에서는 **조도 센서와 함께 연결할 저항의 크기에 따라 변화의 범위가 1024단계 전체가 아닌 일부로 표현범위가 달라지게 됩니다. 이것은 코드에서는 어둡다/밝다를 판단하는 기준값인 500 에도 영향을 미칩니다. 이 값은 처음부터 명확하게 어떤 계산으로 정해지는 것이 아니고, 여러 번의 실험을 통해 값을 정한다 라고 이해하시면 되겠습니다. 값 결정에 영향을 미치는 요소는 크게 3가지 정도인데** 첫번째는 먼저 말씀드린 조도 센서와 함께 연결하는 저항의 크기, 두번째는 센서 주변 평균 빛의 밝기, 마지막 세번째는 보통 실험을 위해 손으로 조도 센서를 덮어 빛의 어두움을 표현해 보는데, 이 때, 센서를 덮는 손 모양이 어떤지에 따라서도 밝기의 미세한 차이를 만들 수 있습니다.

![](https://1238842542-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MaoCrU7aM6SgouXppME%2F-MbfiUW4LXBJji1OqU3G%2F-MbfjPhbwg-c5jIy9Bn3%2Fimage.png?alt=media\&token=ba0ee0a2-2103-4a26-a3fa-3d93dafac587)

