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 | |
---|---|
Betriebspannung | 5V (+/- 10%) |
Strombedarf | ca. 2mA pro Messung |
Signal Level | TTL-Pegel |
max. messbare Entfernung | ca. 3m |
min. messbare Entfernung | ca. 2 cm |
Maximalen Messungen pro Sekunde | 50 |
Ultraschallkapseln | zwei (Sender und Empfänger) |
Genauigkeit | ca. 3mm |
Pinbelegung | Pin 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).
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
Letzte Aktualisierung am 2024-10-26 / * Affiliate Links
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.
Wasserdichte Ultraschallsensoren
Letzte Aktualisierung am 2024-11-06 / * Affiliate Links
Links zum Thema
- Ultraschallsensor SRF02
- Ultraschallsensor SRF05
- WLAN-Board Pretzel-Board (kompatibel zu Arduino Nano)
- Englisches Manual zum HC-SR04
- Forum für Sensor-Diskussionen
- Video zum Thema Ultraschallsensor
- Interface für Ultraschallsender/Empfänger
- Ebay Angebote zum HC-SR04*
- Buchempfehlung: Sensoren
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
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
Vielen Dank für den Super Leitfaden.
Sogar der Programmcode wurde veröffentlicht – Vielen Dank
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
Ja, wenn Du Quelle mit Link zu uns angibst, kein Problem.