센서로부터 라즈베리파이 피코 보드에 디지털 신호 입력받기

센서로부터 라즈베리파이 피코 보드에  디지털 신호 입력받기

앞선 글에서 피코 보드의 입출력 핀을 통해 스위치 입력을 받는 방법과, 이렇게 입력된 신호를 이용하여 LED를 조작하거나 릴레이 모듈을 제어하는 것을 소개한 바 있다.

https://blog.naver.com/mythee1/223178398480

그런데 실제 사례에 있어서는 이렇게 수동 스위치를 조작하는 대신 각종 센서들로부터 신호를 자동으로 입력받는 경우가 대부분이므로, 앞서 소개한 예제를 약간 수정하여 센서로부터 디지털 신호값을 입력받아 LED와 버저를 조작하는 사례를 소개해 본다.

사례에 적용하는 센서는 On/Off 기능을 하는 센서류라면 어느 것이나 사용이 가능한데, 본 사례에서는 리모컨 조작 등에 사용되는 다음의 IR 수신 센서를 이용하기로 했다. 마침 가지고 있는 적절한 센서가 이것이라 사례에 이를 적용했으나, 동작감지 센서나, 마그넷 스위치, 기울기 센서 등과 같이 On/Off형 센서라면 그대로 대체하여 적용이 가능하다. (주: 온도값이나 소리의 크기같이 어떤 상태 값을 아날로그나 나타내는 센서는 이 예제에 적합하지 않으며, 해당 센서들로부터 아날로그 값을 입력하는 방법은 추후 글에서 별도로 소개할 예정이다.)

이 센서는 전면이 다음과 같은 모습이며

다음과 같은 센서칩을 사용하며, 리드선은 VCC/GND/Signal의 3개의 연결핀을 가진다.

회로 구성 형태는 다음과 같은데, 센서 모듈의 VCC에는 5V를 연결(피코 보드의 물리 번호 40번 핀) 했고, GND와 신호선은 각기 피코 보드의 GND와 GP13번에 연결했다. 그리고 GP14와 GP15를 각기 LED와 버저에 연결했다.

즉, 13번 핀으로 센서 입력이 들어오면, LED와 버저가 울리도록 구성했다.

센서로부터 디지털 신호를 받는 것은

앞선 글에서 스위치 조작과 동일하게 다음과 같이 해당 핀을 디지털 입력으로 선언해 주면 된다.

mysensor = machine.Pin(13, machine.Pin.IN, machine.Pin.PULL_DOWN)

이렇게 입력된 센서 신호로 동작을 제어하려면, 앞선 글에서 소개한 IRQ(Interrupt Request)의 적용이 필요하다.

즉, GP13핀으로 센서 신호가 입력되면, IRQ를 발생시키도록 다음과 같은 IRQ 명령을 반영시켜야 한다.

mysensor.irq(trigger=machine.Pin.IRQ_RISING, handler=myhandler)

단, 이 명령 보다 앞부분에, IRQ가 발생하면 어떻게 동작하는지에 해당되는 handler를 미리 선언해 주어야 한다.

def myhandler(pin):

if pin is mysensor:

print(“Sensor detected.. Please check”)

buzzer.value(1)

utime.sleep(0.1)

buzzer.value(0)

이렇게 프로그램을 작성하면 Code는 다음과 같게 된다.

다음 Code에서는 센서가 동작 중임을 나타내기 위해 센서 입력과는 별개로 3초 간격으로 LED가 깜빡이게 해두었다.

import machine
import utime
mysensor = machine.Pin(13, machine.Pin.IN, machine.Pin.PULL_DOWN)
sensorled = machine.Pin(14, machine.Pin.OUT)
buzzer = machine.Pin(15, machine.Pin.OUT)

def myhandler(pin):
if pin is mysensor:
print("Sensor detected..Please check")
    buzzer.value(1)
    utime.sleep(0.1)
    buzzer.value(0)
 
mysensor.irq(trigger=machine.Pin.IRQ_RISING, handler=myhandler)
while True:
 sensorled.toggle()
 utime.sleep(3)

실제 이 Code를 동작시키고, 센서 앞에서 리모컨의 버튼을 조작하면 다음과 같이 센서가 반응하고, LED와 버저가 동작하는 것을 볼 수 있다.