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.

Aufbau und Bauteile

Raspberry Pi Pico: Abstandsmessung mit Ultraschallsensor (HC-SR04) auf einem Display anzeigen (LCD-1602 mit I2C)

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

  1. 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.
  2. 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:

Frag Elektronik-Kompendium.de

Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython

Elektronik-Set Pico Edition

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

Elektronik-Set jetzt bestellen Online-Workshop buchen

Online-Workshop: Programmieren mit dem Raspberry Pi Pico

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.

Online-Workshop buchen

Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.

Termine und Newsletter-Anmeldung

 

Elektronik-Sets für das Hardware-nahe Programmieren