Mit dem Ultraschallsensor Entfernungen messen

Im folgenden Artikel möchte ich zeigen, wie mit dem Ultraschallsensor Entfernungen gemessen werden können.

Mit dem Ultraschallsensor HC-SR04 kann die Entfernung zu einem Objekt gemessen werden. Im ersten Schritt hier die Liste der verwendeten Materialen:

Für den Versuchsaufbau habe ich zudem Breadboard sowie Jumper-Kabel eingesetzt. Ich denke diese sind aber mittlerweile bei jedem Leser vorhanden?

Bevor wir mit dem Aufbau der Schaltung beginnen können, schauen wir uns das Ultraschallsensor-Modul genauer an. Das Modul verfügt über folgende Anschlüsse:

  • VCC (Plus-Anschluss 5V)
    Hier wird der Plus-Pol des Boards angeschlossen. Wichtig hier, die Spannung muss 5V betragen, ich nehme also den VIN-Port vom NodeMCU-Board, da dieser, wenn das Board über USB betrieben wird, 5V  ausgibt.
  • Trig (Trigger-Pin)
    Der Trigger Pin bekommt vom Board einen kurzen 5V Impuls, der die Schallwelle generiert und somit die Messung startet.
  • Echo (Echo-Pin)
    Der Echo-Pin gibt die gemessene Zeit der Schallwelle wieder an das Board zurück.
  • GND (Minus-Anschluss)

Im nächsten Schritt beginnen wir mit dem Aufbau der Schaltung.

Nach dem wir nun die Schaltung aufgebaut haben, können wir mit der Programmierung beginnen. Im folgenden Sketch definieren wir im ersten Schritt die Konstanten für die einzelnen Pins sowie die Variablen für die Dauer und Entfernung der Messung. In der Setup-Methode starten wir die serielle Schnittstelle mit einer Baudrate von 9600 und definieren die beiden pinModes für den Trigger- und Echo-Pin. Der Trigger wird wie oben bereits beschrieben als OUTPUT-Pin definiert, da hiermit die Schallwelle gesendet wird. Über den Echo-Pin wird das Echo gelesen und somit die Zeit gemessen. In der Loop-Methode starten wir nun die Schallwelle und lesen das Echo via pulseIn wieder ein.

const int pinTrigger=D7;
const int pinEcho=D6; 

long dauer=0;
long entfernungCM=0; 

void setup()
{
  Serial.begin (9600);
  pinMode(pinTrigger, OUTPUT);
  pinMode(pinEcho, INPUT);
}

void loop()
{
  digitalWrite(pinTrigger, LOW);
  delay(5);
  digitalWrite(pinTrigger, HIGH);
  delay(10);
  digitalWrite(pinTrigger, LOW);

  dauer = pulseIn(pinEcho, HIGH);
  entfernungCM = (dauer/2) * 0.03432;
  if (entfernungCM >= 500 || entfernungCM <= 0)
  {
    Serial.println("Kein Messwert");
  }
  else
  {
    Serial.print(entfernungCM);
    Serial.println(" cm");
  }
  delay(1000);
}

Im seriellen Monitor sehen wir jetzt die Entfernung des Ultraschall-Sensors bis zum Objekt gemessen in cm.

Ich hoffe Dir gefällt dieser Artikel. Über Kommentare unterhalb des Artikels oder per E-Mail freue ich mich wie immer 🙂

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

9 Gedanken zu „Mit dem Ultraschallsensor Entfernungen messen

  • 20. August 2018 um 15:32
    Permalink

    Hi,

    ich bekomm immer kein Messwert…was mach ich falsch?

    Antwort
    • 20. August 2018 um 19:05
      Permalink

      Hallo, hast Du denn auf dem Ultraschallsensor 5V? Das ist eins der häufigsten Probleme, wie ich festgestellt habe.

      Antwort
  • 14. Juni 2019 um 10:28
    Permalink

    Hallo, vielen Dank für diese Anleitung ! Ich bin kein Elektroniker und hätte befürchtet den NodeMCU zu zerstören wenn ich auf den Echo Pin 5V zurückgebe ? Muss da kein Widerstand dazwischen ?

    Antwort
    • 15. Juni 2019 um 6:52
      Permalink

      Moin,

      nein, wir nutzen den ECHO-Pin ja im Input-Mode. In der Setup-Methode wird dazu der Pin-Mode auf Input gesetzt und in der Loop-Methode mit pulseIn() gelesen.

      Viele Grüße,
      Matthias

      Antwort
  • 16. Dezember 2019 um 12:18
    Permalink

    Hallo Mathias,
    habe gerade die Zisternenfüllstandsmessung nachgestellt und sie funktioniert auf Anhieb – fast!!.
    Da fehlen irgendwie die kleinen jpeg-Files mit dem Batteriefüllstand. Nun kann ich mir eigene Füllstandsbildchen zusammenschustern. Mir fehlt aber der Ort, wo die Bildchen liegen müssen.
    In Deinem Programm schreibst Du so schön: “ client.print(„http://xxx/bat_0.jpg“); „.
    Und genau hier liegt der Hase im Pfeffer. Das „xxx“ kann ich nicht deuten. Das muss ja irgendwie auf dem Arduino liegen – oder? Denn das ist ja der Web-Server.
    Gib doch einmal einem html-Laien einen guten Hinweis.

    Vielen Dank
    Thomas

    Antwort
    • 16. Dezember 2019 um 12:37
      Permalink

      Hallo Thomas,

      sorry, ich glaube Du hast den falschen Artikel kommentiert. Du meinst doch den Artikel hier, oder?

      https://arduino-projekte.info/zisterne-fuellstandsanzeige/

      Ich würde die Dateien übrigends nicht auf den Arduino legen, sondern lieber mit Material Icons arbeiten 😉

      Grüße,
      Matthias

      Antwort
  • 16. Dezember 2019 um 13:01
    Permalink

    Hallo nochmal,
    das kommt davon, wenn man unendlich im Internet sucht. Das Problem mit den Bildchen kam in einem anderen Beispiel vor (https://arduino-projekte.info/zisterne-fuellstandsanzeige/). Dann habe ich wohl die Webseiten-Tabs verwechselt und hier meine Frage reingestellt. Tut mir leid. Aber ich bringe ja den Kommentar nicht wieder weg.

    Viele Grüße
    Thomas

    Antwort
    • 16. Dezember 2019 um 14:26
      Permalink

      Hallo Thomas, ist doch kein Problem.

      Hier mal ein Link zu Material Icons:
      https://material.io/resources/icons/?style=baseline

      Die Icons werden einfach per JavaScript Referenz eingefügt. Alles was Du brauchst ist dann eine Internet-Verbindung, sodass die Icons geladen werden können.
      So kannst Du auf eigene Icons verzichten und musst nix auf den Arduino übertragen. Du musst halt nur schauen, ob es passende Icons gibt. Da habe ich jetzt auf die Schnelle nichts gefunden.

      Viele Grüße,
      Matthias

      Antwort
  • 16. Dezember 2019 um 13:03
    Permalink

    Jetzt überlappen wir uns eifrig. Aber : was sind „Matertial Icons“. Und wo kann ich die hinlegen?

    Grüße

    Antwort

Schreibe einen Kommentar

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