Raspberry Pi Pico: Anwesenheitserkennung für ein Display mit PIR Motion Detector (HC-SR501)
Displays dienen zur Anzeige von Informationen. Dazu muss das Display eingeschaltet sein. Sinnvoll ist das aber nur, wenn sich gerade jemand vor dem Display befindet. Wenn nicht ist das ein unnötiger Stromverbrauch. Deshalb gibt es die Idee, eine Person vor dem Display zu erkennen und das Display zu aktivieren. Wird nach einiger Zeit keine Person vor dem Display erkannt, wird das Display abgeschaltet. Das wäre praktisch eine lokale Anwesenheitserkennung für das Display.
In der folgenden Lösung wollen wir einen PIR Motion Detector vom Typ HC-SR501 für die Anwesenheitserkennung verwenden und ein HD44780-kompatibles LCD mit I2C-Modul steuern.
Wenn das Deine ersten Versuche mit einem PIR Motion Detector und einem HD44780-kompatiblen LCD mit I2C-Modul sind, dann solltest Du Dich zuerst über die Besonderheiten dieser Bauteile informieren. Außerdem empfiehlt es sich zuerst mit den einzelnen Bauteilen Erfahrungen zu sammeln.
- Mehr Informationen zum HC-SR501 PIR Motion Detector
- Experimente mit der Bewegungserkennung mit dem HC-SR501
- Mehr Informationen zum HD44780-kompatiblen LCD mit I2C-Modul
- HD44780-kompatibles LCD mit I2C-Modul programmieren
Aufbau und Bauteile
- HC-SR501 - PIR Motion Detector
- HD44780-kompatibles LCD mit I2C-Modul
- GPIO-Belegung (Pinout)
- I2C verbinden und testen
Raspberry Pi Pico | HC-SR501 | |
---|---|---|
Pin 36 | 3V3_OUT, +3,3V | VCC |
Pin 38 | GND | GND |
Pin 29 | GPIO 22 | OUT |
Raspberry Pi Pico | LCD (I2C) | |
Pin 40 | VBUS, +5,0V | VCC |
Pin 38 | GND | GND |
Pin 27 | GPIO 21 I2C0 SCL | SCL |
Pin 26 | GPIO 20 I2C0 SDA | SDA |
Schnell und einfach alle Bauteile zusammen bestellen
Programmcode
Dreh- und Angelpunkt der softwareseitigen Ansteuerung des 1602-Displays mit der I2C-Schnittstelle sind zwei Python-Bibliotheken. Eine für den I2C und das andere für das Display selber. Die beiden folgenden Dateien müssen heruntergeladen und auf dem Pico gespeichert werden:
Damit hast Du die softwareseitigen Voraussetzungen zur Ansteuerungen des Displays erfüllt.
Im Programmcode wird der GPIO-Pin für den PIR Motion Detector, der I2C-Bus und das Display initialisiert. Anschließend wird ein Text auf dem Display beispielhaft ausgegeben.
Im weiteren Programmcode werden zwei Funktionen definiert. Eine, um das Display einzuschalten und die andere, um das Display auszuschalten. Wobei hier nicht das Display selber ein- und ausgeschaltet wird, sondern nur die Hintergrundbeleuchtung.
Die Einschaltfunktion wird über einen Interrupt aufgerufen, wenn eine Bewegung durch den PIR-Sensor registriert wird.
Die Ausschaltfunktion wird über eine Timersteuerung aufgerufen. In der Ausschaltfunktion wird das Display aber nur dann tatsächlich ausgeschaltet, wenn der PIR-Sensor in Ruhe ist. Also keine Bewegung erkannt wird.
# Bibliotheken laden from time import sleep from machine import I2C, Pin, Timer from machine_i2c_lcd import I2cLcd # Initialisierung des PIR-Moduls pir = Pin(22, Pin.IN, Pin.PULL_DOWN) # Initialisierung I2C i2c = I2C(0, sda=Pin(20), scl=Pin(21), freq=100000) # Initialisierung LCD über I2C lcd = I2cLcd(i2c, 0x27, 2, 16) # Display-Zeilen ausgeben lcd.putstr('Hello World') # Funktion: Display einschalten def display_on(pin): lcd.backlight_on() # Funktion: Display ausschalten def display_off(timer): pir_value = pir.value() print(pir_value) if pir_value == 0: lcd.backlight_off() # Initialisierung Interrupt für die Bewegungserkennung pir.irq(trigger=Pin.IRQ_RISING, handler=display_on) # Timer für die Display-Abschaltung nach Zeit tim = Timer(freq=0.05, mode=Timer.PERIODIC, callback=display_off)
Funktionen prüfen
- Display-Abschaltung: Beim Starten des Programms sollte das Display angehen und auch anbleiben. Die Frage ist, ob sich das Display nach einiger Zeit abschaltet. Die Abschaltung erfolgt natürlich nur, wenn keine Bewegung vom PIR Motion Sensor erkannt wird. Dazu ist es erforderlich den Sensor in eine Richtung zeigen zu lassen, in der er definitiv keine Bewegung registrieren kann. Nach einiger Zeit sollte das Display ausgehen und auch ausbleiben.
- Display bleibt an: Wenn die Display-Abschaltung funktioniert ist zu prüfen, ob das Display auch anbleibt, wenn jemand sich vor dem Display befindet. Dazu drehst Du den PIR Motion Sensor zu Dir hin. Das Display sollte die ganze Zeit anbleiben, auch wenn Du Dich nicht viel und nicht oft bewegst.
Wenn das alles ohne Probleme funktioniert hat, dann hast Du vermutlich nicht lange genug geprüft oder einfach wahnsinnig viel Glück gehabt. Dazu ein paar Beobachtungen, Erklärungen und hilfreiche Lösungsvorschläge.
Beobachtungen und Erklärungen
Die Frequenz des Timers im Programmcode ist vermutlich zu groß. Die gewählte Frequenz ist zum Testen und Experimentieren gedacht. Du willst schließlich wissen, ob das Display zeitnah ausgeht. Wenn das Display länger anbleiben soll, dann muss die Zeit verlängert werden. Das bedeutet, der Wert der Frequenz muss kleiner werden.
Die Anwesenheitserkennung mit einem PIR Motion Detector lebt davon, dass sich jemand bewegt. Wenn sich jemand vor dem Display befindet, der Sensor aber keine Bewegung registriert, weil die Person bewegungslos ist, dann geht das Display trotzdem aus. Bei einer Bewegung geht das Display zwar gleich wieder an, aber die irrtümliche Abschaltung kann trotzdem nervig sein.
Es gibt zwei Möglichkeiten das zu lösen. Man verlängert die Zeit bzw. verkleinert den Parameter „freq“ des Timers, der die Abschaltung auslöst. Alternativ bestünde die Möglichkeit die Dauer der Zustandshaltung der Bewegungserkennung am linken Potentiometer (Kuppel zeigt nach oben) zu verlängern.
Darf es ein bisschen mehr sein?
Genau genommen ist eine Anwesenheitserkennung mit einem PIR-Sensor eher untauglich. Weil eine Anwesenheit nicht zwangsläufig bedeutet, dass eine Bewegung stattfinden muss. Aber ein PIR-Sensor braucht eine Bewegung um eine Anwesenheit feststellen zu können.
Eine Alternative zur Anwesenheitserkennung mit PIR-Sensor ist eine Abstandsmessung. Zum Beispiel mit einem Ultraschallsensor.
Weitere verwandte Themen:
- Raspberry Pi Pico: Bewegungserkennung mit PIR Motion Detector HC-SR501
- Raspberry Pi Pico: Bewegung erkennen und anzeigen mit PIR Motion Detector (HC-SR501)
- Raspberry Pi Pico: Bewegungsmelder mit PIR Motion Detector (HC-SR501)
- Raspberry Pi Pico: LCD-1602-Display mit I2C-Modul programmieren
- Raspberry Pi Pico: Automatisches Nachtlicht mit PIR Motion Sensor HC-SR501 und RGB-LED WS2812
Teilen:
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.
- LED: Einschalten, ausschalten, blinken und Helligkeit steuern
- Taster: Entprellen und Zustände anzeigen
- LED mit Taster einschalten und ausschalten
- Ampel- und Lauflicht-Steuerung
- Elektronischer Würfel
- Eigene Steuerungen programmieren
Online-Workshop: Programmieren mit dem Raspberry Pi Pico
Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.
Für Ihre Fragen zu unseren Online-Workshops mit dem Raspberry Pi Pico besuchen Sie unseren PicoTalk (Online-Meeting). (Headset empfohlen)