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?
Hoi Henri, weer een leuke blog!
Is er ook een manier om de actuele status van de PIR uit te lezen in pimatic? Ik wil hier graag regels starten adv aanwezigheid.
Met de ESP8266 kun je heel eenvoudig een Webserver bouwen die je met je eigen API kunt uitbreiden. Ik heb datzelfde trucje gebruikt in mijn eCurtains project.
Deze API kun je dan m.b.v. ‘curl’ weer aanroepen vanuit Pimatic. Op deze manier kan ik nu met Pimatic mijn gordijnen automatisch open en dicht doen.
Hetzelfde zou je in principe voor een PIR sensor kunnen doen. Met behulp van een curl call kun je dan de status checken. Probleem is echter dat je niet constant wilt pollen. Daar valt echter wel weer omheen te programmeren door een verandering in PIR oftewel langer vast te houden of deze expliciet je Pimatic te laten triggeren. In het laatste heb ik mij (nog) niet verdiept.
Duidelijke uitleg, echter gaat helaas boven mijn niveau om zoiets zelf in elkaar te zetten!