Skip to Content

Wasserdichter JSN-SR04T Ultraschall-Entfernungssensor mit Arduino Tutorial

Wasserdichter JSN-SR04T Ultraschall-Entfernungssensor mit Arduino Tutorial

DerJSN-SR04T ist ein einfach zu verwendender wasserdichter Ultraschall-Entfernungssensor mit einer Reichweite von 25 bis 450 cm. Wenn du vorhast, ein Wasserstandsmesssystem zu bauen oder andere Entfernungen im Freien messen möchtest, dann ist dies der Sensor, den du brauchst!

In diesem Artikel habe ich ein Schaltbild und Beispielcodes beigefügt, damit du mit deinem Sensor experimentieren kannst. Nach jedem Beispiel erkläre ich, wie der Code funktioniert, sodass du ihn problemlos an deine Bedürfnisse anpassen kannst.

Zuerst sehen wir uns ein Beispiel an, das keine Arduino-Bibliothek verwendet. Danach stelle ich die einfach zu verwendende NewPing Bibliothek vor, die einige praktische eingebaute Funktionen bietet. Im letzten Beispiel zeige ich dir, wie du die gemessenen Entfernungen auf einem 4-Stellen-Display anzeigen kannst.

Aber fangen wir mit den Teilen an, die du für dieses Projekt benötigst.

Benötigte Teile

Unten findest du die für dieses Projekt benötigten Teile. Wenn du nach dem JSN-SR04T suchst, stößt du vielleicht auf die aktualisierte Version, den JSN-SR04T-2.0. Diese neuere Version funktioniert genau gleich, ist aber für 3-5 V statt 5 V ausgelegt. Einige Nutzer haben jedoch Probleme bei der Verwendung der Sensoren mit niedrigerer Spannung festgestellt. Eine längere Trigger-Pulsdauer von mindestens 20 µs statt 10 µs scheint zu helfen, wenn fehlerhafte Messwerte auftreten.

Arduino Uno

USB Data Sync cable Arduino

USB-Kabel für Arduino UNO

Dupont wire set

Dupont-Kabelsatz

Half_breadboard56a

Breadboard

JSN-SR04T Ultrasonic Sensor Module

JSN-SR04T Sensor

 4-Stellen-Display TM1637

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Über den JSN-SR04T Sensor

Der Sensor wird mit einem 2,5 m langen Kabel geliefert, das an ein Breakout-Board angeschlossen wird, welches den Sensor steuert und die Signalverarbeitung übernimmt. Beachte, dass nur der Sensor und das Kabel selbst wasserdicht sind.Tauche das Breakout-Board selbst nicht ins Wasser!

Ein Ultraschall-Entfernungssensor funktioniert, indem er Ultraschallwellen aussendet. Diese Ultraschallwellen werden von einem Objekt reflektiert und der Sensor erkennt sie. Durch die Messung der Zeit zwischen Aussenden und Empfangen der Schallwellen kannst du die Entfernung zwischen Sensor und Objekt berechnen.

Sound impulse and its reflection to measure distance
Schallimpuls und seine Reflexion zur Entfernungsmessung

Pinbelegung des JSN-SR04T

Das Breakout-Board des JSN-SR04T hat vier Pins.5V und GNDfür die Stromversorgung, Trigzum Auslösen des Ultraschallimpulses und den Ausgang Echo, der einen Puls zurückgibt, dessen Länge proportional zur gemessenen Entfernung ist. Das Bild unten zeigt die Pinbelegung.

Pinout for JSN-SR04T board
Pinbelegung für das JSN-SR04T Board

Funktion des JSN-SR04T

Um den Sensor zu betreiben, musst du Trig für mindestens 10 Mikrosekunden auf HIGH setzen. Dadurch sendet das Board acht Ultraschallimpulse (Schallstöße).

Timing diagram of JSN-SR04T from datasheet
Zeitdiagramm des JSN-SR04T vom Datasheet

Wenn ein reflektierter Schall (Echo) empfangen wird, geht der EchoAusgang auf HIGH und die Entfernung kann berechnet werden als

Entfernung = High-Level-Zeit * 340 m/s / 2

wobei 340 m/s die Schallgeschwindigkeit ist. Wir verwenden diese Formel später im Code, aber da wir die Entfernung in cm messen wollen, ist die Konstante 0,034 cm/µs.

Beachte, dass Ultraschallsensoren keine Laser mit gebündeltem Strahl sind. Ihre Richtwirkung ist eher kugelförmig und sie benötigen eine ausreichend große und harte/reflektierende Oberfläche für genaue Messungen.

Richtwirkung des JSN-SR04T (source)

Beim JSN-SR04T sollte das Ziel mindestens 0,5 Quadratmeter groß sein und der Sensor senkrecht auf das Ziel zeigen. Die folgende Tabelle zeigt die Spezifikationen des Sensors, aber beachte, dass Messbereich und Auflösung unter idealen Bedingungen gelten.

JSN-SR04T Spezifikationen

Betriebsspannung5 V
Betriebsstrom30 mA
Ruhe-Strom5 mA
Frequenz40 kHz
Messbereich25-450 cm
Auflösung2 mm
Messwinkel45-75 Grad
Sensorabmessungen23,5 x 20 mm, 2,5 m langes Kabel
PCB-Abmessungen41 x 28,5 mm
Befestigungsloch18 mm

Weitere Informationen findest du im Datenblatt hier.

JSN-SR04T vs HC-SR04

Was sind die Unterschiede zwischen diesem Sensor und dem HC-SR04? Der Hauptunterschied, abgesehen davon, dass dieser wasserdicht ist, besteht darin, dass dieser Sensor nur einen Ultraschallwandler verwendet, statt zwei. Dieser Wandler dient sowohl als Sender als auch als Empfänger der Ultraschallwellen.

Waterproof JSN-SR04T ultrasonic distance sensor with Arduino Tutorial
Der Wandler des JSN-SR04T

Für mehr Infos, wie Ultraschallsensoren funktionieren, kannst du meinen Artikel über den HC-SR04 lesen. In diesem Artikel werden die Funktionsprinzipien eines Ultraschall-Entfernungssensors ausführlicher erklärt.

Verdrahtung – JSN-SR04T an Arduino

Das untenstehende Schaltbild zeigt, wie du den JSN-SR04T Sensor mit dem Arduino verbindest. Das Breakout-Board des JSN-SR04T hat die gleiche Pinbelegung wie der HC-SR04, sodass es als direkter Ersatz verwendet werden kann. Das Sensorkabel kann am Anschluss auf der Rückseite des Breakout-Boards eingesteckt werden.

Wiring diagram/schematic for the JSN-SR04T ultrasonic distance sensor with Arduino
Schaltbild für den JSN-SR04T Ultraschall-Entfernungssensor mit Arduino

Die Beispielcodes unten verwenden die digitalen Pins 12 und 11 für Trigger und Echo, aber natürlich kannst du jeden beliebigen digitalen Pin verwenden.

5 V5 V
TrigPin 12
EchoPin 11
GNDGND

Beispielcode für JSN-SR04T Sensor mit Arduino

Nachdem du den Sensor verdrahtet hast, ist es Zeit, den Arduino mit dem Computer zu verbinden und Code hochzuladen. Der Sensor kann ohne Arduino-Bibliothek verwendet werden. Später zeige ich dir ein Beispiel mit der NewPing-Bibliothek, die den Code deutlich kürzer macht.

Lade den folgenden Beispielcode mit dem Arduino IDE auf deinen Arduino hoch. Dieser Code funktioniert auch für den JSN-SR04T-2.0. In den folgenden Abschnitten erkläre ich, wie der Code im Detail funktioniert.

const int trigPin = 12;
const int echoPin = 11;

void setup() {
  Serial.begin(115200);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(5);

  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  long duration = pulseIn(echoPin, HIGH);
  long distance = duration * 0.034 / 2;

  Serial.print("Distance:");
  Serial.println(distance);
  delay(100);
}

Wenn du den Code ausführst und den Sensor auf Objekte in unterschiedlichen Entfernungen richtest, sollten im Serial Monitor verschiedene Entfernungen (in cm) angezeigt werden. Vergiss nicht, die Baudrate für dieses Beispiel auf 115200 einzustellen!

Serial Monitor showing measured distances by JSN-SR04T in cm.
Serial Monitor zeigt gemessene Entfernungen in cm

Du kannst auch den Serial Plotter öffnen und solltest eine wellenförmige Linie sehen, wenn du den Sensor bewegst, um verschiedene Entfernungen zu messen.

Serial Plotter showing measured distances in cm.
Serial Plotter zeigt gemessene Entfernungen in cm

Wie der Code funktioniert

Zuerst werden der Trigger-Pin und der Echo-Pin definiert. Ich nenne sie trigPin und echoPin. Der Trigger-Pin ist mit digitalem Pin 12 und der Echo-Pin mit digitalem Pin 11 am Arduino verbunden. Die Anweisung const wird verwendet, um einem konstanten Wert einen Namen zu geben.

const int trigPin = 12;
const int echoPin = 11;

Im setup()startest du die serielle Kommunikation mit einer Baudrate von 115200. Um die gemessene Entfernung im Serial Monitor anzuzeigen, drücke Strg+Shift+M oder gehe zu Tools > Serial Monitor. Stelle sicher, dass auch im Serial Monitor die Baudrate auf 115200 eingestellt ist.

Als Nächstes setzt du den trigPin als Ausgang und den echoPin als Eingang.

void setup() {
  Serial.begin(115200);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

Im loop()löst du den Sensor aus, indem du den trigPin für 20 µs auf HIGH setzt. Beachte, dass du für ein sauberes Signal zuerst den trigPin für 5 Mikrosekunden auf LOW setzt.

void loop() {
  digitalWrite(trigPin, LOW);  
  delayMicroseconds(5);

  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

Danach musst du die durationdes vom echoPingesendeten Pulses lesen. Ich verwende dafür die Funktion pulseIn() . Diese Funktion wartet, bis der Pin von LOW auf HIGH wechselt, startet die Zeitmessung, wartet dann, bis der Pin wieder LOW wird, und stoppt die Zeitmessung.

Anschließend kannst du die Entfernung mit der im Einführungsteil genannten Formel berechnen. Beachte, dass wir eine Konstante von 0,034 für die Schallgeschwindigkeit verwenden (statt 340), da wir die Entfernung in Zentimetern und nicht in Metern wollen.

  long duration = pulseIn(echoPin, HIGH);
  long distance = duration * 0.034 / 2;

Zum Schluss gibst du die berechnete Entfernung im Serial Monitor aus und zeigst sie auch im Plotter an. Die Verzögerung von 100 Millisekunden am Ende verlangsamt die Messungen auf eine vernünftige Rate.

  Serial.print("Distance:");
  Serial.println(distance);
  delay(100);

Beispielcode JSN-SR04T mit Arduino und NewPing-Bibliothek

Die NewPing Bibliothek von Tim Eckel kann mit vielen Ultraschall-Entfernungssensoren verwendet werden. Die neueste Version dieser Bibliothek kannst du hier auf bitbucket.org. herunterladen. Du wirst feststellen, dass der untenstehende Code mit der NewPing-Bibliothek viel kürzer ist als der zuvor verwendete Code.

Du kannst die Bibliothek installieren, indem du in der Arduino IDE zu Sketch > Include Library > Add .ZIP Librarygehst.

Die Bibliothek enthält einige Beispiele, die du verwenden kannst, aber du musst sie an deine Hardware anpassen. Ich habe unten einen modifizierten Beispielcode beigefügt, der mit der gleichen Verdrahtung wie zuvor verwendet werden kann.

#include "newping.h"

const int trigPin = 12;
const int echoPin = 11;
const int maxDist = 450;

NewPing sonar(trigPin, echoPin, maxDist);

void setup() {
  Serial.begin(115200);
}

void loop() {
  // Wait 50ms between pings (about 20 pings/sec)
  delay(50); 

  long distance = sonar.ping_cm();

  Serial.print("Distance:");
  Serial.println(distance);
  delay(100);
}

Beispiel: JSN-SR04T mit Arduino und 4-Stellen-Display

Als letztes Beispiel möchte ich dir zeigen, wie du die gemessenen Entfernungen auf einem 4-stelligen 7-Segment-Display anzeigen kannst. Das Display, das unter den benötigten Teilen aufgeführt ist, hat einen TM1637 Treiber, der das Anschließen und Steuern sehr einfach macht. Fangen wir mit der Verdrahtung dieses Displays zusätzlich zum Sensor an.

Verdrahtung – JSN-SR04T an Arduino und 4-Stellen-Display

Wir verdrahten den JSN-SR04T Sensor wie zuvor, verwenden aber zusätzlich das Breadboard, um die Stromversorgung für Sensor und Display zu verteilen.

Wiring of JSN-SR04T with Arduino and 4-Digit Display
Verdrahtung des JSN-SR04T mit Arduino und 4-Stellen-Display

Das Display erhält seine Stromversorgung (VSS, GND) vom Breadboard und hat zwei zusätzliche Pins, die du mit dem Arduino verbinden musst. Verbinde den CLK (Clock) Pin mit Pin 3 des Arduino (weißes Kabel) und den DIO (Digital IO) mit Pin 4 des Arduino (graues Kabel). Damit ist die Verdrahtung abgeschlossen.

Schauen wir uns nun den Code an.

Code – JSN-SR04T mit Arduino und 4-Stellen-Display

Den Code für den JSN-SR04T Sensor behalten wir bei. Wie zuvor verwenden wir die NewPingBibliothek, initialisiert mit den gleichen Pins, und lesen Entfernungen über sonar.ping_cm().

#include "NewPing.h"
#include "TM1637Display.h"

// Display
const int clkPin = 3;
const int dioPin = 4;

// Sonar
const int trigPin = 12;
const int echoPin = 11;
const int maxDist = 450;

NewPing sonar(trigPin, echoPin, maxDist);
TM1637Display display = TM1637Display(clkPin, dioPin);

void setup() {
  Serial.begin(115200);
  display.setBrightness(5);
}

void loop() {
  long distance = sonar.ping_cm();
  Serial.print("Distance:");
  Serial.println(distance);
  display.showNumberDec(distance);
  delay(200);
}

Neu ist, dass wir das Display-TM1637DisplayObjekt erstellen. Es wird mit den Konstanten clkPin und dioPininitialisiert, das sind die Pins, an die wir das Display angeschlossen haben.

In der setup()Funktion stellen wir die Helligkeit des Displays ein, wobei 0 die niedrigste und 7 die höchste Helligkeit ist. Dieser Befehl schaltet das Display auch ein.

Schließlich zeigen wir in der loop()Funktion einfach die gemessene Entfernung an, indem wir display.showNumberDec(distance)aufrufen. Und das war’s. Jetzt hast du einen Ultraschall-Entfernungsmesser, der Entfernungen in Zentimetern auf einem 4-stelligen Display anzeigt.

JSN-SR04T with Arduino and 4-Digit Display
JSN-SR04T mit Arduino und 4-Stellen-Display

Fazit

In diesem Artikel habe ich dir gezeigt, wie der JSN-SR04T Ultraschall-Entfernungssensor funktioniert und wie du ihn mit Arduino verwenden kannst. Ich hoffe, du fandest es nützlich und informativ.

Wenn du mehr über andere Entfernungssensoren lernen möchtest, könnten die untenstehenden Artikel hilfreich sein:

Wenn du Fragen, Vorschläge hast oder denkst, dass in diesem Tutorial etwas fehlt, hinterlasse bitte einen Kommentar unten.