Raspberry Pi Pico: Abstandswarner mit Summer und Ultraschallsensor HC-SR04

Ein Abstandswarner hat die Aufgabe vor Zusammenstöße zu warnen. Beispielsweise als Einparkhilfe beim Auto oder der Abstandswarner aus Corona-Zeiten.

Dieses Prinzip kennt man von der Rückwärtseinparkhilfe beim Auto, die den Fahrer warnt, wenn sich das Heck des Fahrzeugs einem Objekte nähert.

Ein Abstandswarner arbeitet mit einem Ultraschall-Sensor zusammen mit einem aktiven Summer. Je kleiner der Abstand zu einem Objekt wird, desto schneller piept der Summer, um vor einer zu großen Nähe zu warnen.

Aufbau und Bauteile

Raspberry Pi Pico: Abstandswarner mit Summer und Ultraschallsensor HC-SR04

Raspberry Pi Pico HC-SR04 (+3,3V) Summer
Pin 36 3V3 OUT VCC  
Pin 38 GND GND  
Pin 22 GPIO 17 Echo  
Pin 21 GPIO 16 Trigger  
Pin 24 GPIO 18   + (S)
Pin 23 GND   GND (-)

Hinweis: Wenn man einen Sensor-Typ HC-SR04 (+5V-Typ) hat, dann darf der Echo-Ausgang nicht einfach so auf einen GPIO-Eingang des Raspberry Pi Pico geschaltet werden. Zwischen dem Echo-Ausgang des Sensors und dem GPIO-Eingang des Picos muss ein Spannungsteiler geschaltet sein.

Schnell und einfach alle Bauteile zusammen bestellen

MicroPython-Bibliothek „picozero“ für Distanz-Sensor HC-SR04

Um den Programmcode möglichst kurz und übersichtlich zu halten, verwenden wir die MicroPython-Bibliothek „picozero“, um den Distanz-Sensor HC-SR04 anzusteuern. Das Lesen der Entfernung zu einem Objekt erfolgt mit einem Kommando.

Programmcode

Am Anfang des Programmcodes werden notwendige Bibliotheken geladen, der Buzzer, Onboard-LED, Timer und der Distanz-Sensor initialisiert. Danach werden Funktionen für den Summer definiert.
Der Timer hat den Vorteil, dass man eine Funktion zeitabhängig und unabhängig vom weiteren Programmcode ausführen kann.
Wenn das Piepen des Summers nervt, kann man diesen auch abklemmen und sich auf das Blinken der Onboard-LED verlassen.

Das Hautprogramm ist eine Endlos-Schleife in der die Distanz gemessen wird. Anschließend wird sie in verschiedene Werte umgerechnet, die sich leichter verarbeiten lassen.
Die Intensität des Piepens wird dem Timer als Frequenz in Hertz (Hz) übergeben, bei der es sich um den Kehrwert der Distanz in Meter handelt.

# Bibliotheken laden
from machine import Pin, Timer
from picozero import DistanceSensor
from time import sleep

# Initialisierung Onboard-LED und Summer
buzzer = Pin(18, Pin.OUT, value=0)
onboard_led = Pin(25, Pin.OUT, value=0)

# Initialisierung Timer für den Summer
timer = Timer()

# Initialisierung HC-SR04
ds = DistanceSensor(echo=17, trigger=16)

# Funktion: Piepen
def beep(value):
    buzzer.toggle()
    onboard_led.toggle()

# Funktion: Piepen aus
def beep_off():
    buzzer.off()
    onboard_led.off()

# Funktion: Piepen an
def beep_on():
    buzzer.on()
    onboard_led.on()

# Wiederholung: Endlos-Schleife
while True:
    # Abstand messen (Meter)
    value_ds = ds.distance
    # Umrechnen in cm und mm
    value_cm = value_ds * 100
    value_mm = int(value_ds * 1000)
    # Kehrwert für Timer-Frequenz
    value_freq = 1/value_ds
    # Datenausgabe (optional)
    print('Entfernung:', value_cm, 'cm', value_mm, 'mm', value_ds, value_freq)
    # Abstand größer 500 mm (50 cm): Summer Daueraus
    if value_mm > 500:
        timer.deinit()
        beep_off()
    # Abstand kleiner 40 mm (4 cm): Summer Daueran
    elif value_mm < 40:
        timer.deinit()
        beep_on()
    # Abstandswarnung mit variabler Timer-Frequenz
    else:
        timer.init(freq=value_freq, mode=Timer.PERIODIC, callback=beep)
    sleep(1)

Hinweis: Dieser Aufbau und Programmcode funktioniert. Allerdings nicht besonders zuverlässig. Es handelt sich also um keine besonders sichere Lösung. Insbesondere bei sehr kurzer Distanz kann es beim Distanz-Sensor zu Aussetzern kommen. Eventuell liegt die Lösung in baulichen Maßnahmen.

Darf es etwas mehr sein?

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. In dieser Lösung verwenden wir einen Ultraschallsensor vom Typ HC-SR04P für die Anwesenheitserkennung vor einem Display.

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