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.

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

  1. 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 :-))

  2. 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.

  3. 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

  4. 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

  5. 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?

  6. 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.

  7. 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.

  8. 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.

  9. 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?

  10. 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

  11. 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.

  12. 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

  13. 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.

Schreibe einen Kommentar

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