In diesem Beitrag möchte ich dir zeigen, wie man den Ultraschall-Abstandssensor vom Typ HC-SR04 am Raspberry Pi Zero 2 W in Python programmiert.
Den Raspberry Pi Zero 2 W habe ich dir bereits in einigen Beiträgen vorgestellt, zbsp.:
- Raspberry Pi Zero 2 W – IR Fernbedienung programmieren
- Raspberry Pi Zero 2 W – 8×8 LED Dot Matrix
- Raspberry Pi Zero 2 W – 4fach 7 Segmentanzeige ansteuern
- Raspberrry Pi Zero 2 W – Foto per Tastendruck aufnehmen
Benötigte Ressourcen für dieses Projekt
Wenn du die nachfolgende Schaltung nachbauen möchtest, dann benötigst du:
- einen Raspberry Pi Zero 2 W*,
- ein Micro-USB-Kabel*,
- einen Ultraschall-Abstandssensor Typ HC-SR04*,
- vier Breadboardkabel, männlich-weiblich* und ein 400 Pin Breadboard*,
- ein 330 Ohm Widerstand*,
- ein 470 Ohm Widerstand*
Für das zweite Beispiel & die Schaltung dazu benötigst du noch:
- drei 5 mm, LEDs* (rot, gelb, grün),
- drei 220 Ohm Widerstände*, sowie
- vier Breadboardkabel, männlich-weiblich*
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
Aufbau der Schaltung – Ultraschall-Abstandssensor am Raspberry Pi
Der Aufbau klappt auch am “normalen” Raspberry Pi, da bei dem Pi Zero 2 W die Pinleiste gleich aufgebaut ist.
Pinout des Raspberry Pi Zero 2 W
Anschluss des Ultraschall-Abstandssensors
Der Ultraschall-Abstandssensor vom Typ HC-SR04 verfügt über 4 Pins, welche wie folgt mit dem Pi Zero 2 W verbunden werden:
Ultraschall-Abstandssensor | Raspberry Pi Zero 2 W |
---|---|
GND | Pin 6, GND |
ECHO | Pin 11, GPIO17 |
TRIG | Pin 7, GPIO04 |
VCC | 5V |
Besonderheit bei diesem Aufbau ist, dass vom ECHO Pin ein 330 Ohm Widerstand über einen PullUp Widerstand von 470 Ohm zum GPIO08 verbunden wird.
Programmieren des Sensors am Raspberry Pi Zero
Hier nun ein Programm zum Auslesen eines aktuellen Sensorwertes vom Ultraschall-Abstandssensor. Diesen Code habe ich vom englischen Blog https://developer-blog.net/ultraschall-sensor-software/ und ein wenig für diese Bedürfnisse umgeschrieben.
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BOARD) PIN_TRIGGER = 7 PIN_ECHO = 11 GPIO.setup(PIN_TRIGGER, GPIO.OUT) GPIO.setup(PIN_ECHO, GPIO.IN) try: while True: GPIO.output(PIN_TRIGGER, GPIO.LOW) time.sleep(0.5) GPIO.output(PIN_TRIGGER, GPIO.HIGH) time.sleep(0.00001) GPIO.output(PIN_TRIGGER, GPIO.LOW) while GPIO.input(PIN_ECHO)==0: pulse_start_time = time.time() while GPIO.input(PIN_ECHO)==1: pulse_end_time = time.time() pulse_duration = pulse_end_time - pulse_start_time distance = round(pulse_duration * 17150, 2) print("Distanz: %.1f" % distance,"cm") finally: GPIO.cleanup()
In dem Video erkennt man, dass der Abstand in Zentimeter im Terminal ausgegeben wird. Im Quellcode wird die Ausgabe auf eine Nachkommastelle reduziert, denn der Sensor ist nicht so genau.
LED
Im nächsten Schritt zeige ich dir jetzt, wie du die Sensorwerte auf 3 LEDs mappen kannst und so eine Anzeige ohne vorhandenen Terminal aufbauen kannst.
Aufbau
Die drei LEDs habe ich an folgenden Pins angeschlossen:
- rot – Pin 8, GPIO14
- gelb – Pin 10, GPIO15
- grün – Pin 12, GPIO18
Die Pins mit der Bezeichnung “Kathode” (langes Beinchen) der LEDs wurde mit GND verbunden.
Programmieren des Sensors & LEDs
Das bereits bekannte Skript ergänzen wir um die LEDs. Zunächst müssen die Pins der LEDs als Ausgang definiert werden und im Anschluss die Distanz auf diese drei gemappt werden.
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BOARD) PIN_TRIGGER = 7 PIN_ECHO = 11 PIN_LED_ROT = 8 PIN_LED_GELB = 10 PIN_LED_GRUEN = 12 GPIO.setup(PIN_TRIGGER, GPIO.OUT) GPIO.setup(PIN_ECHO, GPIO.IN) GPIO.setup(PIN_LED_ROT, GPIO.OUT) GPIO.setup(PIN_LED_GELB, GPIO.OUT) GPIO.setup(PIN_LED_GRUEN, GPIO.OUT) try: while True: GPIO.output(PIN_LED_ROT, GPIO.LOW) GPIO.output(PIN_LED_GELB, GPIO.LOW) GPIO.output(PIN_LED_GRUEN, GPIO.LOW) GPIO.output(PIN_TRIGGER, GPIO.LOW) time.sleep(0.5) GPIO.output(PIN_TRIGGER, GPIO.HIGH) time.sleep(0.00001) GPIO.output(PIN_TRIGGER, GPIO.LOW) while GPIO.input(PIN_ECHO)==0: pulse_start_time = time.time() while GPIO.input(PIN_ECHO)==1: pulse_end_time = time.time() pulse_duration = pulse_end_time - pulse_start_time distance = round(pulse_duration * 17150, 2) print("Distanz: %.1f" % distance,"cm") if(distance > 0 and distance < 10): GPIO.output(PIN_LED_ROT, GPIO.HIGH) elif(distance >=10 and distance < 15): GPIO.output(PIN_LED_GELB, GPIO.HIGH) elif(distance >=15): GPIO.output(PIN_LED_GRUEN, GPIO.HIGH) time.sleep(1) finally: GPIO.cleanup()
Im Video erkennst du, dass die drei LEDs Ihren Status wechseln je nachdem wie weit oder nah ich am Sensor mit der Hand bin.
1 thought on “Raspberry Pi Zero 2 W mit Ultraschall-Abstandssensor HC-SR04”