5.2 디지털 입력 코딩
Last updated
Last updated
우리가 디지털 출력을 배웠기 때문에 디지털 입력이 어떤 의미일지 예상해 볼 수 있을 것입니다. 디지털 입력이라는 것은 간단히 말해 외부장치에서 보드쪽으로 입력되는 디지털 값인 0v(0, LOW) 또는 3.3v(255, HIGH)의 두 값 중 하나를 읽어내는 것입니다. 우리는 보드와 연결할 외부 장치로 PIR(Passive InfraRed sensor) 센서 모듈(Seonsor Module, 이하 편의상 센서로 언급)를 이용할 것입니다. 이렇게 아두이노 같은 콘트롤러(Controller)가 외부의 세계로 부터 정보를 얻을 때 사용하는 장치를 센서(Sensor)라고 합니다. 모듈이란 말은 기능단위의 부품 집합을 나타내는 일반 용어인데 결국 PIR의 기능 구현이 몇 개의 전자부품의 결합을 통해 구현되어 마치 한 부품처럼 사용할 수 있는 단위 부품으로 이해하면 됩니다.
PIR은 이름 그대로, 특정 범위 안에서 인체같은 어떤 물체에서 방출되는(passive) 적외선(infrared)의 변화량을 감지해 어떤 물체의 움직임이 있음을 감지해 이를 전압으로 표현해 주는 장치를 말합니다. PIR 센서의 용도는 물체가 감지되었을 때 어떤 리액션(reaction)을 하게 만드는 예를 들어 일상에서 쉽게 볼 수 있는 자동 계단등 처럼 사람이 지나갈 때만 불이 켜졌다가 다 지나가면 꺼지게 하는 용도나 또는 보안 용도로 침입을 감지해 싸이렌을 울리는 등의 용도로 사용이 가능합니다. 이 중에서 우리는 이러한 일종의 자동등을 만들어 봅시다.
이전 장에서 전자회로를 이해하기 전에 먼저 코드를 살펴봤던 것처럼 이번에도 먼저 블록코드로 확인해 봅시다. 이전 장에 코드와의 차이를 발견했나요? "디지털 2번 센서값" 이란 블록이 새롭게 추가되었습니다. 이 블록의 의미는 "디지털 2번 핀을 통해 외부로부터(센서로부터) 읽어드린 값" 이라고 할 수 있습니다. "만일 ~라면" 이라는 블록에서 사용되는 이 값이 "참(True)"이 된다는 의미는 무엇일까요? 그것은 바로 "PIR 센서에 물체가 감지되면" 의 의미가 됩니다. 다시 말해, PIR 센서는 감지된 물체가 없을 때는 0v(0, LOW)를 내보겠지만, 감지되는 순간 3.3v(255, HIGH)를 내보냅니다. 우리는 PIR센서가 내보낸 즉 아두이노 보드 입장에선 들어온(입력된) 3.3v(255, HIGH)을 읽어, 그 값에 따라 어떤 반응으로 대응하면(다른 표현으로 피지컬 컴퓨팅) 되는 것입니다. 우리는 이를 이전 장에서 배운 LED 켜기/끄기로 대응할 것입니다.
엔트리 커스텀 버전에서 블록코드를 아두이노 C++ 코드로 변환한 것 역시도, 이전과 비교해서 pinMode로 2번 핀을 INPUT으로 사용하겠다고 모드설정 한 것과 디지털 2번 핀을 통해 입력된 값을 읽겠다는 의도로 digitalRead 함수를 추가한 것이 다릅니다. 전체적인 코드는 블록코드와 거의 1:1 대응이 되기 때문에 이해가 크게 어렵지 않을 것으로 생각됩니다. 이처럼, 하드웨어 코딩교육에서 코딩 그 자체는 소프트웨어 코딩교육에서의 코딩에 비해서는 크게 복잡하지 않다는 것을 알 수 있습니다.
이제 전자회로를 살펴보도록 하겠습니다. 아래 회로는 독립적으로 구분된 2개의 전자회로로 구성되어 있는 것으로 간주할 수 있는데, 하나는 이전 과에서 배운 디지털 9번핀으로 LED를 점멸하는 회로이고, 다른 하나는 디지털 2번핀과 PIR 센서를 연결해 PIR센서 출력값을 읽는 회로입니다.
움직임을 감지하면 PIR 센서는 3.3v(255, HIGH) 값을 출력하고 3초(최소값, 설정에 따라 변동 가능) 동안 그 값을 유지한 후 더 이상 움직임이 없을 경우 0v(0, LOW) 값을 출력합니다. 따라서 우리의 코드에 근거해 PIR센서에서 움직임이 감지될 경우 LED를 켜고, 움직임이 감지되지 않은 채 3초가 지나면 LED가 꺼집니다. 실생활의 계단등의 경우도 움직임이 없더라도 일정시간 조명을 켠 상태로 유지되는 것과 동일합니다. 한번 움직임을 감지 후 몇 초 동안 3.3v(255, HIG)값을 출력할 지에 대한 설정과 몇 m거리까지 움직임을 감지할 지에 대한 센서의 민감도 값 설정에 관해서는 부록을 참고하세요.