Hardware | HC-SR501 PIR motion sensor - 2

|

1. 시작


HC-SR501 을 가지고 움직임이 있을 시 반응하는 센서를 가지고 놀아 봤더랬습니다.


* Hardware | HC-SR501 PIR motion sensor

http://chocoball.tistory.com/entry/Hardware-HCSR501-PIR-motion-sensor


그러던 중, Photoresistor 단자를 발견합니다.



아래는 HC-SR501 회로도 입니다.



제조사의 사이트에 올라와 있는 회로도와 실제 기판을 봐도 이미 R3 (1MΩ) 이 실장되어 있어서,

제대로 된 값의 photoresistor 만 달면 기능하게 되어 있네요.


좀더 찾아 보니, 아예 세트로 파는 업자도 있습니다.



요는 photoresistor 를 이용하여, 항상 모션 탐지를 하는 것이 아니라,

어두워졌을 때에만 작동하도록 하는 것 입니다.


흠흠, 그럼 photoresistor 를 구입해야 겠죠?





2. Photoresistor 가지고 놀기


HC-SR501 에 photoresistor 를 붙여서 구동하기 위해, 우선 photoresistor 를 가지고 놀아봅니다.


* Hardware | Arduino 로 Photoresister 가지고 놀기 - 1

http://chocoball.tistory.com/entry/Hardware-Arduino-Photoresister-1


이때 구입한 제품이 GL5528.

간단한 동작을 확인 했으니, 본격적으로 HC-SR501 에 붙여 봅니다.





3. HC-SR501 에 납땜하기


Photoresistor 는 RL 이라는 자리에 납땜하면 됩니다.

+/- 전극 구분이 없어서 그냥 두 다리 고정하고 납땜하면 됩니다.



높이 잘 계산해서 올려주고요.



장착되면 위와 같은 모습이 됩니다.



다리를 옆으로 벌려서 흔들리지 않게 하고 납땜합니다.



짜잔 !!!




4. Layout 및 Sketch


구성은 예전 글에서 사용했던 구성과 sketch 와 완벽히 동일합니다.


HC-SR501 PIR sensor | Arduino Nano
----------------------------------
         S          |     D8
         +          |     5V
         -          |     GND
----------------------------------
 
    Piezo busser    | Arduino Nano
----------------------------------
         S          |     D11
         +          |     5V
         -          |     GND
----------------------------------


회로 구성입니다.



Sketch 입니다.


/*******************************************************
 
Uses a PIR sensor to detect movement, sounds a buzzer
 
*******************************************************/
//the time we give the sensor to calibrate (10-60 secs according to the datasheet)
int calibrationTime = 30;
 
int ledPin = 13; // choose the pin for the LED
int inputPin = 8; // choose the input pin (for PIR sensor)
int pirState = LOW; // we start, assuming no motion detected
int val = 0; // variable for reading the pin status
int pinSpeaker = 11; //Set up a speaker on a PWM pin (digital 9, 10, or 11)
 
void setup() {
pinMode(ledPin, OUTPUT); // declare LED as output
pinMode(inputPin, INPUT); // declare sensor as input
pinMode(pinSpeaker, OUTPUT);
 
//give the sensor some time to calibrate
Serial.begin(9600);
Serial.print("Calibrating sensor ");
  for(int i = 0; i < calibrationTime; i++) {
    Serial.print(".");
    delay(1000);
  }
  Serial.println(" Done!");
  Serial.println("SENSOR is ACTIVE now");
  delay(50);
}
 
void loop() {
  val = digitalRead(inputPin); // read input value
  if (val == HIGH) { // check if the input is HIGH
    blinky(); // blink LED when motion haas been detected
    // digitalWrite(ledPin, HIGH); // turn LED ON
    playTone(300, 160);
    delay(150);
     
    if (pirState == LOW) {
    // we have just turned on
      Serial.println("Motion detected!");
      // We only want to print on the output change, not state
      pirState = HIGH;
    }
  } else {
    digitalWrite(ledPin, LOW); // turn LED OFF
    playTone(0, 0);
    delay(300);
 
    if (pirState == HIGH){
    // we have just turned off
      Serial.println("Motion ended!");
      // We only want to print on the output change, not state
      pirState = LOW;
    }
  }
}
 
void playTone(long duration, int freq) {
  // duration in mSecs, frequency in hertz
  duration *= 1000;
  int period = (1.0 / freq) * 1000000;
  long elapsed_time = 0;
 
  while (elapsed_time < duration) {
    digitalWrite(pinSpeaker,HIGH);
    delayMicroseconds(period / 2);
    digitalWrite(pinSpeaker, LOW);
    delayMicroseconds(period / 2);
    elapsed_time += (period);
  }
}
 
void blinky() {
  for(int i=0; i<3; i++) {
    digitalWrite(13, HIGH);
    delay(200);
    digitalWrite(13, LOW);
    delay(200);
  }
}





5. 흠...


손으로 photoresistor 를 가리면 동작은 하는데, 기민하게 동작하지 않았습니다.


원래 회로는 short 된 회로인데,

photoresistor 를 연결하면 광원이 있는 곳에서 close 상태로 만들어 주어 모션 감지를 하지 않게 (disable) 됩니다.


주위가 어두워 지면 photoresistor 의 dark resistance 가 올라가

원래 회로가 가지고 있던 short 상태를 만들어 주는 것인데,

어정쩡하게 저항이 발생하면 제대로 short 된 상태로 넘어가지 못하는 것이었습니다.


뭔가 Photoresistor 가 망가졌나? 생각하고 다른 GL5528 센서로 교환하다, 옆에 있던 캐패시터 옆구리를 지져버렸습니다.

아놔...


다행히 기존에 구입해 놨던 capacitor 가 있어서 교체합니다.


* Hardware | AliExpress 에서 condenser 를 구입해 보자

http://chocoball.tistory.com/entry/Hardware-AliExpress-condenser-buy



기존의 capacitor 보다는 굵은 소자라 뭔가 신뢰가 가네요.






6. 다른 Photoresistor


Capacitor 를 교환했고, photoresistor 도 교환했음에도 불구하고 여전히 기민하게 동작하지 않습니다.

Photoresistor 를 가리고 한참 기다리고 있어도 운 좋으면 detecting 하고, 그렇지 않으면 아무 반응이 오지 않았습니다.


결국 구입한 photoresistor 의 수치적인 한계라고 확신하고, 다른 photoresistor 를 구입해서 테스트 해보기로 합니다.


처음 구입할때는 보이지 않았던, 5가지 묶음 세트가 있네요.

바로 구입합니다. (아니 왜 저 세트로 처음부터 안파냐고...)


* Photoresistor Kit 5Kindsx10pcs 5506 5516 5528 5537 5539 Light Dependent Resistor LDR Pack Photoresistor Package for Arduino

- https://ko.aliexpress.com/item/Photoresistor-Kit-5Kindsx10pcs-5506-5516-5528-5537-5539-Light-Dependent-Resistor-LDR-Pack-Photoresistor-Package-for/32812625860.html



각 소자 번호에 따라 어떤 값을 보이는지 테스트 해봤습니다.


* Hardware | Arduino 로 Photoresister 가지고 놀기 - 2

http://chocoball.tistory.com/entry/Hardware-Arduino-Photoresister-2


수치를 그래프화 해본 결과, 처음 구입한 GL5528 (녹색) 은 가장 어둡게 해도

dark resistance 가 조금 높게 나옵니다. (스펙상으로는 1MΩ 이긴 한데...)



확인 결과 새로 구입한 세트에 있는 5539 (하늘색) 이 더 높은 dark resistance 를 보여 줬습니다.

어둡게 하면 거의 short 상태를 만들어 줄 수 있을 것 같습니다.



수치적으로도 5MΩ 정도면 short 상황을 만들 수 있겠네요. 





7. 구동 확인


기존 GL5528을 제거하고 새로 구입한 5539 를 납땜해 주었습니다.

이제 대망의 마지막 확인 입니다.



5539 photoresistor 는 센서의 구불구불이 더 촘촘하네요.



어둡게 하면 의도대로 잘 동작합니다.



Photoresistor 에 샤프심 캡을 씌워, 어두운 상황을 만들어 동작 시키니 예상대로 반응합니다.




FIN


작년 7월에 처음 photoresistor 를 구매하여 실패의 실패를 거듭하여 겨우 확인 했습니다.

HC-SR501 센서는 이제 서랍으로 들어갈 수 있게 되었습니다.


Photoresistor 는 종류와 가용 범위가 많아서 잘 선택하고 사용해야겠습니다.


이제야 마음 편하게 다른 센서들 공부를 할 수 있겠네요.


And