Raspberry Pi Sensoren

Raspberry Pi: Ultraschallsensor HC-SR04 ansteuern (Entfernung messen)

Raspberry Pi Ultraschallsensor
Geschrieben von Tony

Das Messen von Entfernungen und Abständen ist bei Projekten rund um ein Raspberry Pi Car, einem Roboter oder gar einem Tür-System sinnvoll und von Vorteil. Mit Hilfe des Ultraschallsensors HC-SR04 und dem Raspberry Pi können Abstände mit wenig Aufwand gemessen. Wie man mit dem Raspberry Pi Entfernungen messen kann, unter Verwendung des Ultraschallsensors HC-SR04 wird im Folgenden erläutert. Neben dem Schaltungsaufbau ist nachzulesen, wie man mit Python den Ultraschallsensor HC-SR04 ansteuern kann.

Raspberry Pi: Ultraschallsensor HC-SR04

Funktionsweise

Der Ultraschallsensor HC-SR05 dient zum bestimmen von Abständen und Distanzen. Der Sensor verfügt über einen Sender und einen Empfänger. Dabei sendet der Sender ein Ultraschalsignal aus, dass sich durch den Raum beweget. Trifft dieses auf ein Hindernis, wird das Signal reflektiert und vom Empfänger wieder aufgenommen bzw. detektiert. Die Distanz zu dem Objekt an dem das Signal reflektiert wurde bestimmt sich anschließend aus der Zeitdifferenz zwischen Senden und Empfangen des Signals.

Ultraschallsensor Funktionsweise

Ultraschallsensor Funktionsweise

HC-SR04 Schaltungsaufbau

Der Ultraschallsensor HC-SR04 besteht aus einer Platine mit den Abmessungen von etwa 2 cm x 4,5 cm. Neben den elektronischen Bauteilen finden sich dort zwei Ultraschalleinheiten wieder – in der Funktionsweise beschrieben als Sender und Empfänger. Preislich ist der Sensor schon für kanpp 2 Euro zu haben. Weiterhin benötigen wir zwei Widerstände, sowie (optional, je nach Aufbauweise) Jumper Kabel und ein Breadboard

Ultraschallsensor HC-SR04 auf Amazon ansehen
Ultraschallsensor HC-SR04 auf Amazon ansehen (3 Stück)
2 Widerstände (330 Ohm, 470 Ohm)
Jumperkabel
Breadboard

Ultraschallsensor HC-SR04

Ultraschallsensor HC-SR04

  • Pin VCC (5 Volt)
  • Pin Trig
  • Pin Echo
  • Pin GND

Der Ultraschallsensor HC-SR04 verfügt über 4 Pins zu Ansteuerung und wird mit einer Spannung von 5 Volt versorgt. Dabei können direkt die 5 Volt des Raspberry Pi genutzt werden – Pin VCC des Sensors wird mit Pin 2 des Raspberry Pi (+5 Volt) und Pin GND des HC-SR04 mit Pin 6 (GND) des Raspberry Pi verbunden. Der Pin Trig (Trigger) dient zum Auslösen um ein Ultraschallsignal für die Entfernungsmessung auszusenden. Pin Trig verbinden wir mit GPIO Pin 23 (Pin 16). Alternativ kann auch ein anderer GPIO Pin der Wahl genutzt werden, wichtig ist dabei nur, dass dies dann in der Software zur Ansteuerung entsprechend auf den neuen GPIO Pin abgeändert wird. Weiterhin ist zu beachten, dass hier die Nummer der GPIO Pins verwendet wird und nicht die hardwaremäßige Durchnummerierung.

Über Pin Echo erhalten wir am Raspberry Pi einen High-Pegel zurück, sobald das ausgesandte und reflektierte Ultraschallsignal wieder empfangen wurde. An dieser Stelle ist ganz wichtig, dass ein Spannungsteiler verwendet wird. Der High-Pegel des HC-SR04 arbeitet mit einer Spannung von 5 Volt – der Raspberry Pi verträgt aber nur 3,3 Volt an den GPIO-Pins. Über einen Spannungsteiler mit 330 Ohm und 470 Ohm Widerständen kann der Pegel mit dem Pi kompatibel gemacht werden. Zeitgleich zieht der 470 Ohm Widerstand den Pin auf Masse wenn keine Spannung anliegt, sodass keine undefinierten Zustände auftreten (Pull-Down). Pin Echo des Ultraschallsensors HC-SR04 wird hier im Tutorial über den Spannungsteiler an GPIO Pin 24 (Pin 18) angeschlossen.

HC-SR04Raspberry Pi
Pin 1: VCCPin 2 (5 Volt)
Pin 2: TrigPin 16 (GPIO 23)
Pin 3: EchoÜber Spannungsteiler an Pin 18 (GPIO 24)
Pin 4: GNDPin 6 (GND)

Der gesamte Schaltungsaufbau zur Ansteuerung des Ultraschallsensors HC-SR04 kann im folgenden Bild betrachtet werden.

HC-SR04 Schaltungsaufbau

HC-SR04 Schaltungsaufbau

Abstandssensor: Entfernung messen mit Python

Zur Ansteuerung des Ultraschallsensors HC-SR04 und zum Entfernungen messen nutzen wir die Programmiersprache Python. Die Umsetzung des Vorhabens mit dem Sensor in anderen Programmiersprachen ist natürlich ebenfalls möglich. Auf Basis der bisherigen Erläuterungen zur Funktionsweise des Sensors lässt sich der Quellcode recht einfach ableiten: Zur Bestimmtung der Entfernung geben wir auf den Trigger Pin einen kurzen High-Pegel. Dadurch wird der Sensor „aktiv“ und sendet ein Ultraschallsignal aus. Gleichzeitig merkt man sich den Zeitpunkt, wann man den Pin auf High setzt.

Detektiert der Empfänger das ausgesendete und reflektierte Unltraschallsignal wird der Sensor seinen Echo-Pin auf High setzen. Diesen Pegelwechsel warten wir im Quellcode ab und merken uns den Zeitpunkt des Eintreffens. Dadurch können wir die Zeitdauer ermitteln, die das Ultraschallsignal unterwegs war. Unter Kenntnis der Schallgeschwindigkeit und der Weg-Zeit-Beziehung lässt sich somit die Distanz zum Objekt errechnen.

Um den Quellcode zu testen legen wir zunächst eine neue Datei.

nano hc-sr04.py

In die Datei fügen wir folgenden Code ein. Dieser wird zyklisch die Entfernung messen, solange man den Code nicht abbricht (Strg+C).

Über den Autor

Tony

Ich bin Tony, begeistert von Einplatinencomputer und berichte über meine Erfahrungen und Projekte mit dem Raspberry Pi, Banana Pi und anderen Minicomputern.

Hinterlasse eine Antwort

Kommentare

  • Hallo Tony,
    ich habe auf Github dein rpi-hc-sr04 Projekt gesehen,
    deshalb wollte ich dich fragen ob man in dem Quellcode noch den Variablen ECHO und TRIGGER
    die GPIO-Pin Nummern zuweisen muss.
    Danke schon mal!!!

    • Hallo 🙂

      Nein und Ja! Du benötigst grundlegend die Dateien rpi-hc-sr04.c und rpi-hc-sr04.h. Wenn du die Header Datei in dein Projekt includest kannst du die Funktion distance() nutzen. Dieser Funktion übergibst du einfach deine Pinnummern, beispielsweise distance(4,5) für WiringPi Pin 4 für TRIG und WiringPi Pin 5 für ECHO. Beachte hierbei die unterschiedlichen Pinbezeichnung zwichen WiringPi und GPIO. In der Beispieldatei rpi-hc-sr04-tool.c mach ich das dann so. Nimm also die 3 Dateien und ruf die rpi-hc-sr04-tool.c nach dem kompilieren aus 🙂

  • Hallo Tony,
    ich versuche mein Glück mit deinem Python Script mit meinem Raspi 3 B. Die Messwerte scheinen aber eher aus dem Zufallsgenerator zu kommen. Sensor liegt ohne Bewegung da!
    Distanz = 129.1 cm
    Distanz = 0.7 cm
    Distanz = 125.7 cm
    Distanz = 1.3 cm
    Distanz = 128.2 cm
    Distanz = 130.4 cm
    Distanz = 129.5 cm
    Distanz = 129.5 cm
    Distanz = 129.3 cm
    Distanz = 125.9 cm
    Distanz = 1.4 cm
    Distanz = 127.4 cm
    Distanz = 3.3 cm
    Distanz = 129.6 cm
    Distanz = 2.8 cm
    Distanz = 128.9 cm
    Distanz = 4.8 cm
    Distanz = 126.9 cm
    Distanz = 6.3 cm
    Distanz = 128.8 cm
    Distanz = 5.9 cm
    Distanz = 126.6 cm
    Distanz = 0.4 cm
    Distanz = 130.0 cm
    Distanz = 5.8 cm
    Was muss ich beim elektronischen Aufbau beachten? Abgeschirmtes Kabel zum Sensor nötig? Kabellänge 1m, o.k?
    Freu mich auf eine Antwort 🙂
    Gruß, Robert

    • Hallo Robert,

      verwendest du den gleichen Code wie ich? Theoretisch hat der Sensor einen Messbereich von 2 bis 400 cm, meine ich. Eine Kabellänge von 1 Meter habe ich noch nicht probiert. Bei mir lag die Länge bei um die 20 cm bisher. Versuch zunächst mal kürzere Kabelstrecken zu nutzen (testweise) und achte darauf das die Kabel richtig und stabil angeschlossen sind um Wackler zu vermeiden.