Arduino Tutorial: Der Ultraschallsensor

 

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

 

}

 

 

Den Sketch kannst du auch hier herunterladen.

 

 

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

Kommentare: 21
  • #1

    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?

  • #2

    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

  • #3

    Juanfri (Mittwoch, 07 November 2018 12:00)

    Würde dieses Code ausreichen um eine Brille mit Ultraschallsensor zu programmieren.

    Danke
    Juanfri

  • #4

    Uranus (Montag, 18 Februar 2019 10:38)

    Diese Hilfe war sehr hilfreich DANKE!

  • #5

    DEEZ NUTS (Montag, 18 Februar 2019 10:40)

    DANKENSCHÖSCH för HILVE

  • #6

    NICE (Dienstag, 25 Juni 2019 10:12)

    Die Funktion "PulseIn" gibt die Zeit in MIKROsekunden aus und nicht in Millisekunden. Daher muss doch die Umrechnung der Entfernung in cm so erfolgen: entfernung = (dauer/2) / 0.0291.

  • #7

    Andreas (Montag, 27 Januar 2020 20:40)

    Ausgezeichnet, nun funktioniert der Ultraschallsensor, übrigens funktioniert es sogar an den analog Pins, so dass man die Digitalen für Steuerungen frei hat, SUPER einfach und verständlich, war schon am verzweifeln.

  • #8

    Moritz (Dienstag, 28 Januar 2020 10:06)

    Wie könnte ich mit einer If Schleife die in Seial.println("cm");
    abgespeicherten Entfernung auslesen sodass ich abhängig von der gemessenen Entfernung einen Motor ansteuern könnte z.B. wenn der Ultraschall Sensor eine Entfernung von 10cm misst ein Motor anläuft?

  • #9

    Johnboy Lour (Mittwoch, 29 Januar 2020 19:21)

    entfernung ist das Schlüsselwort.

    z.B.

    im SetUp

    pinMode(3, OUTPUT);
    digitalWrite(3, LOW);

    im Loop
    if (entfernung < 50) //Entfernung in cm, um Ausgang zu Aktivieren
    {
    digitalWrite(2, HIGH);
    }
    else
    digitalWrite(2, LOW);

    MfG Johnboy

  • #10

    Johnboy Lour (Mittwoch, 29 Januar 2020 19:23)

    Eintrag 13

    Tschuldigung, nicht augepasst.

    Pin beachten!! Muss natürlich gleich sein. ;-)

  • #11

    Felix G (Mittwoch, 19 Februar 2020 16:23)

    Klarer als hier habe ich es bisher nirgends gelesen, danke.
    Ich bin noch in der Recherchephase, ich habe bisher keine praktische Erfahrung, daher 2 Fragen, wenn erlaubt: ich möchte eine mobile Übertragung der Entfernungsmessungen, konkret ob eine Schranke auf oder geschlossen ist. Auf Basis der Daten möchte ich auf einem Server Prognosen erstellen und darauf basierend Wahrscheinlichkeiten ausgeben, wann die Schranke offen ist.
    Ich brauche ein GPS/GRPS Schild, um die Daten auf meinen Server zu spielen? Eine Regler, um die externe Spannung zu drosseln? ... denn das GPS/GRPS Shield braucht eine höhere Spannung.
    Und ich brauche eine Powerbank mit 20K mAh, 5V... damit ich länger beobachten kann?

  • #12

    Jule (Dienstag, 30 Juni 2020 21:29)

    Wo sehe ich denn dann den Weg der Entfernung? Auf dem Computer?

  • #13

    Emmi (Dienstag, 30 Juni 2020 21:30)

    Ja also wo sehe ich den Abstand vom Hindernis der gemessen wurde?

  • #14

    servus (Mittwoch, 22 Juli 2020 12:24)

    i hab de gleich fragö

  • #15

    Dieter (Dienstag, 08 September 2020 15:31)

    "Ja also wo sehe ich den Abstand vom Hindernis der gemessen wurde? "
    In der Arduino Software den Serialmonitor einschalten. Oben rechts die Lupe
    MFG

  • #16

    Randale Ralf (Donnerstag, 10 September 2020 15:30)

    nice cook bro danke call ich ich kommen und gib dir einen Handy(Hand job)

  • #17

    Randale Dörk (Donnerstag, 10 September 2020 15:52)

    thank you for the feedback

  • #18

    Randale Ralf (Donnerstag, 10 September 2020 15:56)

    Wie löscht man Kommentare?

  • #19

    Tamara (Donnerstag, 01 Oktober 2020 11:52)

    Woher hast du genau , dass die Ultraschallwelle benötigt 29,1 Millisekunden um sich einen Zentimeter fortzubewegen??
    Danke

  • #20

    Seppel (Montag, 19 Oktober 2020 09:11)

    Liebe Tamara, das ergibt sich aus der Physik (hast du in der Schule nicht aufgepasst?). Es ist die Schallgeschwindigkeit in der Luft. Wenn man ganz genau rechnen möchte, müsste man noch die Temperatur, die Luftdichte und Luftfeuchtigkeit mit einbeziehen.
    Servus

  • #21

    Gast (Montag, 09 November 2020 12:46)

    Liebe Tamara,
    das ist natürlich eine berechtigte Frage. Wie Seppel dir sicher erklären kann, kannst du mit den 29,1 cm/ms rechnen, wenn eine Temperatur von -62,5°C herrscht. Ansonsten solltest du mit 34 cm/ms bei 20°C sicher besser bedient sein... Um deine Frage konkret zu beantworten, die Zahlen kommen aus der Formel der Schallgeschwindigkeit (siehe bspw. Wikipedia): wurzel(kappa*R*T/M)