HC-SR04 und JSN-SR04T-2.0 Abstandssensoren

Über den Beitrag

In meiner Reihe über Licht-, Gestik-, Bewegungs- und Abstandssensoren möchte ich diesmal den Klassiker der Abstandssensoren, nämlich den HC-SR04, vorstellen. Ich werde darauf eingehen wie er prinzipiell funktioniert, wie ihr ihn an einen Arduino anschließt und wie ein geeigneter Sketch dazu aussieht. Dann werde ich noch den wasserdichten Verwandten des HC-SR04, den JSN-SR04T-2.0, vorstellen.

Wenn diese Beitragsreihe komplett ist, findet ihr hier einen Link zur Zusammenfassung. 

Basisdaten

Die wichtigsten Eckdaten des HC-SR04 sind:

  • Reichweite: 2 cm bis ~400 cm
  • Spannung: 5 V
  • Stromverbrauch: ca. 3.5 mA (schnelle Dauermessung, selbst ermittelt) 
  • Erfassungswinkel: 15°
  • Signallevel: TTL
  • Genauigkeit: 0.3 cm (theoretisch, dazu später mehr)
  • Messungen pro Sekunde: max. 50

Die maximale Reichweite hängt unter anderem von der Größe des Objekts, dem Einfallswinkel des Signals und der Oberflächenbeschaffenheit ab. 

Ihr bekommt den HC-SR04 im Einzelpack ab ca. vier Euro zum Beispiel hier bei Amazon. Meist wird er in Mehrfachpacks angeboten und ist dann noch einmal deutlich günstiger. 

Das hilfreichste Datenblatt habe ich hier gefunden.

Funktionsweise des HC-SR04

Der HC-SR04 macht es wie die Fledermaus: er sendet ein Ultraschallsignal und wertet das Echo aus. Über die Flugzeit des Signals und die Schallgeschwindigkeit lässt sich dann die Distanz berechnen.

Dazu besitzt das Modul einen Ultraschallsender, der auf dem Modul mit einem „T“ (Transmitter) gekennzeichnet ist. Daneben, mit „R“ (Receiver) gekennzeichnet, sitzt der Receiver. 

Pinout des HC-SR04

HC-SR04 Ultraschallmodul
HC-SR04 Ultraschallmodul

Das Modul hat vier Pins:

  • VCC / GND: hier werden 5 V angeschlossen
  • Trigger: ein Wechsel von HIGH auf LOW löst eine Messung aus
  • Echo: ist HIGH solange das Ultraschallsignal unterwegs ist

Genauer Ablauf einer Messung

Schematischer, zeitleicher Ablauf einer Messung mit dem HC-SR04
Schematischer Verlauf einer Messung (Zeitachse ist nicht maßstabsgetreu)

Der Triggereingang benötigt zunächst ein HIGH – Signal mit einer Länge von mindestens 10 µs. Die abfallende Flanke des Triggersignals ist der „Startschuss“ für die Messung. Nach ca. 250 µs sendet der HC-SR04 das Ultraschallsignal in Form von acht 40 kHz Pulsen. Dieser Vorgang benötigt ca. 200 µs. Unmittelbar nach Senden des Signals geht der Echo Pin auf HIGH. Dort bleibt er bis das Modul das reflektierte Signal empfängt. Nach einer Maximalzeit von – so meine Messung – circa 170 ms geht der Echo Pin aber auch ohne empfangenes Echo auf LOW. Das entspräche übrigens einer Distanz von ~29 m. Messwerte in dieser Region können deshalb als „Kein Objekt in Reichweite“ gewertet werden.

Eigentlich muss der Echo Pin so lange auf HIGH bleiben, bis das Echo Signal vollständig zurückgekommen ist, da dieses ja immerhin 200µs lang ist, was einer Distanz von ungefähr 3.5 cm entspricht. Über dieses Detail habe ich keine Information finden können, aber die Resultate stimmen und das ist ja die Hauptsache. 

Auswertung der HC-SR04 Messung

Die Dauer des HIGH Zustandes am Echo Pin könnt ihr bei Verwendung des Arduinos am besten mit der pulseIn() Funktion erfassen. Der Rückgabewert ist die Zeit in Mikrosekunden. 

Bleibt noch die Umrechnung der Zeit in die Distanz. In erster Näherung beträgt die Schallgeschwindigkeit in trockener Luft bei Raumtemperatur 343,2 m/s. An den Randbedingungen seht ihr schon, dass verschiedene Faktoren die Schallgeschwindigkeit beeinflussen, vor allem die Temperatur. Die folgende Formel beschreibt die Temperaturabhängigkeit in dem Bereich von -20 °C bis +40 °C mit einer Genauigkeit von > 99.8%.

cLuft ≈ 331.5 + 0.6 ⋅ T[°C]  [m/s]

Setzt ihr in diese Formel einmal 0 °C und einmal 20 °C ein, könnt ihr ausrechnen, dass es einen Unterschied von immerhin ~3.5 % ausmacht. Das ist das Zehnfache der im Datenblatt angegebenen Genauigkeit des HC-SR04. Auch die Luftfeuchte hat einen Einfluss. Bei 20° C ist die Schallgeschwindigkeit bei 100 % Luftfeuchte um 0.375 % höher als bei 0% Luftfeuchte. Weitere Parameter, wie z.B. den Luftdruck, könnt ihr vernachlässigen. Wenn ihr wissen wollt warum das so ist oder wenn ihr auch generell noch mehr zu dem Thema Schallgeschwindigkeit wissen möchtet, dann schaut hier auf Wikipedia.  

Die einfache Umrechnungsformel ohne Temperaturkorrektur lautet nach Berücksichtigung der Einheiten:

Distanz [cm] = Messzeit [µs] * 0.03432 [cm/µs] / 2

Der Faktor 1/2 kommt natürlich daher, dass das Signal die Strecke zweimal zurücklegen muss.  

Der HC-SR04 am Arduino

Sketch für die Abstandsmessung

Der Sketch für die Abstandsmessung ist aufgrund der vorhergehenden Erklärungen keine große Überraschung mehr. Im Vergleich zu den Abstandsmessungen mit dem VL53L0X und VL53L1X aus meinem letzten Beitrag ist das alles erstaunlich simpel.

Wenn ihr die Temperatur berücksichtigen wollt, dann entkommentiert die entsprechenden Zeilen.  

int triggerPin = 12;
int echoPin = 11;

int cmDistance, tCorrectedCmDistance;
//int temperature = 0;
unsigned long duration;


void setup(){
  pinMode(triggerPin, OUTPUT);
  pinMode(echoPin, INPUT);
  Serial.begin(9600);
  delay(10);
}

void loop(){
  digitalWrite(triggerPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(triggerPin, LOW);
  duration = pulseIn(echoPin, HIGH);
 
  // Schallgeschwindigkeit in Luft: 343m/S (bei 20°C)
  // 343,2 m/S --> 34,32cm / ms --> 0,03432cm / µs
  // durch 2 wg. Echo
  cmDistance = duration * 0.03432 / 2; 
//  tCorrectedCmDistance = duration *(0.03315 + 0.00006 * temperature)/2;
  Serial.print("Distanz [cm]: ");
  Serial.println(cmDistance);
//  Serial.print("T-korrigierte Distanz [cm]: ");
//  Serial.println(tCorrectedCmDistance);
  delay(500);
}

 

Zugehörige Schaltung

Auch die Schaltung ist sehr einfach. Die LED an Pin 13 benötige ich für den Bewegungsmeldersketch. 

Schaltung: der HC-SR04 am Arduino
HC-SR04 am Arduino

Ansteuerung per NewPing Bibliothek

Der Vollständigkeit halber möchte ich erwähnen, dass es eine Bibliothek namens NewPing gibt mit der sich der HC-SR04 ansteuern lässt. Diese findet ihr z.B. hier auf Github. Ich bin allerdings kein Freund davon, bei solch simplen Ansteuerungen Bibliotheken zu verwenden.

Bewegungsmeldersketch

Jeden Abstandssensor könnt ihr natürlich auch als Bewegungsmelder einsetzen. Und genau das macht der nächste Sketch. Eine Bewegung liegt vor, wenn der aktuelle Abstandswert um einen gewissen Wert vom vorherigen Wert abweicht. 

int triggerPin = 12;
int echoPin = 11;
int ledPin = 13;
int cmDistancePrevious, cmDistanceCurrent;
const int sensitivity = 20; 

void setup(){
  pinMode(triggerPin, OUTPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(echoPin, INPUT);
  cmDistancePrevious = measureDistance();
}

void loop(){
  cmDistanceCurrent = measureDistance();
  
  if (abs(cmDistanceCurrent - cmDistancePrevious) > sensitivity){
    digitalWrite(ledPin, HIGH);
    delay(1000);
    digitalWrite(ledPin,LOW);
    cmDistanceCurrent = measureDistance();
  }
  cmDistancePrevious = cmDistanceCurrent;
  delay(50);
}

int measureDistance(){
  unsigned long duration = 0;
  
  digitalWrite(triggerPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(triggerPin, LOW);
  duration = pulseIn(echoPin, HIGH);
 
  int cmDis = duration * 0.03432 / 2; 

  if(cmDis>400){
    cmDis = 400;
  }

  return cmDis;
}

 

JSN-SR04T-2.0 – die wasserdichte Alternative

Der JSN-SR04T (Version 2.0)
Der JSN-SR04T

Als nächstes möchte ich auf eine ganz interessante Alternative zum HC-SR04 eingehen und zwar den JSN-SR04T-2.0. Bei diesem ist die Sende-/Empfängereinheit sehr kompakt, wasserdicht und über ein 2,5 m Verlängerungskabel mit dem Modul verbunden. Zum einen sind dadurch z.B. Outdoor Anwendungen möglich, zum anderen lässt sich die Messeinheit viel unauffälliger verbauen. Ein Nachteil an dieser Version ist, dass sie einen Mindestabstand von 25 cm benötigt.  

Man bekommt den JSN-SR04T-2.0 für  ca. 10 – 12 Euro bei Amazon oder eBay. Wenn man über diese Plattformen bei chinesischen Shops bestellt, wird es wieder günstiger, aber man muss evtl. ein bisschen Geduld mit der Lieferung haben.

JSN-SR04T vs. JSN-SR04T-2.0 / Probleme mit JSN-SR04T

Neben dem JSN-SR04T-2.0 gibt es auch die Version JSN-SR04T, also ohne „2.0“. Diese sieht auf den ersten Blick sehr ähnlich aus, hat aber ein paar deutliche Unterschiede. Vor allem fehlt dem JSN-SR04T der Jumper R27, auf den ich noch zu sprechen komme.

Teilweise haben JSN-SR04T-2.0 Modelle Probleme mit Fehlmessungen. Dabei werden sporadisch Abstandswerte von um die 20 cm ermittelt obwohl sich nichts in diesem Bereich befindet. Ich selbst habe das bei einem von den drei Modulen, die ich mir gekauft habe, festgestellt. Die anderen beiden zeigten das Problem hingegen nicht. Da der Fehler aber auch von anderen beschrieben wird (z.B. hier) scheint es sich nicht um die absolute Ausnahme zu handeln. 

Man könnte versucht sein, sich wg. der Probleme gezielt einen JSN-SR04T zu kaufen. Aber auch wenn Shops Produktbilder vom JSN-SR04T haben und auch wenn nichts anderes in der Produktbeschreibung auf die Version 2.0 hinweist, erhält man mit hoher Wahrscheinlichkeit trotzdem die Version 2.0. Jedenfalls ist mir das bei zwei von zwei Versuchen passiert. Dann habe ich die Lust verloren und auf den Test eines JSN-SR04T verzichtet. 

Auch in diesem Shop hier bekam ich die Version 2.0, obwohl die andere abgebildet war. Allerdings habe ich diesen Vertreter am intensivsten getestet und er funktionierte ohne irgendwelche Probleme. Für diese Quelle spricht auch, das sich dort (Stand August 2019) keine Negativbewertungen finden. 

HC-SR04 vs. JSN-SR04T-2.0

Abgesehen von den schon genannten Unterschieden hat der JSN-SR04T folgende Besonderheiten:

  • Spannungsversorgung: 3 – 5.5 V
  • Stromverbrauch: ca. 8 mA
  • Reichweite: angeblich bis zu 6 Meter
  • Erfassungswinkel: 45° – 75°; auch hier finden sich unterschiedliche Angaben – auf jeden Fall ist der Erfassungswinkel breiter als der des HC-SR04
  • Kommunikation: wie HC-SR04 über Trigger / Echo oder seriell (RX / TX)
  • Baudrate: 9600, n, 8, 1 

Die maximale Reichweite hängt von der Größe des Objekts, seiner Oberflächenbeschaffenheit und dem Einfallswinkel des Signals ab. Ich würde sagen, dass die Grenze wie beim HC-SR04 eher bei 4 Metern liegt. Bei großen, glatten Wänden zum Beispiel kommt man etwas darüber hinaus. 

Datenblätter zum JSN-SR04T-2.0 findet man kaum. Hier noch das Beste, auf das ich gestoßen bin. 

Die drei Betriebsmodi des JSN-SR04T-2.0

R27 Jumper zum Einstellen der Betriebsmodi des JSN-SR04T-2.0
R27 Jumper zum Einstellen der Betriebsmodi

Auf dem Modul befindet sich neben den Pins der Jumper R27. Diesen könnt ihr offen lassen, ihr könnt einen 47 kOhm Widerstand dazwischen löten oder einen 120 kOhm Widerstand nehmen. Mit dieser Maßnahme legt ihr den Betriebsmodus fest.  

Modus 1: R27 offen

In diesem Modus verhält sich der JSN-SR04T-2.0 wie der HC-SR04, d. h. ihr steuert ihn über den Trigger und den Echo Pin an. Ihr könnt denselben Arduino Sketch wie für den HC-SR04 verwenden, jedoch ggf. mit einer kleinen Änderung. Bei jeder fünften bis zehnten Messung erhielt ich als Ergebnis eine Null. Habt ihr dasselbe Problem, dann erhöht die „HIGH-Zeit“ am Trigger Pin von 10 auf 20 Mikrosekunden (Zeile 18 in HC_SR04_Proximity.ino). Mit dieser Maßnahme trat der Fehler bei mir nicht mehr auf. 

Modus 2: 47 kOhm Widerstand an R27

47 kOhm an R27 des JSN-SR04T-2.0 für Modus 2
47 kOhm an R27 – Modus 2 (stabiler wäre natürlich ein SMD Widerstand, hatte ich aber nicht)

Mit einem 47 kOhm Widerstand an R27 wechselt der JSN-SR04T-2.0 in einen kontinuierlichen Betriebsmodus. In diesem Modus erfolgt alle 100 ms eine Messung. Das Ergebnis dieser Messung ist die Distanz in Millimetern, die als 16 Bit Wert seriell übermittelt wird. Der Trigger Pin wird dabei zu RX, der Echo Pin wird zu TX. Der JSN-SR04T-2.0 überträgt 4 Bytes pro Messung:

  1. Startbyte: 0xFF 
  2. Oberes Byte der Distanz (h_data)
  3. Unteres Byte der Distanz (l_data)
  4. Checksumme: unteres Byte der Summe aus Startbyte + h_data + l_data

In meinem Sketch dazu (JSN_SR04T_Serial_continous.ino) erfolgt die Kommunikation über SoftwareSerial. Die Arduino Pins 10 und 11 habe ich als RX Pin bzw. TX Pin definiert. Der RX des Arduino kommt an TX des Moduls, TX des Arduino an RX des Moduls. Ich denke, dass ich mir ein Schaltschema dazu sparen kann. 

Sind Daten am seriellen Eingang vorhanden, prüft der Sketch, ob es sich um das Startbyte handelt. Ist das der Fall, werden die nächsten 3 Bytes gelesen und in einem Array („buf“) gespeichert. Die Distanz wird dann aus h_data und l_data berechnet. Zum Schluss prüft der Sketch noch die Checksumme. Dazu muss das obere Byte maskiert werden. Ist die Checksumme OK, so erfolgt die Ausgabe des Ergebnisses. 

Die Variablen h_data, l_data und sum habe ich nur aus didaktischen Gründen definiert. Ihr könnt auch direkt mit buf[0], buf[1] und buf[2] arbeiten. 

#include <SoftwareSerial.h>
#define rxPin 10
#define txPin 11
 
SoftwareSerial jsnSerial(rxPin, txPin);
 
void setup() {
  jsnSerial.begin(9600);
  Serial.begin(9600);
}
 
void loop() {
  if(jsnSerial.available()){
    getDistance();
  }
}

void getDistance(){
  unsigned int distance;
  byte startByte, h_data, l_data, sum = 0;
  byte buf[3];
  
  startByte = (byte)jsnSerial.read();
  if(startByte == 255){
    jsnSerial.readBytes(buf, 3);

    h_data = buf[0];
    l_data = buf[1];
    sum = buf[2];
    distance = (h_data<<8) + l_data;

    if(((startByte + h_data + l_data)&0xFF) != sum){
      Serial.println("Invalid result");
    }
    else{
      Serial.print("Distance [mm]: "); 
      Serial.println(distance);
    } 
  } 
  else return;
}

 

Modus 3: 120 kOhm Widerstand an R27

Im Gegensatz zum Modus 2 ist der Modus 3 ein Polling Verfahren, d. h. eine Messung wird auf Anfrage ausgeführt. Die Kommunikation erfolgt wieder seriell. Eine Messung wird dabei durch Senden einer 0x55 gestartet. Im nachfolgenden Sketch löst ein Tasterdruck dieses Startsignal aus. Das „Abholen“ des Ergebnisses wiederum unterscheidet sich nicht vom vorherigen Sketch.

#include <SoftwareSerial.h>
#define rxPin 10
#define txPin 11
#define switchPin 9
 
SoftwareSerial jsnSerial(rxPin, txPin);
 
void setup() {
  jsnSerial.begin(9600);
  Serial.begin(9600);
  pinMode(switchPin, INPUT);
}
 
void loop() {
  if(digitalRead(switchPin) == HIGH){
    jsnSerial.write(0x55);
    delay(50);
    if(jsnSerial.available()){
      getDistance();
    }
    delay(1000);
  }
}

void getDistance(){
  unsigned int distance;
  byte startByte, h_data, l_data, sum = 0;
  byte buf[3];
  
  startByte = (byte)jsnSerial.read();
  if(startByte == 255){
    jsnSerial.readBytes(buf, 3);

    h_data = buf[0];
    l_data = buf[1];
    sum = buf[2];
    distance = (h_data<<8) + l_data;

    if(((startByte + h_data + l_data)&0xFF) != sum){
      Serial.println("Invalid result");
    }
    else{
      Serial.print("Distance [mm]: "); 
      Serial.println(distance);
    } 
  } 
  else return;
}

 

Danksagung

Die Fledermaus im Beitragsbild stammt von Schmidsi auf Pixabay.

99 thoughts on “HC-SR04 und JSN-SR04T-2.0 Abstandssensoren

  1. Hallo,
    eine sehr gute Beschreibung, die mich gut unterstützt hat ! Vielen Dank dafür.

    Ich habe noch folgende Dinge festgestellt:
    1) Den Sensor JSN-SR04T-2.0 gibt es offensichtlich in zwei Ausführungen. In meiner gibt es keinen
    zusätzlichen Widerstand sondern 4 Jumperpositionen. Leider haben diese keinerlei Effekt, es wird
    immer nur die Pulslängen-Variante ausgeführt.
    2) Wenn der Sensor keinen Empfang hat (Reichweite unendlich) dann wird die maximale Pulslänge
    von ca 40ms ausgegeben, was zu einem Wert von ca 670cm führt. Beim HC-SR04 ist der Puls in diesem
    Fall ca 125ms lang. Für beide Sensoren könnte man ein Timeout für den Messtimer nutzen:
    duration = pulseIn(echoPin, HIGH, 30000) . Dadurch wird der Wert 0 zurückgegeben.
    3) Im Büro kann ich sehr schöne reproduzierbare Messungen machen. Ziel ist es aber, Bewegung an
    einer Terrassentür zu erkennen. Alleine die Türlaibung und ein Stehtisch in der Nähe erzeugen derart
    wirre Reflexionen, dass der Einsatz nahezu unmöglich wird.

    Dazu eine Frage: Gibt es einen verlässlichen Schaltplan zu der Platine ? Ich würde nämlich gerne die
    Empfindlichkeit oder besser noch die Sendeleistung reduzieren, um die Ergebnisse zu verbessern.

    Viele Grüße und viel Erfolg bei weiteren Projekten
    Detlef

      1. Hallo Wolfgang,
        vielen Dank für den Link. Der Plan könnte passen, gibt jedenfalls gute Hinweise.
        Das sieht so nach „mein erstes Projekt als Ingenieur“ aus : C2=578,5pF, C4=575pF etc .
        Wie will man das ernsthaft in Serie produzieren ?
        Ich werde zunächst R4 vergrößern, um die Sendeleistung zu verringern,
        danach die Eingangsempfindlichkeit mit einem Poti über D1-1 nach D1-3.
        VG
        Detlef

  2. Wie ist dieser Sensor hinsichtlich des Tierschutzes zu sehen? z.B. störe ich Fledermäuse damit oder vertreibe irgendwelche andere Tiere?

    1. Eine interessante Frage, die ich nicht beantworten kann. Das Signal, das der Sensor sendet, hat eine Länge von 0,2 Millisekunden = 1/5000stel Sekunde, was schon ziemlich kurz ist. Könnte natürlich trotzdem als störend wahrgenommen werden. Und wie laut die Teile in diesem Frequenzbereich sind, weiß ich auch nicht.

  3. Hallo Wolfgang,
    wieder ein sehr guter Artikel, der den Einstieg in das Thema erheblich erleichter.
    Vielen Dank!
    Ich frage mich, ob man die JSN-SR04T (Wasserdicht) auch Unterwasser betreiben kann, um damit z.B. die Wassertiefe zu messen (Echolot)?
    Kann das funktionieren?
    Grüße
    Sven

  4. Hallo Wolfgang,

    danke für den Beitrag und entschuldigung im Voraus für diese dumme Frage: Was sagt mir der Erfassungwinkel von 15grad?
    Hintergrund meiner Frage ist folgender: Um bei meinem Projekt Abstände von 0 bis 50cm messen zu können, wollte ich den Sensor einfach 2cm (bzw bei anderen Beschreibungen sind es 4cm) nach hinten schieben und den Sensor quasi „Eintunneln“. Sehe ich das richtig, dass der Tunnel gross genug sein muss, dass ich innerhalb der 15° Hindernis frei bleibe? Das gilt doch dann aber nur für den Transmitter, oder?

    Liebe Grüße
    TOBi

    1. Hi TOBi, das ausgehende Ultraschallsignal wird in einem Winkel von 15° abgegeben, also als eine Art Kegel. Alles was in diesem Bereich liegt kann potenziell reflektieren. Wenn der Schall in einem flachen Winkel auftrifft und die Oberfläche glatt ist, könnte das eine Reflexion verhindern, das muss man ausprobieren. Ich weiß, dass einige Leute bei der Füllstandsmessung von Zisternen hatten wegen der Wandreflexion. Wenn dein „Tunnel“ kürzer als der Mindestabstand für die Erfassung ist, dann sollte es auch kein Problem sein. Also: sollte möglich sein, aber probiere lieber ein bisschen herum bevor du alles fest verbaut. Viel Erfolg!
      VG, Wolfgang

    2. Hallo TOBi,
      auch der Receiver braucht ein möglichst offenes „Sichtfeld“.
      Mach einen einfachen Versuch: Guck durch die Pappröhre einer Klopapierrolle und anschließend durch Die einer Küchenrolle, – der Ausschnitt den Du siehst ist bei der kurzen Rolle deutlich größer.
      Auf den Ultraschall Receiver umgesetzt: je länger und enger die Röhre davor um so kleiner wird der Bereich aus dem die Reflexion kommen muss damit er sie erkennt. 😉

      Gruß Herbert

  5. Danke Wolfgang,
    für die Anleitung. Würde eine Abstandsmessung auch im Wasser funktionieren?
    Als SONAR Tiefenmesser?

    1. Hallo, wäre schön, wenn das ginge. Hier hat das mal jemand – leider erfolglos – probiert:

      https://youtu.be/TiVjCRc9-60

      Warum es anscheinend nicht funktioniert, kann ich nicht sagen. Vielleicht braucht es unter Wasser stärkere Signale.

    2. Ich habe den US Abstandssensor erfolgreich für eine Teichfüllstandsanzeige verwendet. Allerdings nicht im sondern über Wasser. Der Wesentliche runterschied dürfte die extrem unterschiedliche Ausbreitung von Schallwellen im Wasser sein. Die Ultraschallwandler sind nicht für Wasserbetrieb ausgelegt. Und die Messwerte müsste man anpassen.

      Ich kam hierher übrigens mit der Frage, wie stark das Messergebnis von der Temperatur abhängt. Ich messe bei 10° Temperaturunterschied etwa 10 mm Unterschied beim Wasserstand. Gelesen habe ich, dass man physikalischen schon mit 3,5% rechnen muss.

  6. Hallo Wolfgang,

    ersteinmal vielen Dank für deine super Seite mit den hervorragenden Informationen.
    Ich hab mich mal intensiv mit dem Ultraschallmodul befasst und etwas erstaunliches festgestellt:

    Auf meinen Modulen ist das Quarz völlig ohne Funktion.
    Ich habe es ausgelötet und das Modul funktioniert weiterhin völlig einwandfrei.
    Ich vermute auf den Modulen befindet sich ein Controller der auch mit internem RC Generator läuft
    und bei der Programmierung hat man anscheinend vergessen die Konfiguration auf extern Quarz umzustellen….

    Es würde mich mal interessieren, ob deine Module auch ohne das Quarz laufen.
    Testweise hab ich das Quarz einfach mit einer Drahtbrücke auf der Leiterplatte kurzgeschlossen.

    mit freundlichen Grüßen
    Bernd

    1. Hi Bernd, ich mal ein bisschen nach Schaltplänen des HC-SR04 gesucht und gefunden, dass es auf dem Modul einen Mikroprozessor EM78P153S gibt, der mit einem externen oder internen Oszillator betrieben werden kann. Vielleicht stellt der Chip von externen auf intern um, wenn man den Oszillator entfernt. Aber das ist nur Spekulation. Sollte ich richtig liegen, könnte sich das Entfernen des Oszillators negativ auf die Genauigkeit der Messung auswirken. Vielleicht teste ich das auch mal. Vielen Dank für das Teilen deiner Beobachtung – ist auf jeden Fall interessant.
      VG, Wolfgang

      1. Hallo Wolfgang,
        ersteinmal vielen Dank für die Rückmeldung.
        Ich habe mir soeben 3 neue Module gekauft bei Segor electronics
        und mit einem Oszilloskop direkt am Quarz gemessen, beide Seiten und da tut sich tatsächlich nichts.

        Ich habe anscheinend einen anderen Controller auf meinen Boards. Typ: RCWL-9300C
        Leider kann ich keine Datenblätter für diesen Chip finden….
        Die Pinbelegung scheint aber mit deinem Datenblatt vom Controller, soweit ich das ermitteln konnte, identisch zu sein.

        Genau, wie Du schon erwähnt hast, gibt das natürlich eine zusätzliche Ungenauigkeit, wenn es nicht Quarz gesteuert ist.

        Bernd

        1. Ist irgendwie unbefriedigend mit solchen Black Boxen zu arbeiten. Kommt aber leider häufiger vor. Ich habe auch kein RCWL 9300 Datenblatt gefunden. Aber Hauptsache, die Dinger tun was sie sollen.
          Wolfgang

  7. Eine sehr informative Seite, vielen Dank dafür. Eine Sache verstehe ich allerdings noch nicht. Ich habe den JSN SR04T an einem D1 Mini angeschlossen und habe genau das Problem mit den Messfehlern um die 20. Ich verwende die Tasmota Version 9.5. mit der aktuellen Version 13 wird mir gar nichts angezeigt (Zeile in Tasmota bleibt leer). Nun habe ich auf verschiedenen Seiten gelesen, dass der JSN SR04T 20Mikrosekunden benötigt. Auf dieser Seite hier steht dazu „erhöht die „HIGH-Zeit“ am Trigger Pin von 10 auf 20 Mikrosekunden (Zeile 18 in HC_SR04_Proximity.ino)“. Aber wie genau mache ich das? Wo finde ich denn die anzupassende Datei? Muss ich das in der Tasmota Konsole eingeben?
    VG
    Eric

  8. Hello Wolfgang.

    I hope you can help me with this question.
    Is there a way where i can messure the speed of sound through an object, like a piece of wood with any of this sensor? or do you know which kind of sensor should i use?

    Thanks

      1. Still searched a bit. I think it should also be possible to use an ultrasonic thickness tester. Usually you use these devices – not surprisingly – to measure the thickness. To do so, you have to enter the sonic speed. You cold calibrate the device for a material for which you know the sonic speed (there are lots of tables available), then measure the unknown material and then calculate the sonic speed from the measured thickness vs. the real thickness.

        1. Thanks for your time answering my question.
          Yes, i want to measure the speed of sound through a wood blank. I’m an engeenir and my wife makes violin bows and generally, wood with higher sound speed, is better for bow making. There is an instrument called „Lucchimeter“ that can do this, but it is a little bit expensive for us at this time. May be this obsrever data logger could work. Anyway,, I’m looking for a cheaper way to get this data, so i am investigating alternatives to do it, or to fabricate something to do it.

          1. Yes, these devices are expensive. Unfortunately, I am not sure how to do measure this with low-cost components. I can imagine there are ways, but I lack experience. Good luck!

  9. Hallo Ewald
    immer wenn ich eine Unklarheit habe, schaue ich zuerst bei dir rein. Die Funktion des grossen Rechteck-Klotz oben links der Platine „JSN-SR04T-2.0 – die wasserdichte Alternative“ (das Bild weiter oben) ist offenbar ein „Ultrasonic Transformer Radar Ranging Step-Up Boost Dedicated Reversing Radar in Week“ – was immer das bedeuten soll. Durch Drehen der Schraube verändert sich die Kadenz, aber mehr konnte ich nichts ausfindig machen. Weisst du etwas über dieses Bauteil?
    Andreas

    1. Hallo Andreas, ich habe diese Teile auch unter dem merkwürdigen Namen gefunden. Es gibt verschiedene Stellen, wo man so etwas kaufen kann, aber keine Beschreibung. Und auch in den Beschreibungen der JSN-SR04T Module habe ich nichts zur Funktion gefunden. Sehr strange!
      VG, Wolfgang

  10. más bien una pregunta, sabes si se puede utilizar en Tanques de combustible (gasolina o Diesel) en gasolineras?

    1. Sospecho que los vapores del combustible destruyen el sensor. El sensor sólo funciona de forma fiable en depósitos cerrados si son muy amplios.

  11. Frage: Auf dem board JSN-SR04T-2.0 steht bei 1. pin: 5V
    Wenn ich 3V anschließe, dann ist keine Funktion vorhanden,
    Frage: muss die Eingangsspannung 5V sein? Sollte 3,3V auch möglich sein,
    darf es aber nicht weniger als 3,3V (Bp 3V) sein?
    Die Beschreibung 3,3V – 5V: ist das ein oder? also nicht: von-bis
    Danke vorab für eine Antwort.

    1. Ich habe mein JSN-SR04-2.0 Modul gerade mit meinem Labornetzteil als Spannungsquelle ausprobiert. Obwohl auch bei mir 5V am Spannungseingang des Moduls steht, konnte ich die Spannung bis 2.8 Volt reduzieren. Irgendwo zwischen 2.7 und 2.8 Volt steigt das Modul aus. Das klappt bei mir sowohl mit einem Arduino Nano wie auch einem Wemos D1 Mini Board. Andere habe ich auf die Schnelle nicht probiert.

      Die meisten Anbieter geben als Versorgungsspannung 5 Volt an, einige aber auch 3 – 5.5 Volt, z.B. hier:
      https://www.ebay.de/itm/264084701683?
      Allerdings sehen alle Module eigentlich baugleich aus.
      Geht es bei dir denn mit 5 Volt? Falls ja, dann ergänze ich einen Hinweis, dass einige Module wohl 5 Volt benötigen.

  12. Es scheint, dass diese wasserdichte Variante des US Gebers eine deutlich schlechtere Empfindlichkeit hat. Habe nach ein wenig experimentieren mit einem vorgesetzten Papiertrichter welcher die Empfindlickeit durch die grössere Empfangsfläche erhöht praktisch keine Störungen mehr. Schlussendlich habe ich auf dem 3D-Drucker ein Parabol mit Oeffnung ca. 60mm Durchmesser gedruckt. -> Absolut perfekt und störungslos :-))

    1. Hi, könntest du bitte die 3D Datei ggf zur Verfügung stellen. Habe das Ding in einer Zisterne hängen und der Fangkorb scheint immer mal wieder ein paar mm in das „Messfeld“ zu rutschen. Vielleicht habe ich ggf damit mehr glück. Danke und VG dbase

  13. Hallo,

    ich habe heute eine Anfrage bezüglich des Datenblattes des HC-SR04 an KT-Elektronic versandt und darin Ihre Bemerkung wegen des HIGH-Pegels des Echo-PIN erwähnt.
    Meiner Meinung nach ist die Beschreibung des Single Shot Modus falsch, der Echo-PIN geht mit dem Beginn des Ultraschallsignals auf HIGH. Sieht man im Bild des Oszilloskops, der Abstand zwischen

    Trigger -> LOW, Echo -> High

    ist lediglich 250µs. Damit hat der Echo-Pin auch die korrekte Laufzeit.

    Kann Ihnen gerne die komplette Mail zukommen lassen.

    Mit freundlichen Grüßen

    Henry Winter

    1. Hallo, danke. Ich wusste nur irgendetwas kann nicht stimmen, aber nicht was.

      Die Beschreibung im Datenblatt ist demnach falsch, da dort steht, dass der Echo Pin nach dem 200µs auf HIGH geht:

      Das Modul sendet darauf nach ca. 250µs ein 40 kHz Burst-Signal für die Dauer von 200µs. Danach geht der Ausgang (Echo, Pin 3) sofort auf H-Pegel und das Modul wartet auf den Empfang des Echos. Wird dieses detektiert fällt der Ausgang auf L-Pegel.

      Und ja, die Antwort von KT- Elektronik würde ich gerne haben: Wolfgang.ewald@wolles-elektronikkiste.de. Danke im Voraus!
      VG , Wolfgang Ewald

    2. Hallo Herr Winter,

      ich habe es jetzt noch einmal selbst nachgemessen. Vielleicht gibt es unterschiedliche Module, aber bei denen, die ich habe, geht das Echo Signal erst ca. 450 µs nach dem Start des Trigger Signals auf HIGH. Das wäre dann nach den 200 µs, die der HC-SR04 braucht, um das Signal zu starten, plus die 250 µs Signallänge. Das ist auf dem Screenshot meines Oszilloskops deutlich erkennbar. Das gelbe Signal ist der Trigger, den ich auf 20 µs Länge eingestellt habe. Das blaue Signal ist der Echo Pin. Wenn sie das Bild „rechtsklicken“ und in einem separaten Tab öffnen ist das gut erkennbar.
      Vielleicht bleibt der Echo Pin nach Beginn des Echo Pins einfach 250 µs länger high? Oder vielleicht wird doch auf das Ende des Echo-Signals gewartet? Vielleicht gibt es unterschiedliche Module, die es unterschiedlich machen? Eigentlich auch egal – denn es funktioniert!

      VG, Wolfgang Ewald

      Trigger vs Echo Signal

    3. Hallo Herr Winter,

      Würden Sie wir die Email ebenfalls zukommen lassen? : sara.krause100@yahoo.de

      Für mich ist das nicht verständlich warum nicht direkt bei Pulsausgang angefangen wird zu messen. Sondern eben erst wenn die 200 us für den Ultraschall-Burst durch sind. Aber es scheint zur jeweiligen Distanz zu passen. Das finde ich physikalisch überhaupt nicht logisch.

      Vielen Dank!

      1. Leider habe ich die E-Mail bisher auch nicht bekommen, sonst würde ich sie weiterleiten. Und ja, merkwürdig, aber meine Messung war eindeutig.
        Wie zuvor erwähnt, vielleicht wird die Verzögerung am Ende „draufgeschlagen“, sprich der Echo Pin bleibt länger high.

    4. Auch wenn eure Diskussion schon über ein Jahr her ist, würde mich eine Antwort auf die Mail interessieren. Sofern es denn jemals eine gab. Jedoch muss ich euch korrigieren, wenn ich euch nicht falsch verstanden habe. Im Datenblatt beträgt die Zeit zwischen Trigger -> LOW und Echo -> HIGH die angegebenen 450µs.

      t = 2,25 Div * 200µs = 450µs

      Wie kommt ihr also auf 250µs?

      1. Hab bisher auch nichts bekommen. Und wie oben erwähnt, ergeben die Messungen 450 µs. Ich habe bisher nichts abweichendes gesehen.

  14. Ich würde dies gerne mit einem JSN-SR04 an einem Raspi ausprobieren.
    Läuft dies auch dort?

    1. Hallo, du kannst den JSN-SR04T auch mit einem Raspberry Pi ansteuern. Allerdings verwendet man normalerweise Python für den Raspberry Pi, d.h. meine Beispiele werden nicht funktionieren. Man kann zwar auch C++ Compiler für den Raspberry Pi bekommen, aber ich würde dazu raten bei Python zu bleiben. Es gibt vieles im Netz. Zu beachten ist, dass die Eingänge des Raspberry Pi nicht 5V tolerant sind, d.h. du müsstest einen Spannungsteiler zwischen Echo Pin und Raspi- GPIO setzen.

  15. Herlichen Dank – tolle Anleitung. Kannst du einen konkreten Arduino empfehlen, wenn man das ganze nochn um Zigbee erweitern will? Ich bin erschlagen was die möglichen Teile und Varianten angeht.
    Danke!

    1. Hallo Stefan, mit Zigbee habe ich bisher nichts gemacht. Wäre vielleicht mal wieder eine Idee….
      Eine kurze Recherche über XBee und Zigbee sagt mir, dass man wohl mit einem Arduino UNO und einem Shield arbeiten kann:

      https://www.amazon.de/Wireless-Modul-Erweiterungskarte-RF-Modul-Erweiterungskarte-Duemilanove-Mega1280-Mega2560/dp/B07WYH2W46

      Ob das die ideale Lösung ist, kann ich dir nicht sagen. Für XBee scheint man etwas flexibler zu sein, da gibt es mehr Module. Aber du merkst vielleicht schon – so richtig fundiert kann ich darüber nichts sagen.

  16. Eigentlich sollte das Messergebnis auch ohne Mikroprozessor als PWM-Signal am Ausgang messbar und auf dem Oszi erkennbar sein. Ich habe den Sensor mit einem Signalgenerator getriggert, 5V Rechteck, 40Hz, 25mikroSekunden, aber am Ausgang passiert nichts, kein Signal unabhängig vom Abstand.
    Hat jemand einen Tipp für mich?

    1. Interssanter Versuch. Theoretisch müsste das funktionieren, denn 50 Messungen kann der Sensor ja eigentlich, wenn man den Angaben der Produktinformationen Glauben schenken kann. Ich würde vielleicht trotzdem nochmal ein bisschen heruntergehen mit der Frequenz. Mehr fällt mir im Moment nicht ein.

  17. Hallo Wolfgang,
    ein Sketch hat auf anhieb funktioniert, besten Dank!
    Mal eine Frage: Ist der JSN-SR04T tatsächlich wasserdicht (Also kann man ihn untertauchen?)
    Funktioniert das ganze auch im Wasser?

    Lg, Michael

    1. Hallo Michael, eine interessante Frage. Da musste ich selbst mal auf die Suche gehen. Selber ausprobiert habe ich es nicht, aber das Teil ist wohl tatsächlich wasserdicht. Trotzdem funktioniert es unter Wasser wohl nicht, selbst wenn man die Schallgeschwindigkeit anpasst. Hier hat eine Tüftlerin dazu Experimente gemacht:

      https://www.youtube.com/watch?v=TiVjCRc9-60

      VG, Wolfgang

  18. Hallo Wolfgang,
    ich versuche deinen sketch auf einem ESP8266MOD 12-F zum Laufen zu bekommen.
    Aber irgendein watchdog schein was dagegen zu haben?
    wdt reset
    load 0x4010f000, len 3584, room 16
    tail 0

    Irgendeine Idee? Spannungsversorgung kommt noch von USB vom Rechner und der JSN SR04T hängt noch nicht dran…

    1. Der Watchodog „beißt“, wenn der ESP8266 „denkt“, dass das Programm hängen geblieben ist. Nach ca. 3 s startet er dann neu. Das passiert z.B. bei leeren while Schleifen oder wenn du in der Hauptschleife loop
      permanent durch eine if-Abfrage gehst, die Bedingung aber nicht erfüllt wird und auch keine wirkliche else – Aktion erfolgt.
      Mit ESP.wdtDisable(); im setup lässt sich der Software Watchdog abschalten. Dann wird der Hardware Watchdog aktiviert und der schlägt alle 8 s zu. Um den Watchdog zufrieden zu halten, muss man ihn füttern. Passenderweise heißt die Funktion ESP.wdtFeed();. Wenn du sicherstellst, dass diese Funktion spätestens alle 3 bzw. 8 s aufgerufen wird, sollte kein Neustart mehr stattfinden.

      1. Danke für den Hinweis. Mein Fehler war dass ich


        int triggerPin = 6;
        int echoPin = 7;

        anstatt


        int triggerPin = D6;
        int echoPin = D7;

        geschrieben hatte. Mit dem D vornedran funktionierts…

  19. Ich habe ein paar Versuche mit dem Sensor unternommen und folgende Feststellungen gemacht:
    De Sensor funktioniert prima bei 3.3V und funktioniert auch prima bei tiefen Temperaturen. Aber nicht beides!
    Ich musste jetzt auf ein anderes Modell (A01NYUB) ausweichen, welches wirklich für 3.3V spezifiziert ist. Hoffentlich klappt alles wie es soll.

    1. Interessante Feststellung. Davon hatte ich noch nicht gehört. Wie tief waren die Temperaturen? War das bei Batteriebetrieb? Vielleicht machen auch die Batterien schlapp?

      Danke auf jeden Fall für den Hinweis!

      1. Temperaturen waren so zwischen 5 und 0 °C. Ja, es war Batteriebetrieb mit einer LiPo, aber noch mit Spannungsregler dazwischen. Da der ESP32 und Der RFM95 keine Probleme hatten, schliesse ich schlappe Batterien aus. Das Verhalten war auch reproduzierbar: raus, nach einiger Zeit Probleme, wieder rein, geht usw.
        Kann ein Einzelfall gewesen sein, ich könnte mir vorstellen, dass andere Exemplare auch ohne Probleme funktionieren. Aber ich dachte, ich schreibe es mal, falls jemand ähnliche Effekte hat, sieht er, dass er nicht der einzige ist.

  20. Hallo Wolfgang,

    vielen Dank für die tollen Hilfen. Ich habe schon viele praktische Tipps mit grossem Hintergrundwissen in Deiner Elektronikkiste gefunden. So wie hier mit der unterschiedlichen Schallgeschwindigkei.
    Nun meine Frage. Eignen sich diese Sensoren zur Windgeschwindigkeitsmessung? Wie wäre ein einfacher praktischer Aufbau zu realisieren?

    Vielen Dank!

    1. Hallo Sven,

      ich denke mal „laut“: die Schallgeschwindigkeit hängt zwar von der Windgeschwindigkeit ab. Jetzt könnte man auf den Gedanken kommen einen festen Abstand zu nehmen und die Unterschiede in der Zeit zu messen, die der Schall braucht – funktioniert nur nicht so ohne weiteres, da der Schall ja hin und zurück muss. Theoretisch könnte man zwei Ultraschallmesser gegenüber aufstellen und löst sie gleichzeitig aus. Allerdings müsste man das ganze System irgendwie nach dem Wind ausrichten. Also mir fällt da keine einfache Lösung ein. Da würde ich eher auf die klassischen, rotierenden Windmesser setzen. Wenn man begabter Bastler ist, dann kann so etwas auch selbst bauen.

      Vielleicht fällt ja jemandem anderen noch etwas ein?

      VG, Wolfgang

  21. Hallo Wolfgang, ich finde Deine Seite sehr informative und sachlich, sehr gut.
    Ich bin dabei ein Followme-Projekt für meinen Golftrolley zu realisieren und versuche einige Möglichkeiten zur Realisierung. Dabei bin ich auf den SR04T gestossen und dachte wenn ich zwei Sensoren benutze, so könnten diese die Richtung eines zu verfolgenden Objekts delektieren und entsprechend über einen Microcontroller nachregeln. Ich hätte gern von Dir als Fachmann eine Meinung dazu, ob das aus Deiner Sicht mit dem SR04T realisierbar ist.

    1. Hallo Hans-Josef,

      erstmal natürlich danke für das Feedback! Prinzipiell lässt sich natürlich mit zwei Sendern eine x,y Positionsbestimmung realisieren und damit auch eine zweidimensionale Bewegung verfolgen. Das Ganze funktioniert natürlich nur dann, wenn sich das Objekt in beiden „Erfassungskegeln“ gleichzeitig befindet. Die genaueste Messung hat man sicherlich, wenn die Sender 90° zueinander stehen, aber dafür die geringste Überschneidung der Erfassungskegel. Außerdem werden 90° bei Deinem Projekt wahrscheinlich schwer zu realisieren sein. Aber ich denke schon, dass die SR04Ts zumindest ein ordentliches Stück auseinander stehen müssen, um die Richtung einigermaßen verlässlich zu messen bzw. zu berechnen. Dann solltest Du noch darauf achten, dass die SR04Ts nicht gleichzeitig, sondern kurz hintereinander messen, damit sie sich nicht gegenseitig stören. Und die SR04Ts sollten auch nicht zu tief angebracht werden, damit nicht auf dem Boden liegende Dinge reflektieren. Wahrscheinlich musst Du Plausibilitätsprüfungen mit einbauen, um solche Messwerte auszusortieren. Und das Ganze wird fehleranfällig, wenn irgendwelche anderen Dinge in den Erfassungsbereich kommen. Also optimal wahrscheinlich nur auf freier Fläche. Interessantes Projekt. Probieren geht über studieren! Würde mich interessieren, was bei herausgekommen ist. Viel Erfolg!

      VG, Wolfgang

      1. Hallo Wolfgang, danke für Deine Hinweise und evtl. Probleme die mit den Sensoren auftreten können.
        Ich werde das Ganze einmal ausprobieren und die Kosten halten sich auch im Rahmen,
        falls es nicht realisierbar ist. Ich werde Dir dann Bericht erstatten.
        Bis dahin, bleib gesund.

  22. Hallo,
    Ich habe folgendes Problem.
    Ich möchte eine Anfahrtshilfe für für ein Tor fertigen.
    Bis jetzt funktioniert der sensor wenn ich auf die Wand halte und den Abstand ändere. Genutzt wird New Ping. Bei bestimmten Abstand leuchten die Leds, Grün noch platz, gelb vorsicht und rot stopp.
    Wenn nun in den jeweiligen gemessenen Abstand, etwas dazwischen läuft, wird mir eine 0, solange es vom JSN-SR04t erfasst wird, ausgegeben und die Led geht aus.
    Was kann man da machen?

    1. Hallo, mit der New Ping Bibliothek habe ich noch nicht gearbeitet, deswegen weiß ich nicht, welche Einstellmöglichkeiten es dort gibt. Was ich festgestellt habe, ist dass der JSN-SR04T auch so gerne mal eine „0“ zwischendurch liefert und dass man das verbessern kann, indem man die Triggerzeit erhöht, z.B. auf 20 ms. Vielleicht hilft das ja auch in diesem Fall. Ansonsten könntest du die Nullereignisse im Programm einfach gesondert behandeln.

  23. Hi,

    ist es eigentlich möglich die LED auf der Platine des JSN-SR04T abzuschalten bzw. zu entfernen. Ich denke diese braucht viel Strom.

    EvilPingu

    1. Hallo, das hat hat mich so interessiert, dass ich es gerade mal ausprobiert habe. Abschalten geht meines Wissens nicht, ich habe die LED herausgebaut (eine vornehme Umschreibung für: ich habe sie einfach heruntergekratzt). Mit LED hat das Modul 7,3 mA gezogen, ohne die LED 4,2 mA. Also zieht die LED gute 3mA. Für ein Batterieprojekt schon eine ordentliche Einsparung. Wenn du noch mehr Strom sparen möchtest, dann würde ich das Modul über einen Transistor nur bei Bedarf einschalten. VG, Wolfgang

  24. Hallo Udo, ein sehr praktisches Problem. Vor Ort kann man das natürlich besser überprüfen und herumprobieren. Wenn es auch ohne den Blindstopfen nicht funktionieren würde, dann würde ich sagen, dass die Seitenwände des Abflussrohres reflektieren. Inwiefern der Blindstopfen das Verhalten beeinflussen kann ist mir nicht klar. Vielleicht hat ein anderer Leser dieses Kommentars eine Idee? Ich denke aber auch nochmal darüber nach.

  25. Hallo Wolfgang,
    grossen Dank für deine gute Beschreibung und die Erklärungen in den Kommentaren.
    Ich bin dabei meine Regentonnen mit US auszumessen und per ESP8266 (D1 mini Pro) den Füllstand an eine HomeMatic Zentrale (CCU3) zu senden. Im Testaufbau klappte das auch prima.
    Aber dann hab ich beim „produktiven“ Einbau Probleme bekommen, die irgendwie am US Sensor hängen:
    Der US Sensor (habe leider einen AJ-SR04M statt des JSN-SR04T-2.0 erwischt) liefert konstant nur 18cm als Distanz zurück. Mein Aufbau ist dabei wie Folgt: Auf die Regentonne habe ich einen passenden Deckel gesetzt, der etwa 8 cm nach oben gewölbt ist. Darauf habe ich ein kurzes Abflussrohr ( Durchmesser 110 mm, Höhe 20 cm) gesetzt und oben darauf einen Blindstopfen (passend zum HTC Abflussrohr). In diesen Blindstopfen habe ich dann mittig ein Loch gebohrt und den US Sensor darin eingesetzt. Das Rohr musste ich einbauen, da der minimale Erfassungsabstand des Sensor bekanntlich 25 cm beträgt. Für den Aufsatz auf die Regentonnen habe ich darauf geachtet, dass keine Widerstände in Form von Schrauben, Leitungen o.ä. in das Rohr hineinragen und störende Reflexionen erzeugen.
    Wegen der Fehlerwerte habe ich dann für weitere Tests nur den Blindstopfen genutzt und versucht eine Abstandsmessung per Hand oder Zeitung hin zu bekommen. Ergebnis: keine Änderung – es bleibt bei den angezeigten 18cm.
    Komischerweiser liefert der US Sensor aber wieder gute Werte, wenn ich ihn aus dem Blindstopfen heraus nehme. Also: Eingebaut = Mist, ausgebaut = OK.
    Ach ja, der Betriebsmodus ist der, ganz ohne Widerstand.
    Zum Vergleich habe ich dann noch einen normalen HC-SR04 in den Blindstopfen eingebaut. Damit läuft alles prima. Nur ist das halt nicht Wasserfest !
    Hast du eine Erklärung für den Unterschied zwischen eingebaut und ausgebaut ?
    Vielen Dank und viele Grüsse Udo

  26. super Erklärung! Vielen Dank. Was macht der große Schraubverschluss links oben auf dem JSN-SR04T? (Nähe Q2,Q3)

    1. Das ist ein Poti, mit dem man, wenn ich mich recht erinnere, die Reichweite variieren kann. Komisch, hatte ich gar nicht auf dem Schirm.

      1. Hallo, meines Wissens ist das kein Poti, sondern eine Spule für die Stabilisierung der Resonanzfrequenz. Die Resonanzfrequenz ist auf maximale Amplitude eingestellt. Eine Änderung der Spule verringert also zunächst die Amplitude und damit die Reichweite. Bei weiterer Verstellung wird der Resonanzkreis zusammenbrechen und die Schaltung generell nicht mehr funktionieren. Also besser Finger davon.

        Ich habe aber ein anderes Problem (deshalb bin ich auch auf diese Seite gestoßen):
        Ich suche für fritzing eine Bibliothek, die dieses Ultrasonic (JSN-SR0T4-2.0) enthält. In Schaltkreiszeichnungen habe ich es schon gesehen, also muss sich da schon jemand die Mühe gemacht haben und das Bauteil in fritzing editiert haben. Aber bisher bin ich leider nicht fündig geworden. Kann mir jemand helfen?

  27. Hallo wäre es eigentlich möglich die Signale zu Filtern, um beispielsweise das erste Echo zu verwerfen?
    Wenn man durch eine direkte Auflage auf einem IBC Tank zum Beispiel messen möchte, ist so etwas realisierbar mit diesem Sensor?

    1. Du meinst, das erste Echo der Außenwand soll weggefiltert werden und dann das zweite Echo des Flüssigkeitsspiegels detektiert werden, richtig? Da gibt es zwei Probleme. 1) Man hat eigentlich keinen Einfluss darauf, was in dem HC-SR04 passiert. Man gibt sein Trigger Signal und bekommt irgendwann das Echo Signal zurück. Außer dem Trigger Pin gibt es keinen Eingang. Wenn das zweite Echo kommt, wird es ignoriert. Da müsstest du schon die Elektronik auf dem Sensor hacken. Oder du baust dir selber einen Sensor. Ich habe die Ultraschallsender und -empfänger schon auch schon mal als lose Ware gesehen (ich glaube bei ebay). Aber dann kommt das nächste Problem 2) Die Reichweite dieser Module ist sowieso schon begrenzt. Das Sendesignal und das reflektierte Signal müssten jeweils durch die IBC Wand. Das reicht nicht von der Stärke her. Mit sehr starken Ultraschallquellen könnte man vielleicht etwas bauen. Zwei saubere Echosignale würde man dann aber auch nicht bekommen. Vielleicht hat ja jemand anderes noch eine Idee!? Zumindest ein interessantes Gedankenspiel.

  28. Hallo Wolfgang,
    coole Seite und gut erklärt. Top.
    Weißt Du ob das JSN-SR04T-2.0 Modul in irgend einer Art und Weise schon Temperaturkompensiert ist? Nach den Bauteilen zu urteilen ist dort kein Sensor verbaut.
    Ich habe einen Temperatursensor auf meinem Prozessorboard und würde den dann zur Temperaturkompensation nutzen. Will nur vermeiden das doppelt kompensiert wird 🙂
    Ich hatte das JSN Modul auch erst im Modus 3 betrieben, habe aber auch das sehr oft Fehlmessungen erhalten. Das hat sich sogar so geäußert das gewisse Abstände gar nicht gemessen werden konnten. Z.B. 1,5m ohne Probleme. 1,4m überhaupt nicht und 1,2m hat dann wieder funktioniert. War total komisch.
    Dann habe ich auch die Erfahrung gemacht das ich nach Abbildung in einem Shop ein JSN-SR04T Modul bestellt hatte, weil das angeblich besser funktioniert, habe dann aber auch die Version 2 bekommen.
    Daraufhin habe ich jetzt die Version 2 im Modus 1 laufen und muss sagen das es besser ist. Manchmal allerdings bleibt die Echo-Leitung einfach auf LOW. Wenn man dann eine zweite Messung startet funktioniert es wieder. Als würde das Modul den Trigger nicht mitbekommen.

    1. Hallo Michal, mir ist nicht bekannt, dass das Modul temperaturkompensiert ist. Zu dem anderen Punkt: wenn das Modul den Trigger sporadisch nicht mitbekommt, dann würde ich probieren, das Trigger Signal etwas länger high zu lassen. Ansonsten würde ich auch einfach nur mehrfach messen und Sinnlos-Werte aussortieren.

  29. Hallo und vielen Dank für den tollen Beitrag 🙂 Ich habe den JSN-SR04T 2.0 in einer Zisterne verbaut und den Trigger Pin von 10 auf 20 Mikrosekunden hochgesetzt. Angeschlossen an einen ESP8266 (D1 Mini). Das funktioniert soweit gut. Allerdings bekomme ich immer wieder mal total unsinnige Messungen. Teilweise läuft das hintereinander mit z.B. 30x 59cm (korrekt) und dann auf einmal 42cm und ein anderes mal 90cm.

    Ich hab schon versucht das durch mehrere Messungen auszugleichen. 20 Messungen mit jeweils 1,5 Sekunden Abstand und das ganze in ein Array geschrieben. In zwei Schleifen laufe ich dann durch die ermittleten Werte und nehme schließlich den, der am häufigsten gemessen wurde. Trotzdem gibt es immer noch einzelne Ausreisser. Ich würde versuchen den Wert des Trigger Pins noch höher zu setzen. Irgendwelche Ideen oder Vorschläge welche Werte Sinn machen könnten?

    1. Hallo Jörg, ich habe leider keine Lösung für dich, habe aber in Zusammenhang mit dem HC-SR501 Bewegungsmelder von ähnlichen Problemen gehört, wenn dieser mit dem ESP8266 betrieben wird. Bin mir nicht sicher, ob das zusammenhängt, klingt aber so. Beim HC-SR501 wurden dann die verschiedensten Sachen vorgeschlagen wie Widerstände in die Signalleitung einfügen oder die Stromversorgung stabilisieren, aber ich hatte nirgendwo die eine Lösung gesehen auf die sich dann alle geeinigt haben. Ich muss mich dem Thema mal widmen – verspreche aber lieber nichts.

        1. Richtig cool an dem AJ-SR04M ist übrigens, dass er, im richtigen Modus betrieben, nur sehr wenig Strom braucht, wenn er gerade nicht benutzt wird.

  30. Hallo, auch ich sage Danke für den Beitrag. Ich habe hier einen JSN-SR04T 2.0 vor mir liegen und hatte ihn bereits mit einem Arduino Mini Pro in FHEM getestet. Entfernungen hatte ich bis 340 cm gemessen. Ich möchte das Gerät jedoch auch in meine Zisterne bringen und frage mich noch, ob man die schiefe Ebene am Sensor-Kopf beim Einbau ausgleichen muss damit man senkrecht nach unten schallt?
    LG

    1. Hi, zuerst wusste ich gar nicht, was du mit der schiefen Ebene meinst – dann habe ich mir den Kopf nochmal angeschaut. War mir vorher nicht aufgefallen, dass da so eine Schräge eingefügt ist. Ob der richtige Abstrahlwinkel derjenige ist, der senkrecht zu der schiefen Ebene ist oder ob es einfach nur derjenige senkrecht zum Kopf ist, weiß ich nicht. Vielleicht probierst du es einfach mal außerhalb der Zisterne mit bekannten Abständen aus?

  31. Hallo,
    Ich habe auch das JSN-SR04T-Modul (ob 2.0 oder nicht, weiß ich nicht – steht nix drauf) und hab ein kleines Problem. Vielleicht könnt ihr mir da weiterhelfen.
    Wenn ich das Kabel anschließe, funktioniert der Sensor einwandfrei. Ich brauch aber zw. Sensor und Elektronik 7m Kabel. D.h. ich habe ein 6m langes CAT6 angelötet und jetzt stimmen die Werte überhaupt nicht mehr. Entweder um die 3m oder 0,2m werden gemessen (bei 1,70m Soll). Dachte schon, ich hab das Ding geschrottet, aber wenn ich die Verlängerung wieder weg mache, passts wieder.
    Wisst ihr da weiter? Danke!

    lg
    Andy

    1. Hallo Andy, ich denke ein CAT6 Kabel ist schon mal eine gute Wahl. Ich gehe mal auch davon aus, dass du die Lötstellen überprüft hast. Dann könnte es im Prinzip sein, dass das Trigger Signal zum bzw. das Echo Signal vom Modul zu schwach ist. Was du ausprobieren könntest, ist eine externe Spannungsquelle für die Übertragung zu nehmen (vielleicht geht auch der 5V Ausgang des Arduino) und diese Leitungen mit einem Transistor zu schalten. Zumindest für das Trigger Signal sollte das einfach sein. Auf der Echo Seite ist es schwieriger, da das ja nur Sinn macht, wenn man den Transistor für diese Leitung nah am am eigentlichen Ultraschallsender/-empfänger platziert. Vielleicht hat jemand anderes noch eine bessere Idee?

      1. OK, danke für die Antwort. Hmmm… Trigger- und Echo-Signal sollten eigentlich passen… Die Auswertelektronik hab ich ja eh nahe am Arduino/Raspi. Zwischen Elektronik und Sensor hab ich das lange Kabel. Und da sind ja nur 2 Pole – ein Schirm und eine Leitung mitten drinnen.

        1. Da hab ich ein wenig Blödsinn geschrieben…. Aber dann ist es ja noch einfacher. Kannst du die eine Leitung zwischen Modul und dem „Kopf“ mal über einen Transistor schalten? Obwohl – bei näherem Nachdenen geht das auch nicht so ganz einfach, da die Kommunikation in beide Richtungen erfolgen können muss. Der Kopf ist ja Sender und Empfänger.

          1. Ich machs jetzt einfach so, dass ich Sensor und Auswerteelektronik in ein dichtes Gehäuse packe und das ganze in die Zisterne geben. Dann geh ich mit dem CAT6 Kabel von der Box zum Raspi und übertrage halt die 4 Leitungen.. das geht mal im Laborbetrieb…. 😉
            Danke für deine Mühe!

            lg
            Andy

  32. Hallo und herzlichen Dank für dne tollen Artikel.
    Ich möchte einen JSN-SR04T-2.0 zum Auslesen einer Zisterne nutzen. Es scheint im Mode 1 zu funtionieren, aber ich bekomme immer der gleichen Rückgabewert (Distanz ~22cm), egal wie weit der Sensor von der Wasseroberfläche entfernt ist? Woran kann das liegen?

    1. Hallo Jan, Fehlersuche ist aus der Ferne natürlich noch schwieriger als sowieso schon. Bekommst du diese Werte auch außerhalb der Zisterne? Ich gehe davon aus, du verwendest den ersten Sketch dieses Beitrages. Hast du genau die richtigen Pins für Echo und Trigger genommen? Leitungen überprüft? Mal die Delaytime in Zeile 13 etwas erhöht? Wenn du den Sketch angepasst hast, dann kannst du ihn per email schicken und ich schaue ihn mir mal an.

      1. Hallo Wolfgang,
        der Sensor mit dem ich gearbeitet habe, hatte einen Schuß. Hab’s nochmal mit einem anderen, baugleichen probiert. Jetzt liefert das System plausible Ergebnisse, die auch je nach Wasserstand der Zisterne variieren. Der erste Sensor geht als defekt wieder zurück an den Händler….
        Trotzdem Danke für Deinen Rat!
        Grüße, Jan

  33. Hallo und herzlichen Dank!
    Ich habe gerade so ein Exemplar (JSN-SR04T-2.0, Amazon 12€) in Betrieb genommen. Soweit schein es zu funktionieren (Mode 1). Mit deinem Code habe ich allerdings sporadische Aussetzer (Rückgabewert 0). Was noch aufgefallen ist, die Entfernungsmessung geht nicht über ca. 200cm hinaus (z.B. vom Fußboden zur Decke), es kommen nur unplausible Werte heraus. 600cm max. ist wohl ein Phantasiewert 🙂

    1. Hi Andreas, danke für den Dank!
      Die 6m Abstand sind tatsächlich Phantasie. Hatte ich aber auch geschrieben. Das hängt vor allem von der Größe des Objektes, der Oberflächenstruktur und dem Einfallswinkel ab. Ich würde die Grenze unter Idealbedingungen etwas höher als 2m ansetzen, aber bei maximal 4 ist Schluss.
      Die sporadischen Null-Rückgaben hatte ich behandelt:
      „Ihr könnt denselben Arduino Sketch wie für den HC-SR04 verwenden, jedoch ggf. mit einer kleinen Änderung. Bei jeder fünften bis zehnten Messung erhielt ich als Ergebnis eine Null. Habt ihr dasselbe Problem, dann erhöht die „HIGH-Zeit“ am Trigger Pin von 10 auf 20 Mikrosekunden (Zeile 18 in HC_SR04_Proximity.ino). Mit dieser Maßnahme trat der Fehler bei mir nicht mehr auf.“
      Vielleicht versuchst du das mal und gehst ggf. noch höher mit dem Triggersignal, falls es nicht funktionieren sollte.

  34. Herzlichen Dank für Deine tolle Anleitung! Absolut exzellent!
    Habe gerade ein JSN-SR04T-2.0 wie von Dir beschrieben getestet. Hat auf Anhieb funktioniert :-))

Schreibe einen Kommentar

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