# 5.2 디지털 입력 코딩

우리가 디지털 출력을 배웠기 때문에 디지털 입력이 어떤 의미일지 예상해 볼 수 있을 것입니다. **디지털 입력이라는 것은 간단히 말해 외부장치에서 보드쪽으로 입력되는 디지털 값인 0v(0, LOW) 또는 3.3v(255, HIGH)의 두 값 중 하나를 읽어내는 것**입니다. 우리는 **보드와 연결할 외부 장치로 PIR(Passive InfraRed sensor) 센서 모듈(Seonsor Module, 이하 편의상 센서로 언급)를 이용**할 것입니다. 이렇게 **아두이노 같은 콘트롤러(Controller)가 외부의 세계로 부터 정보를 얻을 때 사용하는 장치를 센서(Sensor)라고 합니다.** 모듈이란 말은 기능단위의 부품 집합을 나타내는 일반 용어인데 결국 PIR의 기능 구현이 몇 개의 전자부품의 결합을 통해 구현되어 마치 한 부품처럼 사용할 수 있는 단위 부품으로 이해하면 됩니다.&#x20;

**PIR은 이름 그대로, 특정 범위 안에서 인체같은 어떤 물체에서 방출되는(passive) 적외선(infrared)의 변화량을 감지해 어떤 물체의 움직임이 있음을 감지해 이를 전압으로 표현해 주는 장치**를 말합니다. PIR 센서의 용도는 물체가 감지되었을 때 어떤 리액션(reaction)을 하게 만드는 예를 들어 일상에서 쉽게 볼 수 있는 자동 계단등 처럼 사람이 지나갈 때만 불이 켜졌다가 다 지나가면 꺼지게 하는 용도나 또는 보안 용도로 침입을 감지해 싸이렌을 울리는 등의 용도로 사용이 가능합니다. 이 중에서 우리는 이러한 일종의 자동등을 만들어 봅시다.

![](https://1238842542-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MaoCrU7aM6SgouXppME%2F-MbSXnTEJFbCIe_4R0U8%2F-MbS_8n3p-i-ZWDrtIDm%2Fimage.png?alt=media\&token=e3a1c8a9-7459-44b7-a9e0-58211e265bf9)

[이전 장](digital_output)에서 전자회로를 이해하기 전에 먼저 코드를 살펴봤던 것처럼 이번에도 먼저 블록코드로 확인해 봅시다. [이전 장](digital_output)에 코드와의 차이를 발견했나요? "디지털 2번 센서값" 이란 블록이 새롭게 추가되었습니다. 이 블록의 의미는 "디지털 2번 핀을 통해 외부로부터(센서로부터) 읽어드린 값" 이라고 할 수 있습니다. **"만일 \~라면" 이라는 블록에서 사용되는 이 값이 "참(True)"이 된다는 의미는 무엇일까요? 그것은 바로  "PIR 센서에 물체가 감지되면" 의 의미가 됩니다. 다시 말해, PIR 센서는 감지된 물체가 없을 때는 0v(0, LOW)를 내보겠지만, 감지되는 순간 3.3v(255, HIGH)를 내보냅니다.** 우리는 PIR센서가 내보낸 즉 아두이노 보드 입장에선 들어온(입력된) 3.3v(255, HIGH)을 읽어, 그 값에 따라 어떤 반응으로 대응하면(다른 표현으로 피지컬 컴퓨팅) 되는 것입니다. 우리는 이를 [이전 장](digital_output)에서 배운 LED 켜기/끄기로 대응할 것입니다.&#x20;

[**엔트리 커스텀 버전**](https://github.com/JeongJun-Lee/entry-offline)**에서 블록코드를 아두이노 C++ 코드로 변환한 것 역시도, 이전과 비교해서 pinMode로 2번 핀을 INPUT으로  사용하겠다고 모드설정 한 것과 디지털 2번 핀을 통해 입력된 값을 읽겠다는 의도로 digitalRead 함수를 추가한 것이 다릅니다.** 전체적인 코드는 블록코드와 거의 1:1 대응이 되기 때문에 이해가 크게 어렵지 않을 것으로 생각됩니다. **이처럼, 하드웨어 코딩교육에서 코딩 그 자체는 소프트웨어 코딩교육에서의 코딩에 비해서는 크게 복잡하지 않다는 것을 알 수 있습니다.**

![](https://1238842542-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MaoCrU7aM6SgouXppME%2F-MbSWYF6kVWgOXrsh0WX%2F-MbSWfdnkqk9Ue5xKC6v%2Fimage.png?alt=media\&token=7d3c3bd3-67e5-4dbf-bccf-bfd1acb8fd67)

이제 전자회로를 살펴보도록 하겠습니다. 아래 회로는 **독립적으로 구분된 2개의 전자회로로 구성되어 있는 것으로 간주**할 수 있는데, **하나는 이전 과에서 배운 디지털 9번핀으로 LED를 점멸하는 회로**이고, **다른 하나는 디지털 2번핀과 PIR 센서를 연결해 PIR센서 출력값을 읽는 회로**입니다.&#x20;

![](https://1238842542-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MaoCrU7aM6SgouXppME%2F-MbXsEbB8SK1PIX3RvIu%2F-MbXtpuCtahTdDQzab-j%2Fimage.png?alt=media\&token=c982a1f1-2489-4afc-b92d-968c64514a34)

움직임을 감지하면 PIR 센서는 3.3v(255, HIGH) 값을 출력하고 3초(최소값, 설정에 따라 변동 가능) 동안 그 값을 유지한 후 더 이상 움직임이 없을 경우 0v(0, LOW) 값을 출력합니다. 따라서 우리의 코드에 근거해 PIR센서에서 움직임이 감지될 경우 LED를 켜고, 움직임이 감지되지 않은 채 3초가 지나면 LED가 꺼집니다. 실생활의 계단등의 경우도 움직임이 없더라도 일정시간 조명을 켠 상태로 유지되는 것과 동일합니다. **한번 움직임을 감지 후 몇 초 동안 3.3v(255, HIG)값을 출력할 지에 대한 설정과 몇 m거리까지 움직임을 감지할 지에 대한 센서의 민감도 값 설정에 관해서는** [**부록**](../appendix/pir_sensor)**을 참고**하세요.&#x20;
