Entfernung messen mit Ultraschallsensor HC-SR04 – Raspberry Pi
Beim vielen (Außen-)Projekten ist eine Abstandsmessung nötig oder von Vorteil. Diese kleinen Module gibt es bereits ab 1-2€ und können die Entfernung bis zu 4,5m per Ultraschall messen und sind dabei erstaunlich genau. Der Anschluss und die Ansteuerung wird in diesem Tutorial gezeigt.
Zubehör
- HC-SR04 Modul
- Widerstände (330Ω und 10kΩ)
- Jumper Kabel
Aufbau
Auf dem Ultraschall Modul sind 4 Pins, die an das Raspberry angeschlossen werden:
- VCC an Pin 2 (VCC)
- GND an Pin 6 (GND)
- TRIG an Pin 12 (GPIO18)
- an ECHO wird der 330Ω Widerstand angeschlossen. An dessen Ende geht eine Verbindung zu Pin 18 (GPIO24) und über den 10kΩ Widerstand eine Verbindung zu Pin6 (GND).
Dies machen wir, da die GPIO Pins nur max. 3.3V vertragen. Die Verbindung zu GND ist aufgrund dessen, damit ein eindeutiges Signal an GPIO24 anliegt. Wird kein Impuls gesendet ist durch die Verbindung mit GND das Signal auf 0, bei einem Signal 1. Wäre keine Verbindung zu GND hergestellt, wäre bei fehlendem Signal der Zustand undefiniert (je nach Zufall 0 oder 1), also nicht eindeutig.
Hier noch der Aufbau als Schaubild:
Skript zur Ansteuerung
Zu erst einmal sollte die Python GPIO Library installiert sein. Ist dies nicht der Fall, kannst du am Anfang dieses Tutorials nachlesen, wie dies geht.
Um das Modul nutzen zu können erstellen wir also ein neues Skript
sudo nano ultraschallsensor_entfernung.py
mit folgendem Inhalt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
#Bibliotheken einbinden import RPi.GPIO as GPIO import time #GPIO Modus (BOARD / BCM) GPIO.setmode(GPIO.BCM) #GPIO Pins zuweisen GPIO_TRIGGER = 18 GPIO_ECHO = 24 #Richtung der GPIO-Pins festlegen (IN / OUT) GPIO.setup(GPIO_TRIGGER, GPIO.OUT) GPIO.setup(GPIO_ECHO, GPIO.IN) def distanz(): # setze Trigger auf HIGH GPIO.output(GPIO_TRIGGER, True) # setze Trigger nach 0.01ms aus LOW time.sleep(0.00001) GPIO.output(GPIO_TRIGGER, False) StartZeit = time.time() StopZeit = time.time() # speichere Startzeit while GPIO.input(GPIO_ECHO) == 0: StartZeit = time.time() # speichere Ankunftszeit while GPIO.input(GPIO_ECHO) == 1: StopZeit = time.time() # Zeit Differenz zwischen Start und Ankunft TimeElapsed = StopZeit - StartZeit # mit der Schallgeschwindigkeit (34300 cm/s) multiplizieren # und durch 2 teilen, da hin und zurueck distanz = (TimeElapsed * 34300) / 2 return distanz if __name__ == '__main__': try: while True: abstand = distanz() print ("Gemessene Entfernung = %.1f cm" % abstand) time.sleep(1) # Beim Abbruch durch STRG+C resetten except KeyboardInterrupt: print("Messung vom User gestoppt") GPIO.cleanup() |
Danach führen wir noch aus:
sudo python ultraschallsensor_entfernung.py
Damit wird nun jede Sekunde der Abstand gemessen, bis das Skript mittels STRG+C abgebrochen wird.
Das war es auch schon. Die Einsatzorte sind zahlreich, wer noch größere Abstände messen will, müsste auf ein Lasermessgerät zurückgreifen, welche allerdings um einiges teurer sind.
Guten Tag,
wie lange darf das Kabel vom Pi zum Sensor maximal sein?
mfg,
Martin
Hallo,
das kommt hauptsächlich auf das Kabel an. Bei normalen Jumper Kabel sind 20-30cm ideal, bei höherwertigen Kabeln evtl. auch mehr. Das hat mit dem Spannungsabfall zu tun, daher würde ich es individuell testen.
LG
Felix
Hallo Raspi-Jünger,
eine kleine Anmerkung zur Verkabelung:
Am Triggeranschluß kommen ca. 4,5 V an, das könnte für den Raspi-GPIO gefährlich werden. Daraufhin habe ich einen zusätzlichen 560 Ohm Widerstand von Masse auf den Triggeranschluß gelegt und jetzt funktioniert es einwandfrei.
Beste Grüße, Stefan
Guten Tag,
wie lange darf das Kabel vom Pi zum Sensor maximal sein?
mfg,
Martin