아두이노2016. 4. 10. 15:11

아파트 복도나 현관문 등에 부착되어서 사람(또는 동물)이 감지되면 조명을 켜주고 꺼주는 센서를 인체감지센서(PIR 센서, Passive Infrared Sensor)라고 합니다. 인체는 36.5도의 열을 가지고 있으므로 적외선이 나옵니다. 이것과 움직임이 감지되면 신호를 보내주는 센서 입니다. 품번은 HC-SR501 이라고 하는데 감도도 조절이 가능하고 인체가 감지되면 신호를 보내는 시간을 조절할 수도 있습니다. 그래서 감지가 끝나더라도 일정시간은 신호를 보내주게 됩니다. 그래서 아파트 복도를 지나가게 되면 불이 켜졌다가 사람이 없어도 잠시 뒤에 꺼지는 것입니다.



PIR 의 원리 (출처: https://pirtechnology.wordpress.com/2011/09/09/hello-world/)



센서의 전면부 입니다. 축구공 모양의 감지부가 있습니다. 이 안에 적외선 감지 센서가 있습니다. 테스트를 해보니 감지범위는 위,아래 45도씩 90도 정도의 범위정도 감지가 가능했습니다. 센서의 커버인 축구공 부분은 편광필터 입니다. 센서가 감지하는 주파수 범위만 통과시키도록 하여 센서의 성능을 높이는 역할을 합니다.


뒷면 입니다. 핀연결은 위의 사진의 설명과 같이 왼쪽부터 GND, Signal, VCC (5V) 입니다. Signal 은 아두이노 디지털 단자에 연결하면 됩니다.


위와 같이 두 개의 가변저항을 돌려주면 감도와 딜레이 시간을 설정할 수 있습니다.


이 센서에 대해 더욱 자세히 나온 데이터시트 입니다.

HC-SR501_Datasheet.pdf


연결


인체감지센서 

아두이노 

GND 

GND

Signal 

D2

VCC

5V


위와 같이 연결하고 감지의 확인을 위해 LED 하나를 디지털 13번에 연결해 주었습니다. LED의 짧은 다리는 13번핀 옆의 GND에 긴다리는 디지털 13번에 연결하면 됩니다. 원래는 저항도 같이 연결해 줘야 하지만 잠깐의 실험으로 LED가 고장나지는 않더군요. ^^




소스

인체가 감지되면 LED가 켜지고 센서에 설정된 Delay 값에 따라 LED를 OFF 해 주는 소스 입니다. 센서의 특징상 인체가 감지되어도 일정시간 움직임이 없으면 LED가 꺼집니다. 

소스를 수정하여 220V 를 제어 할 수 있는 릴레이를 붙여서 조명이나 스피커(방범용 알람) 등을 붙이면 실제 생활에도 활용이 가능합니다. RTC 모듈(Real Time Clock Module)과도 연계한다면 특정시간에만 작동하도록 할 수도 있겠네요.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/* 인체감지센서(PIR) 테스트 */
 
int ledPin = 13// LED 연결핀
int inputPin = 2// 센서 시그널핀
int pirState = LOW; // PIR 초기상태
int val = 0// Signal 입력값
 
void setup() {
    pinMode(ledPin, OUTPUT); // LED Output 설정
    pinMode(inputPin, INPUT); // 센서 Input 설정
 
    Serial.begin(9600);
}
 
void loop(){
    val = digitalRead(inputPin); // 센서값 읽기
    if (val == HIGH) { // 인체감지시
        digitalWrite(ledPin, HIGH); // LED ON
        if (pirState == LOW) {
        // 시리얼모니터에 메시지 출력
        Serial.println("Motion detected!");
        pirState = HIGH;
        }
    } else {
        digitalWrite(ledPin, LOW); // LED OFF
        if (pirState == HIGH){        
            // 시리얼모니터에 메시지 출력            
            Serial.println("Motion ended!");
            pirState = LOW;
        }
    }
}
cs




이상으로 인체감지센서에 대해서 알아보았습니다.

반응형
Posted by 대네브 (deneb)

댓글을 달아 주세요

  1. 안녕하세요 pir센서를 이용해서 선풍기를 돌리려고하는데요 어떤식으로해야하나요? ㅜㅜ

    2016.05.25 18:39 [ ADDR : EDIT/ DEL : REPLY ]
  2. 안녕하세요..좋은정보감사합니다.. 한가지 여쭤볼것이있는데요...저만 이런것인지 궁금해서요!!
    '시리얼모니터'창에서 처음에만 "Motion detected!"이 나오고 (LED On도 정상적으로 됩니다)
    그 다음에는 LED는 On되지만 '시리얼모니터'창에 "Motion detected!"가 나오지 않는 이유를 모르겠습니다..
    여러번다시해봐도 똑같은상황이네요..ㅠㅠ

    2016.06.22 00:19 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 음... 뭐가 문제일까요? 저도 제 글이 뭔가 잘 못되었나? 해서 시리얼모니터 까지 켜고 다시 해 봤는데 LED도 잘 켜지고 꺼지고 시리얼모니터에도 잘 나오는데요... 혹시 모르니 센서 감도랑 딜레이 시간을 조절해 보시고 그래도 안되면 센서불량도 의심해 볼 수 있을거 같아요.

      2016.06.22 16:48 신고 [ ADDR : EDIT/ DEL ]
    • 안녕하세요...ㅠㅠ 센서불량인것같아요 한개더사야겠네요 ㅠㅠ 답변감사합니다 !!

      2016.06.22 21:28 신고 [ ADDR : EDIT/ DEL ]
  3. 인체감지

    안녕하세요ㅠㅠ 혹시 사람이 오면 반대로 꺼지게 하는 방법이 있을까요?

    2017.06.02 15:10 [ ADDR : EDIT/ DEL : REPLY ]
    • 소스를 수정하면 됩니다. 감지시 켜지는걸 반대로 되게 수정하면 되겠죠?

      2017.06.02 15:52 신고 [ ADDR : EDIT/ DEL ]
  4. 제발 부탁 ㅠㅠ


    정말 죄송한데요 ㅠㅠ 인체 감지를 통해서 23시~05시 까지만 센서 작동을 원할시에는 소스랑 필요 물품등이 어떤식으로 이루어 질지 알수있을 까요..? rtc 모듈은 처음 들어보는 거라 생소하네요 ㅠㅠ 아두이노랑 어떻게 결합을 시키는지.. ㅠㅠ 의욕은 넘치는데 어디서부터 손을 대야 할지 모르겠습니다 ㅠㅠ 부탁 드립니다...!!

    2017.09.20 00:57 [ ADDR : EDIT/ DEL : REPLY ]
    • 시간개념이 들어가면 RTC 모듈이 들어가야 합니다. 제 블로그에서 RTC 로 검색해보면 내용이 나옵니다.

      2017.09.20 12:40 신고 [ ADDR : EDIT/ DEL ]
  5. selecao

    센서가 사람 위치를 인식해서 제가 위치를 바꿔도 저를 계속 바라보게 하고싶은데(모터 달아서), 제가 안움직이면 비감지 되버리니까, 제가 가만히 있어도 얘가 인식하게 하거나 모터가 안움직이게 할 수 없나요?

    2017.12.08 15:57 [ ADDR : EDIT/ DEL : REPLY ]
  6. 사과나무

    죄송하지만 if (pirState==High 또는 Low의 용도가 뭔가요? 왜 low하고 high할때가 Val high인데 Val low면 pirState를 ==high 다음에 =low 시키나요? 여러군데에서 찾아봤는데 설명이 없네요.

    2018.01.13 01:16 [ ADDR : EDIT/ DEL : REPLY ]
    • 별거 아니구요...
      코드 보시면 알겠지만
      loop 내에서 시리얼모니터에
      Motion detected! 또는 ... end! 를
      찍어주기 위한 부분이에요.
      val이 변화가 없는한 한번만 찍어주기 위해서 끝에 high 또는 low 를 대입해 준거구요...
      val 하고는 관계 없습니다

      2018.01.13 17:05 신고 [ ADDR : EDIT/ DEL ]
  7. 형고

    안녕하세요, 센서에 급 관심이 생겨서 방문하게 되었고 흥미로운 글 보면서 혼자 신기해하고잇습니다ㅎㅎ
    질문이 있는데, 혹시 pir센서를 이용해서 어떠한 통에 물건을 넣거나 담을 때 감지를 할수도 있나요?
    아주 쌩 초짜라서 너무 황당한 질문일 수도 있지만, 궁금해서여쭤봅니다^_^

    2018.05.03 23:21 [ ADDR : EDIT/ DEL : REPLY ]
    • pir은 적외선 센서 입니다. 그 물건이 적외선을 낸다면 가능하겠지만 아니라면 안되겠죠. 초음파센서나 레이저, 무게센서 등도 고려해 보세요.

      2018.05.04 06:41 신고 [ ADDR : EDIT/ DEL ]
  8. 졸작

    아두이노 한개로 여러개의 불을 키는 방법 아시나요?

    2018.05.14 15:08 [ ADDR : EDIT/ DEL : REPLY ]
    • 아두이노에는 여러개의 gpio 단자가 있어요 그걸로 여러개 불도 켤 수 있죠. 만약 전력이 부족하면 외부전력을 연결해야 합니다

      2018.05.14 15:11 신고 [ ADDR : EDIT/ DEL ]
  9. 센씽

    안녕하세요.
    위 내용중 인체감지되면 LED가 켜지고 움직임 없으면 일정사간 지나면 꺼진다 했잖아요.
    그럼 움직임이 계속 감지되면 계속 켜져있나요?

    2018.06.24 11:01 [ ADDR : EDIT/ DEL : REPLY ]
  10. 센씽

    감사합니다. ^^

    2018.06.24 11:07 [ ADDR : EDIT/ DEL : REPLY ]
  11. Mm

    센서값 읽어보니까 계속 1만 나오는데 이거 불량인가요? 배선은 문제 없고 다이얼 두개다 돌려봤는데도 똑같습니다

    2019.05.18 10:33 [ ADDR : EDIT/ DEL : REPLY ]
  12. studying

    릴레이와 PIR센서를 이용하여 220V 전등을 제어하는 아두이노 소스 코드를 알고 싶습니다.

    2019.11.13 21:01 [ ADDR : EDIT/ DEL : REPLY ]
  13. 감자

    혹시 저 파란색판에 꼳아있는 충전기(?)빼고도 사용할수있나요 휴대용으로들고다니면좋을것같아서요

    2020.05.14 21:48 [ ADDR : EDIT/ DEL : REPLY ]