Raspberry Pi Pico: Anwesenheitserkennung für ein Display mit Ultraschallsensor HC-SR04
Displays dienen zur Anzeige von Informationen. Dazu muss das Display eingeschaltet sein. Sinnvoll ist das aber nur, wenn sich tatsächlich jemand vor dem Display befindet. Wenn nicht, dann kann das als unnötiger Stromverbrauch gewertet werden. Deshalb gibt es die Idee, eine Person vor dem Display zu erkennen und das Display zu aktivieren. Wird 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 Ultraschallsensor vom Typ HC-SR04 für die Anwesenheitserkennung verwenden und ein HD44780-kompatibles LCD mit I2C-Modul steuern.
Wenn das Deine ersten Versuche mit einem Ultraschallsensor 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 Ultraschallsensor HC-SR04
- Abstandsmessung mit Ultraschallsensor HC-SR04
- Mehr Informationen zum HD44780-kompatiblen LCD mit I2C-Modul
- HD44780-kompatibles LCD mit I2C-Modul programmieren
Aufbau und Bauteile
- HC-SR04 - Ultraschallsensor
- HD44780-kompatibles LCD mit I2C-Modul
- GPIO-Belegung (Pinout)
- I2C verbinden und testen
Raspberry Pi Pico | HC-SR04 | |
---|---|---|
Pin 36 | 3V3 OUT | VCC |
Pin 38 | GND | GND |
Pin 22 | GPIO 17 | Echo |
Pin 21 | GPIO 16 | Trigger |
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 |
Es gibt sehr viele unterschiedliche HC-SR04-Typen mit ähnlichen Typenbezeichnungen, aber unterschiedlichen elektrischen Parametern.
Normalerweise wird man einen Sensor vom Typ HC-SR04 verwenden. Der ist in der Regel nur TTL-kompatibel und somit nur an Arduinos ohne zusätzliche Schaltungsmaßnahmen einsetzbar.
Für den Einsatz mit Raspberry Pi und Raspberry Pi Pico, die mit +3,3-Volt-Signalen arbeiten, eignet sich der Sensor vom Typ HC-SR04P (mit P) besser. Es gibt aber auch einen HC-SR04-Typ, der wahlweise für 3,3 Volt und 5 Volt geeignet ist.
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 werden die GPIO-Pins für den Ultraschallsensor, den 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 wir hier nur die Hintergrundbeleuchtung einschalten und ausschalten.
Die Einschaltefunktion wird über einen Interrupt aufgerufen, wenn eine Bewegung durch den PIR-Sensor registriert wird.
Die Ausschaltefunktion wird über eine Timersteuerung aufgerufen.
# Bibliotheken laden from time import sleep, sleep_us, ticks_us from machine import I2C, Pin, Timer from machine_i2c_lcd import I2cLcd # Initialisierung GPIO-Ausgang für Trigger-Signal trigger = Pin(16, Pin.OUT) # Initialisierung GPIO-Eingang für Echo-Signal echo = Pin(17, Pin.IN) # 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: Anwesenheit erkennen def distance_measure(): trigger.low() sleep_us(2) trigger.high() sleep_us(5) trigger.low() while echo.value() == 0: signaloff = ticks_us() while echo.value() == 1: signalon = ticks_us() timepassed = signalon - signaloff abstand = timepassed * 0.03432 / 2 if abstand > 100: return 0 else: return 1 # Funktion: Display-Steuerung def display(timer): if distance_measure() == 0: lcd.backlight_off() else: lcd.backlight_on() # Timer für die Display-Steuerung tim = Timer(freq=0.5, mode=Timer.PERIODIC, callback=display)
Im Programmcode ist als Abstand von 100 cm festgelegt, in dem sich eine Person vor dem Ultraschallsensor befinden muss, um als anwesend zu gelten.
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 sich keine Person und kein Objekt vor dem Ultraschallsensor befindet bzw. der Abstand groß genug ist. Dazu ist es erforderlich den Sensor in eine Richtung zeigen zu lassen, in der der Abstand zu Personen und Objekten groß genug ist. Das Display wird sofort ausgehen.
- Display bleibt an: Wenn die Display-Abschaltung funktioniert ist zu prüfen, ob das Display auch angeht und anbleibt, wenn jemand sich vor dem Display befindet. Dazu drehst Du den Ultraschallsensor zu Dir. Das Display sollte angehen und anbleiben, solange Du Dich vor dem Sensor befindest.
Beobachtungen und Erklärungen
Die Anwesenheitserkennung per Ultraschallsensor funktioniert praktisch störungsfrei. Das Display geht sofort an und aus, wenn sich jemand vor dem Display befindet oder entfernt.
Was diese Lösung nicht berücksichtigt ist eine zeitliche Verzögerung bei der Abschaltung.
Darf es ein bisschen mehr sein?
Eine Alternative zur Anwesenheitserkennung mit ein Ultraschallsensor ist die Bewegungserkennung mit einem Bewegungssensor.
Weitere verwandte Themen:
- Raspberry Pi Pico: Abstandsmessung mit Ultraschallsensor HC-SR04
- Raspberry Pi Pico: Abstandsmessung mit Temperaturkompensation für Ultraschallsensor HC-SR04
- Raspberry Pi Pico: Abstandsmessung mit Ultraschallsensor HC-SR04 auf einem 1602-Display anzeigen
- Raspberry Pi Pico: Bewegungserkennung mit PIR Motion Detector HC-SR501
- Raspberry Pi Pico: Abstandswarner mit Summer und Ultraschallsensor HC-SR04
Frag Elektronik-Kompendium.de
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)