적외선 모션 센서
적외선 인체 감지 센서, PIR (Passive Infrared) Motion Sensor, 간단히 적외선 모션 센서라 불리는 이 센서는 적외선을 이용하여 대상의 움직임을 감지하는 센서이다.
생활에선 현관의 센서등에 달려 있는 센서라고 보면 되겠다.
구매한 키트에 포함되어 있는 적외선 모션 센서는 아래의 글에서 확인할 수 있고,
2021.05.02 - [학습 노트/Raspberry Pi] - [Raspberry Pi 3 B+] 초심자는 어떤 라즈베리 파이 키트로 시작하면 좋은가?
대체적으로 1천원~수천원 대의 적외선 모션 센서는 다음 그림의 센서와 그 모양이 거의 비슷한 것 같다.
적외선 모션 센서 사용을 위한 회로 구성
이미 이전 글에 언급했듯이 구매한 라즈베리 파이 키트엔 관련 설명이 전혀 없다.
회로를 어떻게 구성하는지
MagPi 매거진, gpiozero.readthedocs.io나 아두이노 강좌 등등 구글링을 통해 감을 잡았고,
구매한 적외선 모션 센서의 각 핀 사양도 구글링하다가 정말 내부 전자소자 배치까지 똑같아 보이는 정보를 기반으로 했다.
맞겠지란 희망과 믿음을 가지면서 ...
- 움직임 감지 시 LED를 켜기 위해 빨간색, 녹색, 노란색 LED를 각각 GPIO 14, 15, 18에 연결한다.
- 움직임 감지 시 소리를 내기 위해 부저를 GPIO 2에 연결한다.
- 적외선 모션 센서의 5V VCC 핀은 라즈베리 파이의 5V 핀에 연결한다.
- 적외선 모션 센서의 GND 핀은 라즈베리 파이의 GND 핀에 연결한다.
- 적외선 모션 센서의 출력신호 핀은 GPIO 23에 연결한다.
라즈베리 파이의 GPIO 핀 정보는 아래의 글을 참고한다.
2021.04.25 - [학습 노트/Raspberry Pi] - [Raspberry Pi 3 B+] 라즈베리 파이의 GPIO
적외선 모션 센서를 이용한 파이썬 코딩
동작 시나리오는 다음과 같다.
- 프로그램이 시작되면 감지된 움직임이 없을 때까지 잠시 (2초) 기다린다.
- 이후 프로그램은 모션이 감지될 때까지 대기한다.
- 모션이 감지되면, LED와 부저를 3회 동작시켜 모션이 감지됨을 알린다.
- 모션 감지가 3회 이상 발생하면 프로그램을 종료한다.
# raspberry pi 3 b+
# python 3.7.3
# Thonny 3.3.6
from gpiozero import RGBLED, TonalBuzzer, MotionSensor
from time import sleep
leds = RGBLED(14, 15, 18)
buzzer = TonalBuzzer(2)
sensor = MotionSensor(23)
def motion_alarm():
leds.color = (1, 1, 1)
buzzer.play('G4')
sleep(0.5)
leds.color = (0, 0, 0)
buzzer.stop()
sleep(0.5)
sensor.wait_for_no_motion(2)
print('waiting')
detections = 0
while True:
print('-- detecting ...')
sensor.wait_for_motion()
detections += 1
print('?? motion detected', detections)
for i in range(3):
motion_alarm()
if detections >= 3:
print('** welcome **')
break
결과 및 의견
처음엔 센서나 작성한 프로그램이 정상적으로 동작하는 것처럼 보였으나 약간의 테스트 만으로도 뭔가 정상적이지 않음을 알아 차린다.
1) 우선 보유 센서의 경우 데이터 시트가 없어 몰랐는데, 센서의 모드를 설정하는 점퍼가 없다.
보라색 네모 박스 안에 뭔가 있어야 하는데... 멀티미터도 없어 센서가 High 모드인지 Low 모드인지도 모른다.
사용하는 하드웨어의 사양을 이해하는 것 또한 코딩의 기본인데, 이를 간과했다.
2) 센서가 움직임을 감지했을 때 얼마의 시간 동안 신호를 출력하는지 모른다. 신호가 계속 출력되는 것 같아 센서 하단 오른쪽의 지연 시간 조정 가변저항의 숫자 105를 반시계, 9시 방향 정도로 돌리니 계속해서 신호가 출력되는 것은 어느 정도 해결한 듯하다. 하지만 여전히 깔끔하지가 않다.
출력되는 시간이 어느 정도인지 궁금해 확인 방법을 궁리하다가
적외선 모션 센서의 신호출력(출력되는 신호가 3.3V임을 어찌 어찌 확인하여)을 LED와 연결한 후 센서에 손을 가까이 하니 한 2~3초 정도 켜진다. 이 역시 깔끔하지가 않다.
3) 가장 중요한, 센서의 성능 문제라고 판단하는 것으로 센서 앞 20cm 이하로만 움직임을 감지하는 듯하다.
센서 감도 조정 가변저항을 몇 차례 조절해 보았는데, 그 차이 파악이 어렵다.
또한 센서의 움직임 감지 정확도도 의심이 간다.
총평을 하자면,
보유 적외선 모션 센서의 탐구는 여기까지만 한다.
나중에 필요가 생기면, 데이터 시트도 확인 가능하고 어느 정도 성능 검증이 가능한 모델을 구매해 사용한다.