
Dieses Tutorial handelt von dem Ultraschallsensor HC-SR04. Mit diesen Sensor ist es möglich die Entfernung von Objekten zu messen. Dabei sendet der Sensor, wie der Name schon sagt, eine Ultraschallwelle und berechnet die Zeit bis die Ultraschallwelle zurückkommt. Mit der Zeitdauer kannst du auf die Entfernung zurück schließen.
Der HC-SR04 hat 4 Pins VCC, GND für die Spannungsversorgung und Trig und Echo für das Senden und Empfangen von Ultraschallwellen.

Wenn Der Trig(Trigger) Pin ein HIGH- Signal bekommt wird der Sensor eine Ultraschallwelle senden bis der Trigger Pin wieder auf LOW gesetzt wird.
Die Ultraschallwelle bewegt sich nun solange vom Sensor weg, bis die Welle auf ein Hindernis trifft. Danach wird die Welle am Hindernis reflektiert und die Welle wandert zurück zum Sensor.


Sobald die Welle wieder den Sensor erreicht. Sendet der Sensor ein HIGH am Echo Pin. Die Aufgabe ist nun die Zeit zwischen dem Senden und dem Empfangen der Ultraschallwelle zu messen.
Was benötigst du?
- 1 x Arduino Uno
- 1 x USB Kabel
- 1 x Steckbrett
- 1 x Ultraschallsensor(HC-SR04)
- Jump Wire (Männlich)
Wie sieht der Schaltplan aus?

Der Code
int trigger=9; // Der Trigger Pin
int echo=8; // Der Echo Pin
long dauer=0; // Hier wird die Zeitdauer abgespeichert
// die die Ultraschallwelle braucht
// um zum Sensor zurückzukommen
long entfernung=0; // Hier wird die Entfernung vom
// Hindernis abgespeichert
void setup()
{
Serial.begin(9600); // Die serielle Kommunikation starten
pinMode(trigger, OUTPUT); // Trigger Pin als Ausgang definieren
pinMode(echo, INPUT); // Echo Pin als Eingang defnieren
}
void loop()
{
digitalWrite(trigger, LOW); // Den Trigger auf LOW setzen um
// ein rauschfreies Signal
// senden zu können
delay(5); // 5 Millisekunden warten
digitalWrite(trigger, HIGH); // Den Trigger auf HIGH setzen um eine
// Ultraschallwelle zu senden
delay(10); // 10 Millisekunden warten
digitalWrite(trigger, LOW); // Trigger auf LOW setzen um das
// Senden abzuschließen
dauer = pulseIn(echo, HIGH); // Die Zeit messen bis die
// Ultraschallwelle zurückkommt
entfernung = (dauer/2) / 29.1; // Die Zeit in den Weg in Zentimeter umrechnen
Serial.print(entfernung); // Den Weg in Zentimeter ausgeben
Serial.println(" cm"); //
delay(1000); // Nach einer Sekunde wiederholen
}
Code- Review
dauer = pulseIn(echo, HIGH); // Die Zeit messen bis die
// Ultraschallwelle zurückkommt
Mit der pulseIn- Methode wird die Zeit gemessen, bis der Echo Pin ein HIGH Signal erhält.
entfernung = (dauer/2) / 29.1; // Die Zeit in den Weg in Zentimeter umrechnen
In der dauer- Variable ist die Zeit abgespeichert, die die Ultraschallwelle benötigt um einmal zum Hindernis hin und wieder zurück zum Sensor zu gelangen Daher muss die Zeitdauer durch 2 geteilt werden um nur die Zeit zum Hindernis zu erhalten. Eine Ultraschallwelle benötigt 29,1 Millisekunden um sich einen Zentimeter fortzubewegen, deswegen wird hier die Zeit nochmal durch die Zahl 29,1 geteilt um den Weg zwischen Sensor und Hindernis zu erhalten.
Ich schätze das der Rest nun verständlich für dich ist.
Wenn du hier irgendetwas vermisst, bessere Ansätze hast oder dir etwas nicht klar ist, zögere nicht einen Kommentar zu hinterlassen.
Kommentar schreiben
Dieter (Montag, 09 Januar 2017 05:11)
Hallo,
erstmal Danke für die sehr guten Anleitungen. Die sind echt sehr hilfreich.
Meine Frage wie steuere ich 2.bzw.mehrere Ultraschallsensoren an?
Thomas (Freitag, 20 Januar 2017 09:46)
Hallo Dieter,
du kannst mehrere Ultraschall- Sensoren an den I/O Ports am Arduino anschließen. Nach meinen Wissensstand kannst du die Ultraschallsensoren dann nacheinander abfragen, sprich den oben dargestellten Code für jeden Ultraschallsensor einmal anpassen. Man kann sich aber schon denken, dass wenn man zu viele Ultraschallsensoren hat ein Abfragezyklus ziemlich lange dauern kann.
Gruß,
Thomas