이 아두이노 튜토리얼에서는 PIR 센서의 작동 원리와 아두이노 보드에서 모션 감지에 사용하는 방법을 배웁니다.
먼저 작동 원리를 설명하겠습니다. 모듈은 열에 노출되면 에너지를 생성하는 열전 센서(Pyroelectric sensor)로 구성됩니다.
사람이나 동물 몸이 센서 범위 내로 들어오면 적외선 복사 형태로 열 에너지를 방출하므로 센서가 움직임을 감지합니다. 여기서 '수동 적외선(Passive Infra-Red)' 센서라는 이름이 유래했습니다. '수동(Passive)'이란 센서가 감지 목적으로 에너지를 사용하지 않고, 다른 물체가 방출하는 에너지를 감지하여 작동한다는 뜻입니다.
모듈에는 프레넬 렌즈(Fresnel lens)라는 특수 설계된 커버가 있어 적외선 신호를 열전 센서에 집중시킵니다.
HC-SR501 PIR 센서 모듈
모듈은 접지(Ground), VCC(전원), 출력 핀(객체 감지 시 하이 로직 레벨 출력) 등 3핀으로 구성됩니다. 두 개의 포텐셔미터가 있어 하나는 감도 조절, 다른 하나는 객체 감지 시 출력 신호가 하이 상태를 유지하는 시간(0.3초~5분)을 조절합니다.
모듈에는 점퍼로 연결된 세 개의 추가 핀이 있어 트리거 모드를 선택합니다. 첫 번째는 '비반복 트리거(non-repeatable trigger)'로, 센서 출력이 하이이고 지연 시간이 지나면 출력이 자동으로 하이에서 로우로 변경됩니다. 두 번째 '반복 트리거(repeatable trigger)' 모드는 감지된 객체가 센서 범위 내에 있는 동안 출력을 계속 하이 상태로 유지합니다.
이 튜토리얼에 필요한 부품
HC-SR501 PIR 센서 모듈
5V 릴레이 모듈
아두이노 보드
브레드보드와 점퍼 와이어
케이블, 플러그, 소켓
회로도
이 튜토리얼 예제로 센서가 객체를 감지하면 고전압 램프가 켜지는 회로를 만들겠습니다. 센서 출력 핀을 아두이노 8번 핀에 연결하고, 객체 감지 시 7번 핀이 릴레이 모듈을 작동시켜 고전압 램프를 켭니다.
릴레이 모듈 작동 원리에 대한 자세한 내용은 아두이노 릴레이 튜토리얼을 참조하세요. (고전압을 사용하므로 매우 주의해야 하며, 필자는 여러분의 행동에 책임을 지지 않습니다.)
소스 코드
이 예제의 아두이노 코드는 매우 간단합니다. PIR 센서 핀을 입력으로, 릴레이 핀을 출력으로 정의합니다. digitalRead() 함수로 센서 출력을 읽고, 하이(객체 감지)면 릴레이를 활성화합니다. 릴레이 모듈 활성화는 입력 핀이 역으로 작동하므로 로우 로직을 보냅니다.
/* 아두이노 PIR 모션 센서 튜토리얼
* by Dejan Nedelkovski, www.HowToMechatronics.com
*/
int pirSensor = 8;
int relayInput = 7;
void setup() {
pinMode(pirSensor, INPUT);
pinMode(relayInput, OUTPUT);
}
void loop() {
int sensorValue = digitalRead(pirSensor);
if (sensorValue == 1) {
digitalWrite(relayInput, LOW); // 릴레이 입력은 역으로 작동
}
}
위 동영상 끝부분에서 예제 시연을 볼 수 있습니다. 센서 모듈에 전원을 공급한 후 약 20~60초 동안 '워밍업' 시간이 필요합니다. 센서 앞에 손을 대면 릴레이가 램프를 켭니다. 하지만 손을 계속 움직여도 설정된 지연 시간이 지나면 램프가 꺼지는데, PIR 센서가 '비반복 트리거' 모드이기 때문입니다. 점퍼를 '반복 트리거' 모드로 변경하고 손을 계속 움직이면 움직임이 사라지고 설정된 지연 시간이 지나기 전까지 램프가 계속 켜져 있습니다.