UART einlesen und verarbeiten (Ultraschallsensor)

Hallo zusammen,
ich würde gerne mittels eines Ultraschallsensors (DS1603L , [Sensor])
(https://de.aliexpress.com/item/4000297176980.html?spm=a2g0o.productlist.0.0.4eb1379e1vtPGY&algo_pvid=803a9050-c5f0-49ce-bfe9-b480608457c0&algo_exp_id=803a9050-c5f0-49ce-bfe9-b480608457c0-0&pdp_ext_f={"sku_id"%3A"10000001232600448"})) die UART Signale des Sensors abgreifen und im Anschluss weiter verarbeiten. Ziel ist es zum Beispiel eine LED je nach Füllstandshöhe zum leuchten zu bringen.

Der Sensor gibt ein UART Signal aus, dass wie folgt aufgebaut ist.

Frame Header --> Dauerhaft 0xFF
Data_H --> Füllstandshöhe des High Pegels in HEX
Data_L --> Füllstandshöhe des Low Pegels in Hex
Summe --> Setzt sich zusammen aus : (Frame Header + Data_H *Data_L)& oxFF

Ich habe die Signale mittels eines Logic analysers eingelesen und komme auch auf die entsprechenden Werte.

Ich würde gerne die Werte des High und des Low Pegels im Programm speichern und anschließend weiterverarbeiten.

Eventuell kann mi jemand einen Denkanstoß geben.

LG

Philipp

Ihr Beitrag wurde an seinen aktuellen Speicherort verschoben, da er besser geeignet ist.

das man an RX eines Arduino anschließen und dort weiterverarbeiten kann.

1 Like

Beachte aber bitte, dass der angeschlossenen Controller auf der UART meist max. die Spannung verträgt, die er als Betriebsspannung bekommt.

Danke, der wird mit 5V betreiben also sollte das passen.
Den Ground des Sensors habe ich zusätzlich noch mit dem Arduino verbunden, habe gelesen, dass sich der Controller sich sonst zerschießen könnte.

Das mit 5 Volt kommt auf den Controller an. Es gibt auch welche mit 3,3V.
Und GND muss sein, sonst funktioniert es nicht, da die Daten nicht fließen können.

Der UNO hat meines Wissens 5V

Das stimmt, allerdings hatte ich bisher nichts von Uno gelesen.

Welchen Controller würdest du denn empfehlen ?

Das kommt ganz darauf an, was dernoch machen soll.
Aber für den Anfang ist der schon Ok.

ich würde gerne das Sensor UART Signal einlesen und die Daten aus Data_h und Data_l des Signals zwischen speichern. Im Anschluss soll eine if oder besser switch case Abfrage laufen die, den Wert mit einem vor eingestelten Maximalwert vergleicht. Und dementsprechend in 25% Schritten den Inhalt eines Tanks mittels von 4 LEDS anzeigen soll.

Zusätzlich zur Spannungspegel mußt Du noch Baudrate und anzahl Start und Stopbit wissen.Oft wird 1N8 8N1 verwendet (1 start, No parity, 8 datenbit)

Es gibt sogar eine Bibliothek: GitHub - wvmarle/Arduino_DS1603L: Arduino library for the DS1603L ultrasound sensor.

Den Sensor an RX anzuschließen ist nicht die beste Wahl weil dadurch beim UNO die USB-Schnittstelle zum Datenaustausch und Programmierung mit dem PC nicht mehr funktioniert.
Wenn Du das Beispiel in der Bibliothek anschaust wird dort eine Sofrtwareemulation der Schnittstelle auf 2 beliebigen Pins genommen.

Grüße Uwe

1 Like

Das ist ein guter Tip, Danke

Leider steht beim freundlichen Chinesen kein Datenblatt beim Artikel (oder ich habe es übersehen).
@middphi :
Du hast doch so ein schönes Oszi-Bild. Da sieht man die vier Bytes, die da nacheinander angelaufen kommen.
Frage 1: Wiederholt sich das Muster immer wieder?
Frage 2: Wie lang ist eines davon?
Daraus können wir die Baudraute für die serielle Schnittstelle ausrechnen.
Wenn bis zu 38400 kannst Du mit SoftwareSerial auf einem Pin die Bytes einlesen und erstmal auf dem Serial Monitor ausgeben am besten bei verschiedenen bekannten Füllständen
Dann wissen wir mehr.
Ich vermute DATA_H und _L sind High- und Low-Byte eines 16 Bit breiten Meßwerts.


Gruß Walter

Ultrasonic liquid level serial specification English.pdf (215,8 KB)

SERIAL_8N1 = 8 Datenbits, No parity, 1 Stopbit

Ok, da reicht der UNO aus. Solltest du deine Daten weiter schicken wollen, z.B. über WLAN, dann ist ein NodeMCU besser. Da gibt es die als ESP8266 oder ESP32.
Allerdings als Anfänger ist der UNO schon besser geeignet und umsteigen kannst du immer noch.

1 Like

@wno158

Das Muster wiederholt sich ca alle 2 Sekunden und dauert ca 5 ms

Die Baudrate müssten 9600 sein

Na prima, dann hast du ja alles beisammen.
Auf Seite 3 stehen die wesentlichen Informationen für die SW: 9600, 8N1 und das Datenformat inkl. Checksumme.

Dann das Ding an einen Pin hängen (nicht 0 oder 1), Library SoftwareSerial installieren und loslegen. Da gibt es bestimmt ein "Echo"-Beispiel (kann ich gerade nicht prüfen). Der Pin ist dann Rx (Empfang).

Ein erster Test-Sketch wird nicht kompliziert:
Byte lesen.
Wenn 0xFF sind die nächsten beiden Data High und Low und das folgende die Checksumme.

Meßwert = data_h * 256 + data_l.

Ja,

ist sicher nur glücklich formuliert, ich vermute auch
Data_H --> Füllstandshöhe High-Byte (binär)
Data_L --> Füllstandshöhe Low Byte (binär)