본문 바로가기
라즈베리파이&아두이노

PIR 센서(HC-SR501) 적외선 인체감지 센서

by minimax95 2021. 1. 5.

이번 포스팅에서는 적외선 인체감지 센서(PIR, Passive Infrated Sensor)를 라즈베리파이에 연결하여 사람의 움직임을 감지하는 기능을 구현해 보겠습니다.

 

사용할 적외선 인체감지 센서는 HC-SR501 센서로 엘레** 등에서 이천 원 정도에 구매하실 수 있습니다.


데이터 시트

 - working voltage range: DC 4.5 - 20V

 - Quiescent Current : 50uA

 - high output level 3.3V / Low 0V

 - Trigger L trigger can not be repeated / H repeated trigger

 - circuit board dimensions: 32*24 mm

 - maxium 110º angle sensor

 - 7m maximum sensing distance


PCB 보드를 보면 아래와 같습니다.

데이터 시트를 보시면 110도 범위 이내에서 감지가 가능하며 최대 7m 거리까지 감지할 수 있습니다.

적외선의 변화가 있을 경우 High(1) 신호를 출력하고 없을 경우 Low(0) 신호를 출력합니다.

 

위 PCB 보드 이미지에서 Sensitivity Adjust와 Time Delay Adjust가 있는데 Sensitivity Adjust는 적외선을 감지하는 감도를 조절하고 Time Delay Adjust는 감지 후에 데이터를 어느 정도 송출하는지의 시간을 조정할 수 있습니다.

 

이제 라즈베리파이에 연결하여 실제 적외선 감지 기능을 구현해 보겠습니다.

PIR에서 신호를 감지하여 GPIO Input 으로 처리하고 High 신호시 노란색 LED를, Low 신호시 적색 LED를 켜도록 회로를 구성해 보았습니다.

 

 

 

GPIO Input은 17번으로 설정하고 노란색 LED 출력은 21번, 적색 LED는 20번에 연결해 줍니다.

 

파이썬 코드는 아래와 같습니다.


 

 

import RPi.GPIO as GPIO

import time

 

GPIO.setmode(GPIO.BCM)

GPIO.setwarnings(False)

 

led_R = 20

led_Y = 21

sensor = 17

 

GPIO.setup(sensor, GPIO.IN)

GPIO.setup(led_R, GPIO.OUT)

GPIO.setup(led_Y, GPIO.OUT)

 

print("PIR Ready......")

time.sleep(5)

 

try:
    while True:

        if GPIO.input(sensor) == 1:

            GPIO.output(led_Y, 1)

            GPIO.output(led_R, 0)

            print("Motion detected Yellow On!")

            time.sleep(0.5)

 

        if GPIO.input(sensor) == 0:

            GPIO.output(led_Y, 0)

            GPIO.output(led_R, 1)

            print("Motion undetected Red On!")

            time.sleep(0.5)

 

except KeyboardInterrupt:

    print("Stop by User")

    GPIO.cleanup( )


위 소스코드를 실행한 결과입니다.

 

Sensitivity Adjust와 Time Delay Adjust를 조절해 가면서 테스트를 진행한 결과 Sensitivity Adjust는 중간정도로 조정하고 Time Delay Adjust는 최소화 하여 빠른 변화 감지를 송출하도록 조정했습니다.

이상으로 PIR 센서 모듈에 대한 정리를 마치도록 하겠습니다.

감사합니다.

댓글