Raspberry Pi Zero 2 W mit Ultraschall-Abstandssensor HC-SR04

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.

Raspberry Pi Zero 2 W - Ultraschall-Abstandssensor
Raspberry Pi Zero 2 W – Ultraschall-Abstandssensor

Den Raspberry Pi Zero 2 W habe ich dir bereits in einigen Beiträgen vorgestellt, zbsp.:

Benötigte Ressourcen für dieses Projekt

Wenn du die nachfolgende Schaltung nachbauen möchtest, dann benötigst du:

Für das zweite Beispiel & die Schaltung dazu benötigst du noch:

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

Pinout des Raspberry Pi Zero 2 W
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-AbstandssensorRaspberry Pi Zero 2 W
GNDPin 6, GND
ECHOPin 11, GPIO17
TRIGPin 7, GPIO04
VCC5V
Anschluss des Ultraschall-Abstandssensors HC-SR04 am Raspberry Pi

Besonderheit bei diesem Aufbau ist, dass vom ECHO Pin ein 330 Ohm Widerstand über einen PullUp Widerstand von 470 Ohm zum GPIO08 verbunden wird.

Anschluss des Ultraschall-Abstandssensors HC-SR04 am Raspberry Pi Zero
Anschluss des Ultraschall-Abstandssensors HC-SR04 am Raspberry Pi Zero

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 nun, 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.

Raspberry Pi Zero 2 W mit Ultraschall-Abstandssensor HC-SR04 & LEDs
Raspberry Pi Zero 2 W mit Ultraschall-Abstandssensor HC-SR04 & LEDs

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.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht.