| PIR-Bewegungsmelder mit Raspberry Pi
PIR-Sensor In der folgenden Schaltung kommt als Bewegungsmelder ein fertiges Modul VMA314 (von Velleman) zum Einsatz. Anderes
populäres Modul, das ähnlich aufgebaut ist, trägt die Bezeichnung HC-SR501. Neben einem PIR-Sensor, der unter einer Fresnel-Linse im
oberen Teil der kleinen elektronischen Platine versteckt ist, findet sich im unteren Teil der Platine der IC-Controller BISS0001. Er
sorgt zusammen mit der Beschaltungselektronik für die Auswertung der Signale, die vom PIR-Sensor stammen. BISS0001 Das Modul VMA314 hat drei Anschlüsse. Für die Versorgungsspannung, die 5 V beträgt, werden zwei Pins gebraucht. Der dritte
Pin steht als Ausgang zur Verfügung. Intern arbeitet die kleine Platine mit 3,3 V, daher kann das Modul ohne Weiteres an Raspberry Pi
angeschlossen werden. Für die Auswertung des Signals kann beliebiges GPIO verwendet werden. Auf der Platine sind zusätzlich zwei
Potenziometer untergebracht. Mit ihnen kann Empfindlichkeit und die Intervallzeit eingestellt werden. PIR-Modul VMA314 Die SchaltungEin Lichtband einer Lagerhalle kann wahlweise via Bewegungsmelder oder einen Taster ein- und ausgeschaltet werden. Am Tag,
während der Arbeitszeit, kann das Licht beim Verlassen der Lagerhalle wegen Energieeinsparung zu jedem Zeitpunkt zusätzlich via Taster
direkt ausgeschaltet werden. Optional kann das Bewegungssignal des Bewegungsmelders von einer Alarmanlage, sofern sie scharfgeschaltet
wurde, ausgewertet werden. Außerdem könnte eine Entscheidung getroffen werden, ob, während die Alarmanlage scharf gestellt wurde, das
Licht per Bewegungsmelder ein- bzw. ausschaltbar sein soll. Diese Option wird in der folgenden Schaltung jedoch nicht berücksichtigt.
Die Koordination der Schaltvorgänge übernimmt Raspberry Pi mit einem Python-Programm. Testschaltung Die Schaltung, da nur wenige Verbindungen hergestellt werden müssen, kann zügig auf einem Steckbrett aufgebaut werden.
Der Bewegungssensor wird mit 5 V versorgt. Hierzu nutzen wir den Pin Nr. 1 des Raspi, der 5 V liefert. Der Ausgang des Sensors wird an
Pin 16 angeschlossen, der als Eingang definiert wird. Zusätzlich wird am Pin 36, der ebenfalls als Eingang definiert wird, ein Taster
angeschlossen. Für Beobachtungszwecke wird am Pin 22 eine Leuchtdiode mit einem Vorwiderstand angeschlossen. Sie soll die Beleuchtung der
Lagerhalle symbolisieren. Der Pin 22 wird dementsprechend als Ausgang definiert.
Schaltplan Das ProgrammDamit das folgende Programm gute Dienste leisten kann,
stellen wir die Nachlaufzeit am Sensor-Modul auf Minimum. Das Starten,
Verlängern und schließlich Beenden der Nachlaufzeit übernimmt das
Programm. Andernfalls können sich vor Ort Situationen ergeben, mit
welchen der Nutzer sicher nicht einverstanden wäre.
# ------------------------------------------------------------ # Raspi & Bewegungsmelder # PIR - Sensor-Modul mit BISS0001 # Raspberry Pi 3B, Python 3 # ------------------------------------------------------------ import time import RPi.GPIO as GPIO Eingang_Bewegung = 16 LED_Beleuchtung = 22 Taster_Ein_Aus = 36 Licht_Status = False Nachlaufzeit = 15 Zeit_Anfang = 0 Zeit_Ist = 0 Flanke_Sensor = False Flanke_Taster = False def Bewegung_erkannt(n): global Flanke_Sensor Flanke_Sensor = True def Taster_betätigt(n): global Flanke_Taster Flanke_Taster = True GPIO.setmode(GPIO.BOARD) GPIO.setwarnings(False) GPIO.setup(LED_Beleuchtung, GPIO.OUT) GPIO.setup(Eingang_Bewegung, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(Taster_Ein_Aus, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.add_event_detect (16, GPIO.RISING) GPIO.add_event_callback (16, Bewegung_erkannt) GPIO.add_event_detect (36, GPIO.FALLING) GPIO.add_event_callback (36, Taster_betätigt) # Hauptprogramm -------------------------------------------------- while True: if Flanke_Sensor: # Licht EIN (Bewegung) Licht_Status = True Flanke_Sensor = False Zeit_Anfang = time.time() GPIO.output(22, GPIO.HIGH) print("Bewegung") if not Licht_Status and Flanke_Taster: # Licht EIN (Taster) time.sleep(0.3) # Prellen abwarten Licht_Status = True Flanke_Taster = False Zeit_Anfang = time.time() GPIO.output(22, GPIO.HIGH) print("Taster Ein") if Licht_Status and Flanke_Taster: # Licht AUS (Taster) time.sleep(0.3) # Prellen abwarten Licht_Status = False Flanke_Taster = False GPIO.output(22, GPIO.LOW) print("Taster Aus") Zeit_Ist = time.time() # Zeit abgelaufen if Licht_Status: if (Zeit_Ist > Zeit_Anfang + Nachlaufzeit): if GPIO.input(16) == GPIO.LOW: Licht_Status = False GPIO.output(22, GPIO.LOW) print("Zeit abgelaufen") # Anzeige ................................................... if Licht_Status and (int(Zeit_Ist) == int(Zeit_Anfang)): print("Nachlaufzeit noch 15 Sek.") time.sleep (1) if Licht_Status and (int(Zeit_Ist) == int(Zeit_Anfang + 5)): print("Nachlaufzeit noch 10 Sek.") time.sleep (1) if Licht_Status and (int(Zeit_Ist) == int(Zeit_Anfang + 10)): print("Nachlaufzeit noch 5 Sek.") time.sleep (1) # ........................................................... time.sleep(0.5) # ------------------------------------------------------------------ KurzvideoKurzvideo Weitere Themen:
|