Alternative für HC-SR04

Hallo,
ich suche eine alternative für den HC-SR04 in Wasserdicht. Problem, die meisten haben einen Abstand ab 20cm, bei mir habe ich ca. 6-7cm.
Habe jetzt den gefunden:
https://german.alibaba.com/product-detail/waterproof-ultrasonic-level-sensor-for-bin-and-tank-level-detection-ultrasonic-distance-sensor-62401445354.html?spm=a2700.wholesale.0.0.f16b7c044821XZ

Der passt genau für meine Anwendung vom Abstand usw.

Jetzt weiß ich nur nicht genau, welcher der Richtige ist. Es gibt den ja in 4 Möglichen Varianten, die 2 mit Auto sind ja falsch, da es ja von Arduino gestartet und ausgewertet wird.
Jetzt bleiben noch die PWM ouput Version und die UART Controlled Output.
Welche passt jetzt richtig? Möchte das gleiche System wie ich jetzt am laufen haben weiter verwenden, nur halt mit dem Wasserdichtensensor, wenn es möglich ist!

Die Temperatur wäre egal, da es eh über einen Sensor aktuell mit berechnet wird

Wenn ich es richtig gegoogelt habe hat der HC-SR04 TTL, was wohl UART entspricht, richtig?

TTL heißt "Transistor Transistor Logic" und bezieht sich nicht direkt auf UART.
Den HC-SR04 kannst du nicht mittels UART ansteuern.
Wenn deine gesuchten Sensoren per UART gesteuert werden, musst du deinen Sketch darauf anpassen.

1 Like

Hello,
eine Alternative könnte der Sharp IR-Distanzsensor sein.

1 Like

Der Sharp geht leider nicht, weil ich bis ca. 180cm messen muss.

Egal, dann muss der Sketch halt geändert werden. Was würdet ihr den nehmen PWM oder UART?

Steckplätze sind alle vorhanden, also daran scheitert es nicht!

Da wäre meine Empfehlung, verwende UART.
Das ist sicher einfacher zu bedienen.

1 Like

Ich denke, es ist eher die PWM, da der Sensor Impulse verwendet, um die Entfernung zu messen und an den Arduino zu senden. Bitte überprüfen Sie dies jedoch, da ich mich möglicherweise irren kann.

1 Like

Habe gerade gesehen, das es auch eine "Switch Output" Version gibt. Wäre das so wie mit Echo und Trigger?

Das wird euch weiter helfen:

Ich habe hier mal was interessantes gefunden:

Der PWM wird so ausgelesen, wie der HC-SR04

Das mit dem PWM-Signal mag auch per pulsein gemacht werden aber die Zahlen müssen angepasst werden. Wenn es für die UART-Variante eine vernüftige Doku gibt halte ich das für die bessere Variante. Man hat dann den Abstand schon als Digitalwert.

Mich würde interessieren wozu die Messung dient. Wasserstandshöhe messen?

Der Link zu Alibaba zeigt keinen direkten kaufen-Button sondern nur Anbieter kontaktieren. In der Preisanzeige steht 7-15 Dollar.
Das hört sich für mich wie Preisanfrage zur Großmengenabnahme an.
Hast du schon mal wirklich was bei Alibaba bestellt?

vgs

Ja, es soll für die Wasserstandshöhe sein.

Und ja habe schon bei Alibaba bestellt. :wink:

Doku gibt es natürlich nicht...

So jetzt habe ich mit der Typenbezeichnung gegoogelt und den Sensor bei DFRobot gefunden.
https://wiki.dfrobot.com/A02YYUW%20Waterproof%20Ultrasonic%20Sensor%20SKU:%20SEN0311#target_5

Da wird auch erklärt wie die UART-Ausgabe funktioniert und es gibt einen Beispielcode
Die Berechnung der gemessenen Entfernung ist

Distance= Data_H*256+ Data_L;

oder man macht es wie im Beispielcode das High-byte 8 bits nach link schieben

distance=(data[1]<<8)+data[2];

und so ähnliche hatte ich mir das schon gedacht. (lowbyte / highbyte)
vgs

Wie hast du bestellt? Ich sehe da nur eine Schaltfläche "Anbieter kontaktieren"

muss man sich bei Alibaba mit "Sesam öffne dich" anmelden? ;-))
vgs

Hier geht es:
https://german.alibaba.com/product-detail/5V-DC-UART-PWM-output-digital-60842395407.html

Würdest du die UART controlled oder UART automatic nehmen??? Wenn ich das richtig verstehe, ist die controlled version die richtig, weil es dann über den Arduino gesteuert wird, richtig?

Da kannst du auch einen Bestellen!

UART control oder automatic.
Das habe ich in der Doku noch bicht nachgelesen.

Automatic bedeutet der Sensor sendet von alleine in regelmäßigen Abständen etwas. Da ist mein erster Gedanke:
das ballert den Empfangspuffer voll. Da weiß ich noch nicht wie es der Software serial library damit geht.

Hast du denn einen Arduino uno oder Mega oser noch einen anderen Microcontroller?
vgs

Genau daran habe ich auch gedacht. Also ist der Controlled besser. Damit der Arduino es auslöst

Ich habe beides zum testen. Im Dauerbetrieb habe ich den Mega mit Netzwerkshield am laufen, wo der Sensor mit laufen soll :sunglasses:

PS.: Habe jetzt die UART Controlled Version bestellt...

Rein informativ und für mich zum mitschreiben:

Sind dann mal round 20,50 Euro.

  • 19% EinfuhrSteuer
  • Stress mit dem Abwickler (Ha: Deutsche Post und UPS sind die absolut frechesten, was die Kosten angeht)
    Das Ding wird Dich letztendlich vermutlich irgendwas um die 33-38 Euro kosten ...

Na dann...

1 Like

ich weiß, aber man bekommt es ja nicht überall und das Problem ist ja, das ich den mit dem passenden min. Abstand haben muss.

Hier kannst du den problemlos bestellen, bereits mit Mwst und Abwicklung inklusive, nach dem neuen Gesetz:

1 Like

So, ich habe jetzt meine neuen Ultraschallsensoren da...angeschlossen und den test Sketch verwendet, aber bekomme nur ERROR als Ausgabe:

14:43:33.504 -> ERROR
14:43:33.504 -> ERROR
14:43:33.504 -> ERROR
14:43:33.504 -> ERROR
14:43:33.504 -> ERROR
14:43:33.504 -> ERROR
14:43:33.504 -> ERROR
14:43:33.504 -> ERROR
14:43:33.504 -> ERROR
14:43:33.504 -> ERROR

Der Sketch sieht so aus:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(11, 10); // RX, TX
unsigned char data[4] = {};
float distance;

void setup()
{
  Serial.begin(57600);
  mySerial.begin(9600);
}

void loop()
{
  do
  {
    for (int i = 0; i < 4; i++)
    {
      data[i] = mySerial.read();
    }
  }
  while (mySerial.read() == 0xff);

  mySerial.flush();

  if (data[0] == 0xff)
  {
    int sum;
    sum = (data[0] + data[1] + data[2]) & 0x00FF;
    if (sum == data[3])
    {
      distance = (data[1] << 8) + data[2];
      if (distance > 30)
      {
        Serial.print("distance=");
        Serial.print(distance / 10);
        Serial.println("cm");
      }
      else
      {
        Serial.println("Below the lower limit");
      }
    }
    else Serial.println("ERROR");
  }
  delay(100);
}

Anschluss ist so:
Rote Ader: 5V am Arduino
Schwarze Ader: GND am Arduino
Gelbe Ader: RX an PIN 11
Weiße Ader: TX am PIN 10

Verwendet wird ein UNO V3

Dann schreib doch mal in diesem else - Zweig, was du tatsächlich gelesen hast.
Und versuche, den Unterschied zwischen 0xFF und -1 (gar nichts gelesen) herauszuarbeiten.
Oder vergleiche das Empfangene mit dem Erwarteten.

1 Like

Ich tippe, du hast RX und TX zum Sensor vertauscht.
Sensor RX muss auf Uno TX und Sensor TX auf Uno RX.

1 Like