Ultraschall Sensor HC-SR04 und kompatible Ultraschall-Module

Ultraschallsensoren gibt es sehr viele, ein besonders preiswerter Sensor der in den letzten Jahren immer beliebter geworden ist, ist das Ultraschall Modul HC-SR04. Das Modul bzw. auch viele kompatible Module werden über zahlreiche Händler angeboten, der Preis liegt dabei meistens weit unter 10 Euro. Aus dem Grund möchte ich diesen Sensor und seine Ansteuerung etwas näher vorstellen.

Der Ultraschallsensor HC-SR04, bekannt von vielen Arduino Projekten

Vielen dürfte der Ultraschallsensor HC-SR04 bereits bekannt sein, denn er wird aufgrund seines günstigen Preises und der einfachen Ansteuerung mit nur zwei Ports bereits in zahlreichen Arduino und Raspberry Pi Projekten eingesetzt.
Er eignet sich ideal für Entfernungsmessungen zwischen ca. 2 cm und 3 m, wobei die Auflösung im Idealfall 3 mm beträgt.
Einsatzgebiete sind die Robotik, Hinderniserkennung, Entfernungsmessung oder Füllstandsmessung. Für eine Füllstandsmessung ist er allerdings nur bedingt geeignet, da er nicht wasserdicht ist. Es gibt allerdings auch wasserdichte Alternativen, die die gleiche Ansteuerung verwenden (siehe unten). Der hier im Beitrag aufgelistete Code kann also durchaus auch für andere Sensoren mit Echo- und Trigger-Pin verwendet werden.

Technische Daten des Ultraschallsensors HC-SR04

Ultraschallsensor HC-SR04
Betriebspannung5V (+/- 10%)
Strombedarfca. 2mA pro Messung
Signal LevelTTL-Pegel
max. messbare Entfernungca. 3m
min. messbare Entfernungca. 2 cm
Maximalen Messungen pro Sekunde50
Ultraschallkapselnzwei (Sender und Empfänger)
Genauigkeitca. 3mm
PinbelegungPin 1: VCC
Pin 2: Trigger
Pin 3: Echo
Pin 4: GND

Wie erfolgt der Messvorgang beim Ultraschallsensor HC-SR04?

Der Ultraschallsensor HC-SR04 benötigt zunächst eine Versorgungsspannung von 5V, dafür stehen die Anschlüsse +5V (Pin 1) und GND (Pin 4) bereit. Die eigentliche Messung wird über den Anschluss Trigger (Pin 2) gestartet. Der Messvorgang wird durch eine fallende Flanke am Trigger-Eingang ausgelöst. Das vorhergehende High-Signal muss dabei eine Mindestzeit von 10 uS anliegen.

Der Ultraschallsensor HC-SR04 sendet daraufhin nach ca. 250 µs ein 40 kHz Burst-Signal für die Dauer von 200 µs zur eigentlichen Sensorkapsel (Transducer). Danach geht der Ausgang Echo (Pin 3) sofort auf H-Pegel und der Ultraschallsensor wartet auf den Empfang des akustischen Echos. Sobald das Echo registriert wird, fällt der Ausgang auf Low-Pegel. Nach 20 ms kann die nächste Messung erfolgen.

Um die genaue Entfernung zu ermitteln, muss ein Mikrocontroller also lediglich für 10 us ein High-Signal an den Trigger-Eingang legen und danach messen wie lange das High-Signal (Wartezeit auf Echo) am Echo-Signal anliegt. Wenn das High Signal länger als 200 ms angelegt war, dann wurde kein Hindernis vom Sensor erkannt (außer Reichweite).

Berechnung der Entfernung anhand der Schallgeschwindigkeit

Auch ein für den Mensch nicht hörbarer Ultraschallton ist ein akustischer Schall. Er verhält sich demnach entsprechend den physikalischen Gesetzen. Der Schall hat eine bestimmte Geschwindigkeit, er legt in der Sekunde 330 Meter zurück. Wenn man also weiß wie lange es dauert bis der Ultraschallsensor sein eigenes Echo empfängt, dann kann man leicht ausrechnen wieviel Meter bzw. auch Zentimeter der Schall zurückgelegt hat. Diese errechnete Entfernung muss man dann allerdings noch durch 2 teilen, denn wir wollen ja nur die einmalige Wegstrecke berechnen und nicht den gesamten Hin- und Rückweg.

Genau genommen ist die Schallgeschwindigkeit nicht ganz genau 330 Meter pro Sekunde groß, denn die Ausbreitungsgeschwindigkeit ist auch abhängig von der Temperatur. Die genauere Berechnung der Ausbreitungsgeschwindigkeit würde so aussehen:

Ausbreitungsgeschwindigkeit (in Luft) =331,5 + (0,6 * Temp°)

Bei einer Raumtemperatur von 20° ergibt sich somit: 331,5+ (0,6 * 20) = 343,5 m/s
Pro gemessener Mikrosekunde wäre der Schall also 0,03434 cm unterwegs gewesen.

Um die gemessene Zeit des Echo-Signals nun in cm umzurechnen, müssten wir die gemessene Zeit zunächst durch 2 teilen um die Zeit für die einmalige Strecke zu erlangen. Danach müssten wir die Zeit (in uS) nur noch mit 0,03434 cm multiplizieren und wir hätten die genau Entfernung in cm.

Wenn es nicht auf den Millimeter ankommt dann kann man eventuell auch die Temperatur außer acht lassen und eine vereinfachte Berechnung durchführen.
Folgende Berechnung hat sich bewährt: Man teilt einfach die gemessene Zeit (in us) durch 2 und danach durch 29,1 (oder gleich durch 58,2). Und schon hat man das Ergebnis. Selbst Temperaturschwankungen von ca. 20 Grad führen nur zu Ungenauigkeiten von ca. 3,5% des Messwertes.

In vielen Fällen kann man dann auch auf die speicherintensiven Float-Berechnungen verzichten. Eine Funktion für einen Mikrocontroller (z.B. Arduino) könnte dann wie folgt aussehen:

Beispielfunktion für Mikrocontroller (Arduino)

Wenn die Gefahr besteht, dass Interrupts während der Zeitmessung auftreten, dann sollte man wie in dieser Funktion die Interrupts während der Zeitmessung abschalten.

//Pinbelegung des Sensors am Arduino
#define trigger 3 // Arduino Pin an HC-SR04 Trig
#define echo 2    // Arduino Pin an HC-SR04 Echo

// Entfernung in cm über gewöhnlichen Ultraschallsensor mit Echo und Trigger messen
int getEntfernung()
{
  long entfernung=0;
  long zeit=0;

  digitalWrite(trigger, LOW);
  delayMicroseconds(3);
  noInterrupts();
  digitalWrite(trigger, HIGH); //Trigger Impuls 10 us
  delayMicroseconds(10);
  digitalWrite(trigger, LOW);
  zeit = pulseIn(echo, HIGH); // Echo-Zeit messen
  interrupts();
  zeit = (zeit/2); // Zeit halbieren
  entfernung = zeit / 29.1; // Zeit in Zentimeter umrechnen
  return(entfernung);
}

Bei der Messung mit Ultraschallsensoren ist zu beachten, dass sich das Ultraschallsignal keulenförmig ausbreitet. Bei größeren Entfernungen (ca. über 1m) muss der Sensor möglichst genau auf das zu messende Objekt ausgerichtet werden. Andere Hindernisse die im Sendekegel (ca. 15 Grad) liegen, können das Messergebnis beeinflussen. Auch können unerwünschte Reflexionen von ungünstig geformten Messobjekten das Ergebnis verfälschen. Weiche Objekte, die den Schall gut schlucken, können sogar für den Sensor unsichtbar sein. Besonders gut lassen sich immer glatte und ebene Hindernisse messen.

Komplettes Beispielprogramm für das Pretzel-Board mit WLAN

Das nachfolgende Beispiel demonstriert wie man die Entfernung mit dem kleinen Arduino Nano kompatiblen Pretzel-Board und einem Ultraschallsensor HC-SR04 messen kann. Das Board gibt die Entfernung, in diesem Beispiel im Sekundentakt, über die serielle Schnittstelle aus. Da das Pretzel-Board aber auch über ein integriertes WLAN-Modul verfügt, ist es ein leichtes diese Daten auf einer Webseite bereitzustellen (siehe Beispiele unter Pretzel-Board).

Ultraschallsensor-HC-SR04-Ultrasonic-Sensor-Pretzelboard

Dieses Beispiel demonstriert auch gleich noch wie man Ausreißer in der Messung durch den gleitenden Durchschnitt  eliminieren kann.

/*
 PretzelBoard-Ultraschall-SN-SR04T 
 Beispiel für PretzelBoard - Arduino Board mit WLAN
 Beschreibung des Boards und Beispiels auf der Webseite:
 (c) https://www.mikrocontroller-elektronik.de/
 Aufgabe:
 Entfernung Messen und auf seriellen Schnittstelle im Sekundentakt in cm ausgeben
 */
 
#include <SoftwareSerial.h>

#define trigger 3 // Arduino Pin an HC-SR04 Trig
#define echo 2    // Arduino Pin an HC-SR04 Echo

SoftwareSerial esp8266(11, 12);

void setup()
{
  pinMode(trigger, OUTPUT);
  pinMode(echo, INPUT);
  digitalWrite(trigger, HIGH); //Signal abschalten
 
  // Open serial communications and wait for port to open:
  Serial.begin(19200);
  // set the data rate for the SoftwareSerial port
  esp8266.begin(19200);
 
  //send first AT Command to see if ESP8266-Module responds
  esp8266.println("AT");

  Serial.write("PretzelBoard Beispiel von https://www.mikrocontroller-elektronik.de\n");
}

void loop() // Arduino Hauptschleife
{
 int entfernung=getEntfernung();
 int mittelwert= getEntfernungGD();
 
 Serial.write("Entfernung:");
 Serial.print(entfernung, DEC) ;
 Serial.write(" , Mittelwert (gewichtet): ");
 Serial.print(mittelwert, DEC) ;
 Serial.write(" cm\n");
 
 delay(1000); //1 Sekunde warten
}


// Entfernung in cm über gewöhnlichen Ultraschallsensor mit Echo und Trigger messen
int getEntfernung(){ 
 
 long entfernung=0;
 long zeit=0;

 digitalWrite(trigger, LOW); 
 delayMicroseconds(3);
 noInterrupts();
 digitalWrite(trigger, HIGH); //Trigger Impuls 10 us
 delayMicroseconds(10);
 digitalWrite(trigger, LOW); 
 zeit = pulseIn(echo, HIGH); // Echo-Zeit messen
 interrupts(); 
 
 zeit = (zeit/2); // Zeit halbieren
 entfernung = zeit / 29.1; // Zeit in Zentimeter umrechnen
 return(entfernung); 
}

//Entfernung Gleitender Durchschnitt (gewichtet)
int getEntfernungGD(){ 

int alt=0;
int mittel;
int entf;
int i;

 delay(10);
 alt=getEntfernung();
 delay(10);
 for (i=0; i<10; i++)
 {
   entf=getEntfernung();
   mittel=(0.8*alt) + (0.2*entf);
   alt=mittel;
   delay(10);
 }
 return (mittel);
}

 

Bezugsquelle für Ultraschallsensor HC-SR04

Bestseller Nr. 1
ARCELI 5 STÜCKE HC-SR04 Ultraschallmodul Entfernungsmesswandler Sensor für Arduino
ARCELI 5 STÜCKE HC-SR04 Ultraschallmodul Entfernungsmesswandler Sensor für Arduino*
Prüfentfernung = Dauer des Hochpegels * Schallgeschwindigkeit (340 m / s) / 2
7,99 EUR Amazon Prime
AngebotBestseller Nr. 2
AZDelivery 3 x Ultraschall Modul Kompatibel mit HC-SR04 Entfernungsmesser Sensor kompatibel mit Arduino und Raspberry Pi inklusive E-Book!
AZDelivery 3 x Ultraschall Modul Kompatibel mit HC-SR04 Entfernungsmesser Sensor kompatibel mit Arduino und Raspberry Pi inklusive E-Book!*
✅ Ultraschall Entfernungsmessung von 2 cm bis zu 3 m auf ca. 3 mm genau; ✅ Maße (LxBxH): 45 x 20 x 19 mm (Breite inkl. Pins ca. 26 mm)
7,49 EUR −0,50 EUR 6,99 EUR Amazon Prime
Bestseller Nr. 3
Hailege 5pcs HC-SR04 Ultrasonic Distance Sensor Ultrasonic Sensor UNO MEGA Nano 51/STM32
Hailege 5pcs HC-SR04 Ultrasonic Distance Sensor Ultrasonic Sensor UNO MEGA Nano 51/STM32*
HC-SR04 Test Distance: high level time velocity of sound (340M/S) /2; Uses the MCU STC15W104 which has a built-in clock, no need of external crystal oscillator.
9,09 EUR Amazon Prime
Bestseller Nr. 4
diymore-IOT 6Stück Ultraschall-Modul Abstandssensor.
diymore-IOT 6Stück Ultraschall-Modul Abstandssensor.*
Gebrauchsspannung: DC5V.; Statischer Strom: weniger als 2mA.; Pegelausgang: hoch 5V, Pegelausgang: niedrig 0V.
8,99 EUR Amazon Prime
Bestseller Nr. 5
ELEGOO - 5 Stück HC-SR04 Ultraschall Sensor Distanzsensor für Arduino UNO, Roboter, XBee, ZigBee usw.
ELEGOO - 5 Stück HC-SR04 Ultraschall Sensor Distanzsensor für Arduino UNO, Roboter, XBee, ZigBee usw.*
Ultraschall Sensor - Ideal für die Verwendung mit dem Arduino.; Eingangstriggersignal 40KHz Ultraschallimpulses.
10,99 EUR Amazon Prime
Bestseller Nr. 6
ALMOCN ElecRight HC-SR04 Ultraschall-Sensor-Entfernungsmodul für Robot XBee ZigBee 10 Stück
ALMOCN ElecRight HC-SR04 Ultraschall-Sensor-Entfernungsmodul für Robot XBee ZigBee 10 Stück*
Ultraschall-Modul Entfernungsmesswandler Sensor; Dieses Modul hat eine stabile Leistung und einen genauen Messabstand.
15,99 EUR Amazon Prime

Letzte Aktualisierung am 28.02.2024 / Affiliate Links / Bilder von der Amazon Product Advertising API

 

Wasserdichte und spritzwassergeschützte Ultraschallsensoren

Für Anwendung im Außenbereich oder bei Füllstandsmessungen können oft wasserdichte oder spritzwassergeschützte Ultraschallsensoren von Vorteil sein. Auch hier werden im Online-Handel recht preiswerte Lösungen angeboten, nicht selten kommen diese auch China. Die nachfolgend aufgelisteten Module sind in der Ansteuerung praktisch identisch zu dem hier vorgestellten Ultraschallsensor HC-SR04, das heißt die oberen Beispielprogramme können ohne Veränderung übernommen werden. Kleine Abweichungen kann es in Reichweite und Mindestabstand geben, meist haben diese Sensoren einen Mindestabstand von ca. 20 bis 30 cm.
Beachten muss man noch, dass die Ansteuerelektronik teilweise mit unterschiedlicher Ultraschallkapsel (Ultraschall Transceiver) angeboten wird. Nicht alle Angebote im Internet sind 100% wasserdicht, manche sind nur gegen Spritzwasser geschützt, das sollte man bei der Verwendung beachten.

Ultraschallsensor-Wasserdicht-Ultrasonic-Sensor-pretzelboard-WLAN

Preiswertes Spritzswassergeschützter Ultraschallsensor am WLAN Pretzelboard

Wasserdichte Ultraschallsensoren

SODIAL(R) Wasserdichte Ultraschall Abstandsmessung Modul
SODIAL(R) Wasserdichte Ultraschall Abstandsmessung Modul*
Diese Ultraschallensor ein beruehrungsloser Distanzmessmodul; Elektronische Ziegel kompatible Schnittstelle und breadboard freundlich
Aihasd DC 5V wasserdichte Ultraschall Abstandsmessung Modul 30cm-350cm
Aihasd DC 5V wasserdichte Ultraschall Abstandsmessung Modul 30cm-350cm*
Entdeckung der Strecke: 30cm-3.5m (11,8 bis 137,8 cm); Versorgungsspannungsbereich: 5V DC; Arbeiten Strom: < 20mA
17,70 EUR

Letzte Aktualisierung am 18.03.2024 / Affiliate Links / Bilder von der Amazon Product Advertising API

 

 

Links zum Thema

5 Kommentare zu “Ultraschall Sensor HC-SR04 und kompatible Ultraschall-Module”

  1. Jann sagt:

    Sehr geehrte Damen und Herren,
    Ich muss gerade für die uni eine Seminararbeit schreiben und verwende für den Aufbau unter anderem Ihr Ultraschall Sensor HC-SR04.
    Leider entzieht sich mich wie dieses Bauteil den Ultraschall produziert.
    Er arbeitet mit Gleichstrom oder?
    Nach welchem Effekt oder Prinzip geht das von statten?

    Vielen Dank im Voraus
    Mit freundlichen Grüßen
    Jann Müller

    1. Frank sagt:

      Im Grunde besteht Sensor aus einem Lautsprecher und Mikrofon, in der Regel wird das oft in Piezo-Technik aufgebaut. Also durch Stromimpulse wird ein Kristall in Schwingungen gebracht und so ein Ton erzeugt. Die eingebaute Elektronik erzeugt aus der Gleichspannung die Impulse. Siehe auch: https://de.wikipedia.org/wiki/Lautsprecher

  2. Jan sagt:

    Vielen Dank für den Super Leitfaden.

    Sogar der Programmcode wurde veröffentlicht – Vielen Dank

  3. Fabian F. sagt:

    Hallo,
    i lass mir deinen Artikel zu diesem Ultraschallsensor durch und würde dich gern fragen, ob ich die Bilder für meine Diplomarbeit bitte weiter verwenden dürfte?

    Mit freundlichen Grüßen
    Fabian

    1. Frank sagt:

      Ja, wenn Du Quelle mit Link zu uns angibst, kein Problem.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

scroll to top