Een PIR sensor kun je gebruiken om de nabijheid van iemand te detecteren. Dit kan bijvoorbeeld handig zijn om een lamp automatisch te schakelen.

Een PIR sensor kun je heel eenvoudig met een Arduino controleren. In principe is een PIR nl. niets anders een digitale output die afhankelijk of iets gedetecteerd wordt hoog (gedecteerd) of laag (niets gedetecteerd) zal zijn. Zoals gebruikelijk maak ik weer gebruik van een NodeMCU ESP8266 module om de PIR uit te lezen.

Benodigheden

1 x Breadboard 400/a>
1 x
NodeMcu ESP8266 (CH340/CP2102)
1 x Infrared PIR Motion Sensor Detector Module





Aansluiten

Het aansluiten is heel eenvoudig als je de pin-aansluitingen van je NodeMCU ESP8266 weet:



Verbind de volgende pins (PIR – NodeMCU):
GND – GND
Vcc – Vin
OUT – D5



Programmeren

Voor het programmeren van de NodeMCU gebruiken we de Arduino IDE software die je hier kunt downloaden. Voordat we aan de slag gaan moeten we nog wat instellingen in de Arduino IDE veranderen. Vul bij ‘File > Preferences’ voor ‘Additional Boards Manager URLs’ de volgende waarde in:

http://arduino.esp8266.com/stable/package_esp8266com_index.json



Ga naar Open Boards Manager vanaf ‘Tools > Board’. Scroll naar beneden en selecteer ‘esp8266 by ESP8266 Community’. Kies nu ‘install’.



We zijn nu klaar om eindelijk te gaan programmeren. Om de PIR uit te lezen kun je onderstaande code gebruiken. Lees vooral het commentaar zodat je hiermee zelf aan de slag kunt gaan. Ik gebruik in de code hieronder de Serial Monitor van de Arduino IDE om detectie te loggen. Je zou dit bijvoorbeeld zelf kunnen veranderen om een Relay aan te sturen voor een lamp voor een bepaalde tijd.

//
// PIR - Small example code how to read out PIR Module
//
// by Henri Matthijssen (henri@matthijseninfo.nl)
//
// Connect your PIR module the next way to your ESP8266
// PIR - ESP8266
//  GND - GND
//  Vcc - Vin (or any other Vcc pin)
//  OUT = D5
//

#define PIR_INPUT           D5          // Define D5 as input-pin for PIR

// Globals
int g_pir_state = LOW;
int g_pir_value = 0;

//
// setup
// Default setup() method called once by Arduino
//
void setup() 
{
  // Setup serial port for your Serial Monitor
  Serial.begin(115200);

  // Define D5 as input for your PIR sensor
  pinMode(PIR_INPUT, INPUT);
}

//
// loop ()
// Here you find the main code which is run repeatedly
//
void loop() 
{
  delay(200);
  
  g_pir_value = digitalRead(PIR_INPUT); // read input value

  if (g_pir_value == HIGH)              // check if the input is HIGH
  {
    if (g_pir_state == LOW) 
    {
      g_pir_state = HIGH;

      Serial.println("Motion detected");
    }
  } 
  else                                  // otherwise check previous state
  {
    if (g_pir_state == HIGH)
    {
      g_pir_state = LOW;

      Serial.println("Motion ended");
    }
  }
}

Je kunt eventueel nog de gevoeligheid en vertraging op de PIR module zelf configureren:




Laat jij in het commentaar eens weten waarvoor jij een PIR module gebruikt?