Der Pyroelektrischer Infrarot Motion Sensor kurz PIR (und im folgenden Text auch so benannt) ist ein Bewegungssensor. Wie ein Bewegungsmelder genau funktioniert wurde in dem Wikipedia Artikel Bewegungsmelder sehr gut beschrieben.
Technische Daten
Da der PIR Sensor ein passives Bauteil ist, ist die Stromaufnahme sehr gering.
- Spannung – 3V bis 9V
- Erkennungsradius – 110° bis 70°
Der Schaltplan
Das Prinzip und der Aufbau sind einem Schalter gleichzusetzen, d.h. es wird eine Spannung angelegt (zbsp. 3V) und wenn etwas erkannt wurde, wird diese Spannung durch einen 2. PIN auf “HIGH” gesetzt.
- VCC – 5V
- OUT – digitaler PIN 10*
- GND – GND
*Es kann ein beliebiger digitaler PIN gewählt werden, dieser muss ggf. im Beispielsketch angepasst werden.
Der Fertige aufbau
Angeschlossen an den Arduino Nano sieht das dann folgendermaßen aus.
Der PIR Sensor kann sowohl an 3V sowie an 5V betrieben werden, es wird jedoch laut Anleitung eine 5V Spannung empfohlen.
Einstellen der Dauer und der Empfindlichkeit
Bei diesem Modul kann die Empfindlichkeit des Sensors sowie die Dauer des Signals über 2 Drehpotentiometer eingestellt werden.
- Sx ist die Empfindlichkeit (Sensity).
- Tx ist die Dauer (Time) die das Signal aktiv sein soll
(z.bsp. für eine Lampe oder Buzzer)
Der Quellcode
int buzzerPin = 10; //Ausgangspin für den Buzzer int inputPin = 2; // Eingangspin des PIR Sensors int pirState = LOW; //Status des PIR Sensors void setup() { pinMode(buzzerPin, OUTPUT); //Den Buzzer als Ausgang deklarieren pinMode(inputPin, INPUT); //Den PIR Sensor als Eingang deklarieren Serial.begin(9600); //Serielle kommunikation mit 9600 Baud beginnen. } void loop(){ int val = digitalRead(inputPin); //Das Eingangssignal lesen if (val == HIGH) { // Prüfen ob der Wert HIGH, also ob ein Signal anliegt //Wenn der gespeicherte Status == LOW ist, also wenn vorher kein Signal vorhanden war, //dann soll auf dem Seriellen Ausgang der Text ausgegeben werden und der PIR Status auf HIGH gesetzt werden. if (pirState == LOW) { Serial.println("Bewegung erkannt!"); pirState = HIGH; } //Wenn der gelesene Wert nicht HIGH ist, also es liegt KEIN Signal an. } else { //Wenn der PIR Status HIGH ist, also es lag ein Signal vorher an, //dann soll auf dem Seriellen Ausgang der Text ausgegeben werden und der PIR Status auf LOW gesetzt werden. if (pirState == HIGH){ Serial.println("Bewegung beendet!"); pirState = LOW; } } //Wenn der PIR Status auf HIGH ist dann soll ein Ton ausgegeben werden. //Hier könnte auch zusätzlich eine LED oder ähnliches mit angebracht werden. if(pirState == HIGH){ tone(buzzerPin,850, 500); } // digitalWrite(ledPin, pirState); }
Das Video
Zur Darstellung dass, das Signal auf HIGH gesetzt wurde habe ich einen kleinen Buzzer angeschlossen, welcher ertönt, sobald sich etwas vor dem Sensor bewegt.