Senin, 24 Oktober 2016

Interfacing HC-SR501 Sensor PIR pada NodeMCU V1.0 (Arduino IDE)

Tulisan ini saya buat setelah mencoba menghubungkan suatu sensor PIR HC-SR501 ke board NodeMCU V1.0, dimana jika sensor mendeteksi adanya pergerakan dalam range (3-7 meter sesuai setting) dan sudut (110 derajat cone angle), maka akan secara menghidupkan LED-BUILTIN.


Gambar 1. Lokasi Led Built-In pada board NodeMCU V1.0


Berdasarkan data dari internet (aliexpress.com) diperoleh data terkait dengan sensor PIR HC-SR501 adalah sebagai berikut ini:
  1. working voltage range :DC 4.5-20V
  2. Quiescent Current :50uA
  3. high output level 3.3 V / Low 0V
  4. Trigger L trigger can not be repeated / H repeated trigger
  5. circuit board dimensions :32 * 24 mm
  6. maximum 110 ° angle sensor
  7. maximum sensing distance 7 meter

Walaupun dari datasheet tertulis DC 4.5-20V, tetapi saya menggambil sumber tegangan dari papan NodeMCU adalah 3.3 volt.


Gambar 2. Pin NodeMCU V1.0


Sebelum kita mulai alangkah baiknya kita melihat dulu melihat hal terkait dengan sensor HC-SR501 terlebih dahulu sebagaimana yang ditampilkan pada Gambar 2 sebagai berikut:



Gambar 3. Tampilan depan sensor, dengan dibuka casing

Gambar 4. Tampilan belakang sensor PIR HC-SR501

Adapun beberapa setting yang dapat dilakukan pada sensor adalah sebagai berikut:
1. Jumper set ke H: Repeat Trigger, nilai output pada sensor adalah HIGH selama waktu delay atau tetap HIGH sampai dengan tidak adanya pergerakan yang terdeteksi.
2. Jumper set ke L: Single Trigger/Non Repeatable: nilai output pada sensor adalah HIGH selama waktu delay, dan set ke LOW setelah waktu delay terlampaui.
3. Time delay adjust, mengatur waktu berapa lama waktu delay (0.3 s/d 5 menit)

Gambar 5. Adjust Time Delay  (0.3 s/d 5 menit)

4. Sensitivity Adjust, mengatur jarak sensitifitas sensor (3-7 meter)

Gambar 6. Adjust Sensitivity (3-7 meter)
Gambar  3. Atur sensitifitas dan time delay (searah jarum jam lebih sensitif/lebih lama)
5. Pin Power, dihubungkan kesumber power, dalam hal ini saya hubungkan ke pin 3V3 pada board nodeMCU.
6. Pin GND, dihubungkan ke GND pada board nodeMCU (sebelah pin 3V3)
7. Pin High/Low Output, dihubungkan ke salah satu pin digital pada board nodeMCU, dalam hal ini saya hubungkan ke pin D1 pada board nodeMCU.
8. Inducting time block, dimana sensor tidak menerima sinyal setelah perubahan output (high ke low)

Catatan: Dalam hal ini jumper saya set ke H.

/*
 * PIR sensor tester
 */

int ledPin = D0;                // choose the pin for the LED-BUILTIN
int inputPin = D1;              // 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

void setup() {
  pinMode(ledPin, OUTPUT);      // declare LED as output
  pinMode(inputPin, INPUT);     // declare sensor as input

  Serial.begin(9600);
}

void loop(){
  val = digitalRead(inputPin);  // read input value
  if (val == HIGH) {            // check if the input is HIGH
    digitalWrite(ledPin, HIGH);  // turn LED ON
    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
    if (pirState == HIGH){
      // we have just turned of
      Serial.println("Motion ended!");
      // We only want to print on the output change, not state
      pirState = LOW;
    }
  }
}

Sesaat setelah upload, atau power on, tunggu 60 detik untuk stabilisasi, jika ada terdeteksi pergerakan maka led built-in warna pada board akan menyalah.

Salam,
Hendra. 


1 komentar: