본문 바로가기
Study/Arduino

PIR SENSOR(인체감지센서) Arduino로 코딩

by Answer Choi 2018. 5. 9.
반응형

소스코드 다운로드


이전에 테스트 하였던 C linktech의 PIR 센서를 arduino로 코딩하였습니다.


센서에 대한 내용은 


인체감지 센서(PIR-RS232 씨링크테크)

위 링크를 참고하세요.



결선도입니다.



실제 결선모습입니다.


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
33
34
#include <SoftwareSerial.h>
SoftwareSerial pir=SoftwareSerial(8,9);
byte start[]={0x10,0x36 ,0x01 ,0x01 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x34};
byte request[]={0x10 ,0x36 ,0x01 ,0x02 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x33};
  
void setup() {
    pir.begin(9600);
    Serial.begin(115200);   
    pir.write((const char*)&start,16);
}
 
void loop() {
    delay(500); 
    byte response[16];
    int cnt=0;
    while(pir.available()){
        response[cnt]=pir.read();
        cnt++;
      }
    if(cnt==16){
        if(response[4]==0x00){
            Serial.println("pir detected!!");
        }else if(response[3]==0x01){
            Serial.println("pir not detected!!");
        }        
    }
    for(int i=0;i<cnt;i++){
        Serial.print(response[i],HEX);
        if(i==15)
            Serial.println("");   
        else 
            Serial.print(" ");   
    }    
  }
cs


Line 1~2 : 이 센서가 UART를 통해 통신을 하기때문에 소프트웨어시리얼을 사용하였습니다.


소프트웨어 시리얼은 아래링크를 참고하세요.


SOFTWARE SERIAL 사용하기


Line 3 : 처음 한번 start를 보내 자동으로 센서값을 받도록 하기위한 프로토콜입니다.


Line 4 : 주기적으로 한번받기를 하려했으나 같은 값만 들어와 사용은 하지 않습니다.


Line 13 : 주기를 주어 데이터가 원만하게 들어오도록 합니다.


Line 16~19 : Serial로 데이터가 들어오면 response라는 바이트배열로 담습니다.


Line 20~26 : 16바이트(정상응답)가 들어오면 pir 감지인지 아닌지 구분합니다.


Line 21~22 : 감지


Line 23~24 : 비감지


Line 27~33 : 받은 데이터를 터미널로 보여줍니다.



터미널에 나타난 모습입니다.


테스트 하면서 한가지 의문점은 첫 데이터를 받을때는 0x10 0x38이 아닌 0x10 0x36이 들어옵니다.


그리고 뒤에서 두번째 0x83일때도 있고, 0x00일경우도 있습니다.


이건 랜덤하게 발생되네요 ;;;

반응형

인기글