PIR 센서 기능 구현 - PYD 1598 센서를 이용한 인체감지 기능 구현

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 171회 작성일 24-10-22 09:35

본문

오늘은 Smart Home - Home Security 제품 중에서 Doorbell로 유명한 제품인 ring이라는 제품에 사용된 PYD1688과 동일한 기능을 갖고 있지만 좀더 업그레이드된 PYD1598 센서를 이용해서 아두이노 보드를 이용하여 모션감지(인체감지)를 구현해 보도록 하겠습니다. 



1.  회로구성 및 설명


   * 준비물 : 아두이노 우노, PYD1598


0df6a1e902c343696d4c6a52a50298c9_1729557262_0711.png



위 그림처럼 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. 결과


https://youtu.be/meGy44QsI-Q



 

댓글목록

등록된 댓글이 없습니다.


사이트 정보

회사명 : 비엔비상사(B&B CORPORATION)│㈜비엔비옵토(B&B OPTO CO., LTD.) | 대표 : 김부원
경기도 화성시 정남면 만년로 617
TEL : 031-353-7853 | FAX : 031-353-9641

Copyright © 2024 B&B CORPORATION │ B&B OPTO CO., LTD. All rights reserved. Designed By DreamWithCompany