Ultraschall Sensor HC-SR04 und kompatible Ultraschall-Module

Ultraschallsensor-HC-SR04-Ultrasonic-Sensor

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) http://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 http://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

HC-SR04 Ultraschallsensoren
Total*: 5,19 EUR Versand*: n.a. s. Shop
Preis kann jetzt höher sein.
Total*: 5,19 EUR Versand*: n.a. s. Shop Preis kann jetzt höher sein.
Total*: 6,99 EUR Versand*: n.a. s. Shop
Preis kann jetzt höher sein.
Total*: 6,99 EUR Versand*: n.a. s. Shop Preis kann jetzt höher sein.
Abruf der Informationen: 11.12.2016 0:48:52. Hinweise zu Preisangaben -klick hier-

Alle hier im Preisvergleich enthaltenen Artikel werden durch Webservices bzw. Online-Schnittstellen unserer Partnerunternehmen bereitgestellt. Es ist möglich, dass angegebene Preis- bzw. Versandkosten seit der letzten Aktualisierung gestiegen sind. Maßgeblich für den Verkauf im angegebenen Shop sind nicht die hier angezeigten Preise und Versandkosten, sondern die zum Zeitpunkt des Kaufs auf der Webseite des Anbieters (Verkäufers) angegebenen Preise und Versandkosten.
* Versandkosten Die auf dieser Webseite angezeigten Versandkosten entsprechen den Informationen, welche durch einen berechtigten Vertreter (Webservices/Online-Schnittstellen) des jeweiligen Shopinhabers an uns übermittelt werden. Erhalten wir keine Informationen über die Höhe und die Bedingungen des Versandes, zeigen wir hierzu keine Informationen an. Genaue Informationen müssen in jedem Fall durch den Kunden auf dem Internetangebot des Shopinhabers/Verkäufers in Erfahrung gebracht werden.
* Amazon.de Versandkosten Amazon liefert in der Regel ab einem Bestellwert von 30,00 EUR versandkostenfrei. Bei Marketplace Artikeln und gebrauchten Artikeln kommen mindestens 3,00 Euro Versandkosten hinzu. Es können Ausnahmen existieren. Alle Angaben innerhalb dieses Preisvergleichs sind ohne Gewähr. Alle genanten Preise und Versandkosten beinhalten die gesetzliche Mehrwertsteuer (Mwst. inkl.). Marken und Produktnamen sind Warenzeichen der jeweiligen Eigentümer.
* Bei den Links handelt es sich um Affiliate-Links / Fotos stammen aus dem jeweiligen Partnerprogramm.

 

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 Ultraschallsenoren
Total*: 11,93 EUR Versand*: n.a. s. Shop
Preis kann jetzt höher sein.
Total*: 11,93 EUR Versand*: n.a. s. Shop Preis kann jetzt höher sein.
Total*: 11,99 EUR Versand*: n.a. s. Shop
Preis kann jetzt höher sein.
Total*: 11,99 EUR Versand*: n.a. s. Shop Preis kann jetzt höher sein.
Total*: 15,25 EUR Versand*: n.a. s. Shop
Preis kann jetzt höher sein.
Total*: 15,25 EUR Versand*: n.a. s. Shop Preis kann jetzt höher sein.
Abruf der Informationen: 11.12.2016 2:03:46. Hinweise zu Preisangaben -klick hier-

Alle hier im Preisvergleich enthaltenen Artikel werden durch Webservices bzw. Online-Schnittstellen unserer Partnerunternehmen bereitgestellt. Es ist möglich, dass angegebene Preis- bzw. Versandkosten seit der letzten Aktualisierung gestiegen sind. Maßgeblich für den Verkauf im angegebenen Shop sind nicht die hier angezeigten Preise und Versandkosten, sondern die zum Zeitpunkt des Kaufs auf der Webseite des Anbieters (Verkäufers) angegebenen Preise und Versandkosten.
* Versandkosten Die auf dieser Webseite angezeigten Versandkosten entsprechen den Informationen, welche durch einen berechtigten Vertreter (Webservices/Online-Schnittstellen) des jeweiligen Shopinhabers an uns übermittelt werden. Erhalten wir keine Informationen über die Höhe und die Bedingungen des Versandes, zeigen wir hierzu keine Informationen an. Genaue Informationen müssen in jedem Fall durch den Kunden auf dem Internetangebot des Shopinhabers/Verkäufers in Erfahrung gebracht werden.
* Amazon.de Versandkosten Amazon liefert in der Regel ab einem Bestellwert von 30,00 EUR versandkostenfrei. Bei Marketplace Artikeln und gebrauchten Artikeln kommen mindestens 3,00 Euro Versandkosten hinzu. Es können Ausnahmen existieren. Alle Angaben innerhalb dieses Preisvergleichs sind ohne Gewähr. Alle genanten Preise und Versandkosten beinhalten die gesetzliche Mehrwertsteuer (Mwst. inkl.). Marken und Produktnamen sind Warenzeichen der jeweiligen Eigentümer.
* Bei den Links handelt es sich um Affiliate-Links / Fotos stammen aus dem jeweiligen Partnerprogramm.

 

 

Links zum Thema

Schreibe einen Kommentar

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

Top