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 🙂
Hi,
ich bekomm immer kein Messwert…was mach ich falsch?
Hallo, hast Du denn auf dem Ultraschallsensor 5V? Das ist eins der häufigsten Probleme, wie ich festgestellt habe.
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 ?
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
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
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
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
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
Jetzt überlappen wir uns eifrig. Aber : was sind „Matertial Icons“. Und wo kann ich die hinlegen?
Grüße