HC-SR04 und JSN-SR04T - Entfernungen messen mit Ultraschallsensoren am ESP8266

von cooper.bin
veröffentlicht am 09.03.2024 aktualisiert am 03.04.2024

Ultraschallsensoren sind praktisch – sei es für Bau eines automatisierten Bewässerungssystems, für die Entwicklung eines Roboters der Hindernissen ausweichen kann, oder bei der Umsetzung intelligenter Überwachungssysteme für Tanks und mehr. Ultraschallsensoren sind ideal für alle Projekte, die genaue Entfernungsmessungen innerhalb festgelegter Bereiche erfordern. Eine der zugänglichsten und vielseitigsten Möglichkeiten eine Entfernung zu messen, ist die Nutzung von Ultraschallsensoren in Verbindung mit dem ESP8266 D1 Mini.

Während viele von euch sicher schon vom HC-SR04 gehört haben, einem Sensor, der in zahlreichen Projekten verwendet wird, gibt es noch eine weitere elegante Alternative: den JSN-SR04T. Dieser Sensor zeichnet sich nicht nur durch seine kompakte Bauweise aus, bei der Sender und Empfänger in einem einzigen Bauteil vereint sind, sondern bietet auch dank eines angebundenen Kabels die Flexibilität, die Elektronik und den Sensor selbst dezentral zu montieren – eine ideale Lösung für Projekte, bei denen Sicherheit, insbesondere im Umgang mit Flüssigkeiten, gefordert sind.

hc-sr04-jsn-sr04t-vergleich ><

Für dieses Tutorial ist es nicht wichtig, ob ihr den HC-SR04 oder den JSN-SR04T verwendet. Beide Sensoren basieren auf dem gleichen Prinzip der Ultraschall-Entfernungsmessung und sind daher gleichermaßen geeignet.

Zum Kapitel springen Das Prinzip der Ultraschall-Entfernungsmessung

Eine Ultraschall-Entfernungsmessung basiert auf einem einfachen Prinzip, das in einer Vielzahl von Anwendungen zum Einsatz kommt. Kernstück dieses Verfahrens ist die Nutzung von Ultraschallwellen, die im Frequenzbereich um 40 kHz liegen. Diese Wellen werden ausgesendet und nach ihrer Reflexion an einem Objekt wieder empfangen. Die Zeit, die zwischen Aussendung und Empfang verstreicht, gibt Aufschluss über die Entfernung zum reflektierenden Gegenstand. Ein kurzer Trigger-Puls, in der Regel etwa 10µs, dient dabei als Startsignal für die Messung.

Ultraschall-Entfernungsmessung als Animation ><

Bild-Quelle: https://ioarvanit.gr/en/archives/2992

Diese Methode findet breite Anwendung in unterschiedlichsten Projekten. Von der Messung des Füllstands in Tanks für Flüssigkeiten wie Öl oder Wasser bis hin zur Abstandsmessung, die in Parkassistenzsystemen von Fahrzeugen eine Rolle spielt, bietet die Ultraschall-Entfernungsmessung eine zuverlässige Lösung zur Distanzbestimmung.

Zum Kapitel springen Hardware

Für die Durchführung dieser Anleitung werden folgende Komponenten benötigt:

Falls du mit der Programmierung des ESP8266 noch nicht vertraut bist oder eine Auffrischung brauchst, empfehle ich dir einen Blick in das Anfängertutorial zur Programmierung des ESP8266 zu werfen. Dort sind die Grundlagen für die Programmierung eines ESP8266 zu finden.

Zum Kapitel springen Verdrahtung

Die Verdrahtung für die Ultraschallsensoren HC-SR04 und JSN-SR04T am ESP8266 D1 Mini (oder einem vergleichbaren Board) ist direkt und einfach. Folgende Tabelle zeigt die Verbindung zwischen den Sensorpins und den Pins des Mikrocontrollers.
Die Verdrahtung ermöglicht es, die Entfernungsmessung mit beiden Sensortypen durchzuführen:

D1 Mini HC-SR04 / JSN-SR04T
5V VCC
G GND
D0 TRIG
D1 ECHO

Zum Kapitel springen Programmcode

Das Programm für einen Sensor sieht wie folgt aus und passt zur eben genannten Verdrahtung und auch für beide Varianten des Sensors.

/*
  Ultraschall-Sensoren HC-SR04 & JSN-SR04T mit ESP8266 D1 Mini
  Tutorial by cooper.bin @ makesmart.net
  (cc) 2021
*/

#define TRIG 16  // D0 als TRIG
#define ECHO 5   // D1 als ECHO

long duration;
float distance;

void setup() {
  Serial.begin(115200);
  pinMode(TRIG, OUTPUT);
  pinMode(ECHO, INPUT);
}

void loop() {

   // Initialisiert TRIG auf LOW, um einen klaren Startzustand zu garantieren
  digitalWrite(TRIG, LOW);
  delayMicroseconds(2);
  
  // Erzeugt einen 10µs langen HIGH-Puls auf TRIG, um den Messvorgang zu starten
  digitalWrite(TRIG, HIGH);
  delayMicroseconds(10);
  
  // Setzt TRIG zurück auf LOW, beendet den Puls
  digitalWrite(TRIG, LOW); 

  duration = pulseIn(ECHO, HIGH);
  
  // Berechnung der Entfernung basierend auf der Zeitdauer der Ultraschallwellen
  // Die Geschwindigkeit des Schalls in der Luft beträgt etwa 0.034 cm/µs.
  // Die Dauer beinhaltet die Zeit für den Hin- und Rückweg, daher teilen wir durch 2, um die einfache Entfernung zu erhalten.
  distance = duration * 0.034 / 2;

  Serial.print("Entfernung: ");
  Serial.print(distance);
  Serial.println("cm");
  
  delay(1000);  // Eine Sekunde Pause, um die Ausgabe zu verlangsamen.
}

Nach dem Hochladen des Codes liefert der serielle Monitor folgende Ausgabe. Die beobachteten Unterschiede in den Messwerten erklären sich durch die Bewegung des Sensors während der Datenerfassung.

Entfernung: 52.43cm
Entfernung: 52.55cm
Entfernung: 53.06cm
Entfernung: 52.80cm
Entfernung: 52.92cm
[...]

Zum Kapitel springen Die Entfernung ist berechnet, was nun?

Die erfolgreiche Distanzmessung eröffnet ein breites Feld an Anwendungen, von der Ermittlung von Füllständen bis zur Steuerung autonomer Roboter. Diese Messungen gehen weit über die reine Distanzerfassung hinaus und ermöglichen weiterführende Berechnungen, etwa die Volumenbestimmung von Behältern durch Anpassung des Gesamtvolumens um den nicht genutzten Raum. Mit diesen Schritten bewegen wir uns allerdings schon auf dem Gebiet der angewandten Mathematik und nicht mehr nur bei der Implementierung der beiden Sensoren.

Zum Kapitel springen Tipps für die Verwendung mehrerer Sensoren

Wenn mehrere Sensoren an einem Mikrocontroller betrieben werden sollen, lässt sich der TRIG-Pin gemeinsam nutzen, während für jeden Sensor ein separater ECHO-Pin am Mikrocontroller vorgesehen werden muss. Dies erlaubt die individuelle Messung der Distanzen durch jeden Sensor, ohne dabei die Anzahl der benötigten Pins unnötig zu erhöhen.

Beim Anschluss mehrerer Ultraschallsensoren wie dem HC-SR04 und JSN-SR04T an einen ESP8266 D1 Mini oder einen Arduino sind zusätzlich noch einige wichtige Punkte zu beachten:

  • Stromversorgung:
    Beide Sensortypen benötigen 5V. Stelle sicher, dass das Board stabilen Strom liefert, vor allem bei der Nutzung mehrerer Sensoren.
  • GND-Verbindung:
    Verbinde alle GND-Anschlüsse miteinander, um Potenzialunterschiede zu vermeiden und die Messgenauigkeit zu erhöhen.
  • Verzögerungen einbauen:
    Um Interferenzen zu vermeiden, implementiere eine Verzögerungen zwischen den Trigger-Signalen, wenn mehrere Sensoren gleichzeitig genutzt werden.

Das Thema arduino-ide gibt es auch auf dem makesmart Discord-Server!

mehr erfahren

Teile diesen Beitrag



Diese Artikel könnten dich auch interessieren

ESP8266 D1 Mini programmieren - Der Start mit der Arduino IDE

Erfahre, wie du den ESP8266 D1 Mini mit der Arduino IDE programmierst. Dank den kostenlosen Entwicklungswerkzeugen und der microUSB-Buchse ist das für jeden ein Kinderspiel.

cooper.bin am 10.02.2024

Der DS18B20 Temperatursensor am ESP8266 D1 Mini - Einfache Temperaturmessung

Lerne, wie du mit der Arduino IDE, dem ESP8266 und einem DS18B20 Temperatursensor einfache und schnelle Temperaturmessungen durchführen kannst.

cooper.bin am 05.03.2024

Der DHT22 am ESP8266 - Wie man die Temperatur und Luftfeuchtigkeit misst

In diesem Tutorial lernst du, wie du mit einem DHT22 und einem ESP8266 D1 Mini die Luftfeuchtigkeit und die Temperatur einfach messen kannst.

cooper.bin am 12.03.2024

ESP8266 - Ein einfacher Webserver mit mDNS

Während Webserver wie Apache2 oder NGNIX auf Rechnern laufen, kann man auch auf einem ESP8266 einen Webserver verwenden. In diesem Tutorial werden wir ein Grundgerüst implementieren.

cooper.bin am 13.02.2024

ESP8266 Webserver: GET-Variablen auslesen

GET-Parameter sind Variablen, die über die URL übergeben werden. Diese Variablen können auf einem ESP8266 ausgelesen werden, um bestimmte Aktionen in der Software auszulösen.

cooper.bin am 17.02.2024