개발자/라즈베리파이4

라즈베리파이4 스마트홈 인체감지 모션센서 코드 7

지구빵집 2023. 5. 16. 09:34
반응형

 

 

인체감지센서는 Pyroelectric ("Passive") InfraRed sensors 라고도 하며 일정한 적외선을 띤 물체가 움직이는 것을 감지하는 센서이며 주로 인체감지, 모션감지에 사용한다. 적외선을 띤 물체가 감지되어 일정한 양의 적외선을 감지하게 되면, 출력을 내 보내고 적외선을 띤 물체가 없을 때는 출력을 내보내지 않는다. 돔 형태의 창(window)는 외부의 환경으로부터 센서 내부의 회로 및 감지부를 보호하고 원하는 파장대의 적외선만 통과시키는 광학 필터의 기능을 한다. 보통은 사람을 감지하여 일정시간 불을 켜는 용도로 사용한다. 

 

 

라즈베리파이 스마트 홈 실습 과정 전체 포스팅 리스트 

 

라즈베리파이4 스마트홈 제품 특징 1

라즈베리파이4 스마트홈 불꽃 센서 코드 2

라즈베리파이4 스마트홈 가스센서 코드 3

라즈베리파이4 스마트홈 소리센서 코드 4

라즈베리파이4 스마트홈 조도센서 코드 5

라즈베리파이4 스마트홈 온도 습도센서 코드 6

라즈베리파이4 스마트홈 인체감지 모션센서 코드 7

라즈베리파이4 스마트홈 액츄에이터 디지털 도어록 실습 8

라즈베리파이4 스마트홈 가스타이머 실습 9

라즈베리파이4 스마트홈 전동볼밸브 실습 10

라즈베리파이4 스마트홈 RFID 실습 11

라즈베리파이4 스마트홈 RGB LED 실습 12

라즈베리파이4 스마트홈 카메라 실습 13

라즈베리파이4 스마트홈 조명 LED bar 실습 14

라즈베리파이4 스마트홈 서버 프로그램 실습 15

라즈베리파이4 스마트홈 안드로이드 앱 설명 16

 

 

인체감지 센서 핀 맵은 다음과 같다.

 

 

인체감지 모션센서 외형과 핀 연결

 

이전 사운드 센서와 거의 같은 방법으로 인체감지 센서를 테스트 한다. 계단 전등이나 출입문 주변에 사용되는 인체감지 센서는 감지가 된 후 약 5초 정도 전등을 키고 전원을 OFF 하는 방식인데 여기에서 사용한 인체 감지 센서도 같은 방식으로 동작한다. 그 외 필요한 설정은 아래 설정을 보고 시험해야 한다. 

 

Calibration- 센서보정 

 

감지 센서를 사용하기 전에 두 가지 컬리브레이션을 진행해야 한다. 아래[그림 8]을 보면 Sensitivity Adjust 와 Time Delay Adjust 가 있다. Sensitivity Adjust는 인체감지 센서의 민감도를 조절하는 가변저항이고, Time Delay Adjust 인체가 감지되어 출력핀이 하이가 유지되는 시간을 조절하는 가변저항이다.

 

 

모션센서 컬리브레이

 

Sensitivity Adjust 가변저항을 왼쪽 끝까지 돌리면 민감도가 가장 약하고, 오른쪽으로 돌리면 민감도가 증가한다. 실습시에는 왼쪽 끝으로 돌려서 민감도를 제일 약하게 하는 것이 편할 것이다. Time Delay Adjust 가변저항은 오른 쪽으로 돌리면 하이가 계속 출력되는 시간이 길어지고, 왼쪽으로 돌리면 약 4초 후에 로우로 떨어지게 된다. 실습에서는 가장 왼쪽으로 돌려 일찍 로우상태(대기상태)로 되도록 하는 것이 결과를 확인하기 쉽다.  

 

인체감지 센서를 시험하는 소스코드를 아래에 나타낸다. (home-motion.c) 

 

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <wiringPi.h>


// Use GPIO Pin 6, which is Pin 22 for wiringPi library
#define MOTION_IN 22  //gpio6


// the event counter 
volatile int eventCounter = 0; 
unsigned char flag_detect;
// -------------------------------------------------------------------------
// myInterrupt:  called every time an event occurs
void myInterrupt(void) {
   eventCounter++;
   flag_detect = 0x01;
}


// -------------------------------------------------------------------------
// main
int main(void) {
  // sets up the wiringPi library
  if (wiringPiSetup () < 0) {
      fprintf (stderr, "Unable to setup wiringPi: %s\n", strerror (errno));
      return 1;
  }

  // set Pin 17/0 generate an interrupt on high-to-low transitions
  // and attach myInterrupt() to the interrupt
  if ( wiringPiISR (MOTION_IN, INT_EDGE_RISING, &myInterrupt) < 0 ) {
      fprintf (stderr, "Unable to setup ISR: %s\n", strerror (errno));
      return 1;
  }

  // display counter value every second.
  while ( 1 ) 
  {
    if(flag_detect == 0x01)
	{
		printf("Motion Detect\n");
		flag_detect = 0;
	}
	else
	{
		printf("no human\n");
	}
    //eventCounter = 0;
    delay( 1000 ); // wait 1 second
  }

  return 0;
}

 

컴파일 명령

 

$gcc –o home-motion home-motion.c -lwiringPi

 

실행 주의사항과 결과

 

컴파일하여 실행하면 Motion Detec 메시지를 볼 수 있다. 인체를 감지하면 약 3~4초 동안 같은 상태를 유지하고 나서야 다시 응답대기 상태로 들어가기 때문에 인체감지가 되어 있는 동안에는 다시 인지하지 못한다. 컬리브레이션을 제대로 하여 예민한 정도를 줄이고, 감지후 4초 정도 지난 후에 다시 감지 대기 상태로 들어가게 설정하면 시험이 잘 될것이다. 

 

$sudo ./home-motion
Motion Detect
Motion Detect
Motion Detect
Ctrl-C
pi@raspberrypi~/smarthome$

 

 

여기까지 바람은 불고 날은 맑다. 먼지가 많아 하늘이 뿌옇다. 참고 인내하는 일들이 기쁜 이유가 무엇인지 모르겠다.

 

 

 

 

반응형