.. include:: /index.rst :start-after: start_hello_message :end-before: end_hello_message .. _py_pir: 2.7 PIR-Sensor ================= **Einführung** Der Passive-Infrarot-Sensor (PIR) ist ein Bewegungssensor, der Infrarotstrahlung erkennt, die von Menschen und Tieren ausgestrahlt wird. In diesem Projekt verwenden wir den PIR-Sensor, um Bewegungen zu erkennen. ---------------------------------------------- **Benötigte Komponenten** Für dieses Projekt werden folgende Komponenten benötigt: .. list-table:: :widths: 30 20 :header-rows: 1 * - KOMPONENTENBESCHREIBUNG - KAUFLINK * - :ref:`cpn_pir` - |link_pir_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_fusion_hat` - \- * - Raspberry Pi - \- ---------------------------------------------- **Schaltplan** Unten sehen Sie das Schaltbild für dieses Projekt: .. image:: img/fzz/2.2.6_sch.png ---------------------------------------------- **Verdrahtungsdiagramm** Bauen Sie die Schaltung wie im folgenden Diagramm dargestellt auf: .. image:: img/fzz/2.2.6_bb.png :width: 80% :align: center Stellen Sie sicher, dass die RGB-LED und der PIR-Sensor gemäß dem Schaltplan mit den richtigen GPIO-Pins verbunden sind. .. note:: Stellen Sie die beiden Potentiometer auf dem PIR-Modul ein, um die optimale Empfindlichkeit und Erkennungsdistanz zu erreichen. Drehen Sie beide gegen den Uhrzeigersinn auf ihre maximale Einstellung, um die besten Ergebnisse zu erzielen. .. image:: ../python/img/PIR_TTE.png :width: 200 :align: center ---------------------------------------------- **Beispiel ausführen** Der gesamte Beispielcode, der in diesem Tutorial verwendet wird, befindet sich im Verzeichnis ``ai-lab-kit``. Führen Sie das Beispiel mit den folgenden Schritten aus: .. raw:: html .. code-block:: shell cd ~/ai-lab-kit/python/ sudo python3 2.7_PIR.py Dieses Python-Skript überwacht einen PIR-Bewegungssensor und reagiert auf erkannte Bewegungen. Beim Ausführen passiert Folgendes: 1. **Wenn Bewegung erkannt wird**: Es wird „Detected Barrier!“ in der Konsole ausgegeben. 2. **Wenn keine Bewegung erkannt wird**: Es wird „No Barrier“ in der Konsole ausgegeben. 3. Das Programm läuft unbegrenzt weiter und wartet auf Bewegungsereignisse. Es kann durch Drücken von Ctrl+C beendet werden. ---------------------------------------------- **Code** Unten finden Sie den Python-Code für dieses Projekt: .. raw:: html .. code-block:: python #!/usr/bin/env python3 from fusion_hat.pin import Pin, Mode, Pull from signal import pause # Import pause function from signal module # Initialize a PIR Module object on GPIO pin 17 pir = Pin(17, mode=Mode.IN, pull=Pull.DOWN) def detect(): if pir.value() == 1: # Check if the PIR Module is triggered print("Detected Barrier!") else: print("No Barrier") try: pir.when_activated = detect # Set up an interrupt to detect changes in the pir sensor state pir.when_deactivated = detect # Run an event loop that waits for button events and keeps the script running print("CTRL + C to exit") pause() except KeyboardInterrupt: # Handle KeyboardInterrupt (Ctrl+C) to exit the loop gracefully pass ---------------------------------------------- **Code verstehen** 1. **Importe:** .. code-block:: python from fusion_hat.pin import Pin, Mode, Pull from signal import pause # Importiert die Funktion pause aus dem signal-Modul Das Skript verwendet die ``fusion_hat``-Bibliothek zur Steuerung des PIR-Sensors und das ``signal``-Modul, um das Programm aktiv zu halten. 2. **Initialisierung:** .. code-block:: python pir = Pin(17, mode=Mode.IN, pull=Pull.DOWN) In dieser Zeile wird ein PIR-Sensor an Pin 17 initialisiert, wobei ein interner Pull-down-Widerstand aktiviert ist. 3. **Hauptlogik:** .. code-block:: python def detect(): if pir.value() == 1: # Prüfen, ob das PIR-Modul ausgelöst wurde print("Detected Barrier!") else: print("No Barrier") try: pir.when_activated = detect # Interrupt einrichten, um Zustandsänderungen des PIR-Sensors zu erkennen pir.when_deactivated = detect # Ereignisschleife starten, die auf Sensorereignisse wartet und das Skript aktiv hält print("CTRL + C to exit") pause() except KeyboardInterrupt: # KeyboardInterrupt (Ctrl+C) abfangen und das Programm sauber beenden pass * Überwacht kontinuierlich, ob der PIR-Sensor eine Bewegung erkennt. * Wenn eine Bewegung erkannt wird, wird die Meldung „Detected Barrier!“ ausgegeben. * Wenn keine Bewegung erkannt wird, wird die Meldung „No Barrier“ ausgegeben. ---------------------------------------------- **Fehlerbehebung** 1. **Bewegung wird nicht erkannt** - **Ursache**: Der PIR-Sensor ist nicht korrekt angeschlossen oder konfiguriert. - **Lösung**: - Stellen Sie sicher, dass der PIR-Sensor mit GPIO-Pin 17, der Stromversorgung und GND verbunden ist. - Passen Sie gegebenenfalls die Empfindlichkeits- und Verzögerungspotentiometer am Sensor an. ---------------------------------------------- **Erweiterungsideen** 1. **Akustisches Feedback** Fügen Sie einen Buzzer hinzu, der ein Signal ausgibt, wenn eine Bewegung erkannt wird: .. code-block:: python from fusion_hat import Buzzer buzzer = Buzzer(Pin(22)) if pir.value() == 1: buzzer.on() else: buzzer.off() 2. **Datenprotokollierung** Protokollieren Sie erkannte Bewegungsereignisse mit Zeitstempel in einer Datei zur späteren Analyse: .. code-block:: python with open("motion_log.txt", "a") as log_file: log_file.write(f"Motion detected at {time.time():.3f}\n") ---------------------------------------------- **Fazit** Dieses Projekt zeigt, wie ein PIR-Sensor zur Bewegungserkennung eingesetzt werden kann. Durch das Verständnis der Grundlagen der Bewegungserkennung können Sie dieses Projekt zu komplexeren Anwendungen weiterentwickeln, beispielsweise für Sicherheitssysteme, automatische Beleuchtung oder interaktive Geräte. Die Vielseitigkeit und einfache Nutzung des PIR-Sensors machen ihn zu einer ausgezeichneten Komponente für zahlreiche DIY- und professionelle Projekte.