PIR 센서 기능 구현 - PYD 1598 센서를 이용한 인체감지 기능 구현
페이지 정보
본문
오늘은 Smart Home - Home Security 제품 중에서 Doorbell로 유명한 제품인 ring이라는 제품에 사용된 PYD1688과 동일한 기능을 갖고 있지만 좀더 업그레이드된 PYD1598 센서를 이용해서 아두이노 보드를 이용하여 모션감지(인체감지)를 구현해 보도록 하겠습니다.
1. 회로구성 및 설명
* 준비물 : 아두이노 우노, PYD1598
위 그림처럼 PYD1598 핀맵을 확인한 뒤 아두이노 보드와 연결을 합니다.
PYD1598은 동작전압이 1.8V ~ 3.6V에서 사용하기 때문에 아두이노 3.3V의 출력을 센서의 Vdd에 연결해 줍니다.
그리고 나머지 연결은 위 그림과 소스코드를 참고하시기 바랍니다.
※ 동작여부를 확인하기 위한 구조이므로 실제 회로 구성은 데이터 쉬트를 참고해서 설계하시기 바랍니다.
모션을 감지하게 되면 아두이노 보드에 내장되어 있는 LED(13번)를 이용해서 불이 들어오도록 하겠습니다.
2. 소스예제 및 설명
PYD1598은 wake up opeation mode가 있습니다. Wake Up Operation 모드는 호스트의 MCU가 Sleep Mode 상태일 때 센서가 인체감지를 모니터하고 있다가 인체감지 또는 모션감지가 일어났을 때 인터럽트를 발생시켜 MCU를 Wakeup 할 수 있는 기능입니다.
#include "Arduino.h"
#include <avr/sleep.h>
#include "DrewJJ_PYD1598.h"
#define INTERRUPT_PIN 2 // Pin to wake up the Arduino
//#define CHECKOUT_PIN 9
#define SERIN_PIN 12
void setup() {
pinMode(INTERRUPT_PIN,OUTPUT);
digitalWrite(INTERRUPT_PIN,LOW);
pinMode(INTERRUPT_PIN, INPUT);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN,HIGH);
//pinMode(CHECKOUT_PIN,OUTPUT);
//digitalWrite(CHECKOUT_PIN,HIGH);
delay(10);
}
void loop() {
Sleep_WakeUp_Mode();
}
void Sleep_WakeUp_Mode() {
sleep_enable();//Enabling sleep mode
attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN),wakeUp,RISING);
Pyd1598.setConfig(SENSING_MASK_002, BLIND_MASK_001, PULSE_MASK_002, WINDOW_MASK_002, SERIN_PIN);/* SENSING_MASK_002(Threshold 64 ), BLIND_MASK_001(Blind TIme 0.5s), PULSE_MASK_002(Pulse Count 2), WINDOW_MASK_002(Window Time 4 ) */
set_sleep_mode(SLEEP_MODE_PWR_DOWN);//Setting the sleep mode, in our case full sleep
digitalWrite(LED_BUILTIN,LOW);//turning LED off
//digitalWrite(CHECKOUT_PIN,LOW);
pinMode(INTERRUPT_PIN, INPUT);
sleep_cpu();//activating sleep mode
/* and sleeping zzzzz. . */
digitalWrite(LED_BUILTIN,HIGH);//turning LED on
//digitalWrite(CHECKOUT_PIN,HIGH); // Checking Out for motion detection
delay(1000);
pinMode(INTERRUPT_PIN,OUTPUT);
digitalWrite(INTERRUPT_PIN,LOW); /* The DIRECT LINK line will not automatically fall back to LOW. To reset the Motion Detection Unit, the host system must pull the line LOW for at least 35 µs. */
delayMicroseconds(35);
}
void wakeUp() {
sleep_disable();//Disable sleep mode
detachInterrupt(0); //Removes the interrupt from pin 2;
}
3. 결과
- 이전글Cailipile 센서 소개 영상 24.10.22
- 다음글PIR 센서원리(2) - 디지털 PIR 센서의 출력 데이터 이해와 적용하는 방법 24.10.22
댓글목록
등록된 댓글이 없습니다.