Arduino - PIR bewegingsmelder
Een PIR bewegingsmelder is een passieve detector, dat wil zeggen, een detector die alleen waarneemt en zelf geen signaal uitzendt. De PIR detector neemt infrarood licht waar. Infrarood licht is warmtestraling dat bijvoorbeeld door een warm lichaam wordt uitgezonden. Dat kan een mens zijn, maar natuurlijk ook een warmbloedig dier. Vallende bladeren en dergelijke geven geen warmtestraling af en zullen dus geen signaal geven. PIR melders geven nogal eens een valse melding. Dat komt niet alleen doordat ze ook gevoelig zijn voor (huis)dieren maar bijvoorbeeld ook voor warmtestraling van voorwerpen die door directe zonnestraling worden opgewarmd of straling van een kachel of haardvuur. daarbij is de PIR detector alleen gevoelig voor verandering in infrarode straling; als iemand stil staat voor een PIR melder zal het signaal wegvallen. PIR melders hebben ook moeite om mensen waar te nemen die zich isolerend hebben aangekleed of in situaties waarbij juist alles warmtestraling uitzend, zoals op hele warme dagen. De warmtestraling van mensen verdwijnt dan gewoon in de achtergrondstraling. Voor een betrouwbare detectie wordt een PIR melder dan ook vaak gecombineerd met een detector van een ander type.
De PIR melder
We gaan hier uit van een PIR melder zoals onderstaand weergegeven.
|
| Onderkant van de PIR melder met instellingen |
Deze heeft drie aansluitingen: Vcc, OUT en GND. Daarnaast heeft deze detector twee instel-potentiometers. Met de eerste kan de gevoeligheid van de sensor worden ingesteld, terwijl met de tweede de duur van het signaal ingesteld kan worden (tussen de 0.3 en 300 seconden). Naar rechts draaien (met de klok mee) is gevoeliger/langer. Als de detector warmtestraling waarneemt wordt OUT hoog en blijft gedurende de ingestelde periode hoog. Dan zit er nog een jumper die in twee standen gezet kan worden. De eerste stand, zoals op de foto, heet repeatable trigger. In deze stand blijft de output hoog zolang het warmtestraling blijft zien. In de tweede stand, non-repeatable trigger, zal de output na de wachttijd laag worden ondanks een mogelijke aanwezigheid van een warmtestraler. Hij zal pas weer hoog worden na een afkoelingsperiode en een nieuwe detectie.
De echte sensor zit aan de andere kant. Het meest opvallende is een plastic kapje dat werkt als een primitieve lens voor infrarood straling. De vlakjes in het kapje helpen om ervoor te zorgen dat het signaal meer varieert als de warmtebron beweegt ten opzichte van de sensor. Je kunt het kapje gemakkelijk verwijderen en dan de echte sensor zien. Die heeft een cylindervormige metalen behuizing met in het midden het infrarood gevoelige oppervlak in de vorm van een metalige rechthoek. Als je het kapje hebt verwijderd kun je tevens zien wat de functie is van de drie aansluit-pins.
Als we, zoals hier, een micro-controller gebruiken in combinatie met de sensor is de delay time instelling eigenlijk overbodig. Via de software kunnen we namelijk elke delay time maken die we willen. Datzelfde geldt voor de repeatable trigger instelling. Mijns inziens kun je daarom het beste de jumper instellen op repeating en de delay time zo kort mogelijk maken. Maar je kunt de sensor ook zonder micro-controller gebruiken en dan zijn deze instellingen zeker interessant.
De schakeling
Extra benodigdheden:
- 1 PIR melder
- 1 LED
- 1 weerstand van 220Ω
|
| Een eenvoudige PIR verklikker |
Het programma
int LEDpin = 7; // aansluitpin van de LED
int PIRpin = 5; // aansluitpin van de knop
int wait = 100; // wachttijd tussen waarnemingen
void setup()
{
pinMode(LEDpin, OUTPUT);
pinMode(PIRpin, INPUT);
}
void loop()
{
digitalWrite(LEDpin,digitalRead(PIRpin));
delay(wait);
}
Uitleg
Het programma behoeft eigenlijk geen uitleg omdat het zo eenvoudig is. In de setup() worden de functies van de twee pins vastgelegd, terwijl de loop() een dititalWrite() doet naar de LEDpin van het signaal dat wordt gelezen van de PIRpin. Daarna wacht het programma 100 ms.
Beetje spelen
Zoals gezegd geeft een PIR melder nogal vaak een valse melding. Het ding reageert dan op een langslopende kat of een fluctuatie die veroorzaakt wordt door opwarmende lucht. Daar komt bij dat je soms alleen wilt zien als er mensen aankomen, niet als ze weggaan. Door nu een aantal sensoren op een rij te zetten, kun je de richting en snelheid van beweging detecteren en tegelijk het aantal valse meldingen flink terugdringen. Stel dat je vier sensoren hebt, genummerd 1, 2, 3 en 4. Maak een schakeling en bijbehorend programma dat aan elk van de vier sensoren een rood LEDje koppelt, maar daarbij een groene LED laat aangaan als er iemand langsloopt in de richting van 1 naar 4. Eventueel gebruik je nog een blauwe of gele LED voor de andere richting. Zorg ervoor dat aan dat langslopen een tijdslimiet zit, of meet de snelheid van langslopen en stel daarvoor grenzen in. Zou cool zijn als er, in oplaats van de groene LED, een schriklamp zou aan gaan waarna er een paar foto's worden gemaakt!

