본문 바로가기
코딩/아두이노

아두이노 PIR 센서로 사람감지하기

by DIYver 2021. 4. 15.

 

 

<목표>

 

 

- 사람을 감지하는 프로젝트에서 빠지지 않는 PIR 센서의 사용법을 다뤄보도록 한다.


<준비물>

 

 

- 아두이노(우노, 나노, 메가), PIR센서


<회로도>

 

 


<코드>

 

const int led_pin = 13;        
const int pir_pin = 3;        
int state = 0;      // 센서 상태 값 저장 변수(0: LOW, 1: HIGH)
int pre_state = 0;
int count = 0;

void setup(void){
  
  Serial.begin(9600);
  
  Serial.println("");

  pinMode(led_pin, OUTPUT);
  pinMode(pir_pin, INPUT);
  delay(10);
  Serial.println();
}

void loop(){
  state = digitalRead(pir_pin);
  digitalWrite(led_pin, LOW);

  if (pre_state==0 && state == 1)
  {
    count ++;
    Serial.print("Human Detect!   count : ");
    Serial.println(count);    
    digitalWrite(led_pin, HIGH);
  }
  else if(pre_state == 0 && state == 0)
  {
    digitalWrite(led_pin, LOW);
  }
 


  pre_state = state;
}

 

센서선을 아두이노의 3번핀에 꽂으면 위의 코드를 그대로 사용해도 된다.

 


<실행 결과>

사람의 움직임을 감지하여 해당 부근을 지나간 사람수 또는 횟수를 측정하는 코드의 실행 결과이다.

통행량 같은 것을 조사할 때 사용할 수 있겠다.

다만 이 경우에는 사람이 한명씩 다닐 때에만 유효한 측정값이라는 것이 큰 단점이다.

 

두명이서 같은 PIR 센서가 감지하는 지점을 지나는 경우와

한명이 감지 지점을 지나는 경우를 센서는 동일하게 판단하기 때문이다.

 

 

PIR 센서의 단점을 꼽아보자면, 여러가지가 있지만 그중에서 대표적인 것은

1. 오감지가 꽤 있는 편이다.

2. 방향을 감지하지 못한다.

 

위의 두가지가 되겠다.

1번의 경우가 심각한 것인데,

감지거리가 나름 긴 편에 속해서 비교적 멀리에서도 감지가 되지만,

그만큼 센서가 민감하기 때문에 사람이 아닌 다른 물체의 움직임에도 반응하곤 한다.

 

2번의 경우에는 해당 센서의 아쉬운 부분이라 할 수 있는데,

구조 원리상 어쩔 수 없는 부분이다.

 

사람의 대략적인 방향까지 알 수 있었으면 엄청 좋았을 텐데, 아쉬운 부분이다.

 

 

 

장점은 가격이 너무 저렴하다는 것이다.

센서등에서 사용하는 센서가 바로 이 PIR 센서이다.

짝퉁이 넘쳐흐른다고하니, 조심히 구매해야한다.

 

 

 

 


※ 궁금하시거나 질문사항이 있으시면 댓글로 작성해주시면 답변해 드릴 수 있는 부분에서 친절히 답변드리겠습니다!

 

 

 

 

댓글