HB-UNI-Sen-LEV-US - Ultraschall Füllstandsensor schwankende Werte

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

oreider
Beiträge: 135
Registriert: 28.12.2013, 16:23

HB-UNI-Sen-LEV-US - Ultraschall Füllstandsensor schwankende Werte

Beitrag von oreider » 22.01.2021, 12:32

Hallo zusammen,

ich würde gerne mit dem oben genannten Sensor die Salzmenge meiner Wasserenthärtungsanlage messen.
Hier geht es grundsätzlich nicht um absolute Genauigkeit sondern eher um eine Meldung, wenn ich wieder Salztabletten nachfüllen muss.
Ich habe das ganze mit dem "SODIAL(R) Ultraschall Sensor Entfernungsmessung Modul Sensor US-100" realisiert.
Nun schwankt der Wert doch sehr stark. Mögliche Ursache evtl. der kleine Behälter der gemessen werden soll!? Gibt es hierfür einen Sensor der sich besser eignet? Evtl. hat hier schon jemand von euch Erfahrungswerte bevor ich andere Sensoren teste...
Auf den Bildern seht ihr natürlich nur den Versuchsaufbau... Keine Finale Version.
Schönen Dank
Tom
Dateianhänge
Werte 24h.JPG
IMG_0602.jpg
IMG_0604.jpg
IMG_0605.jpg

FUEL4EP
Beiträge: 306
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 48 Mal
Danksagung erhalten: 34 Mal

Re: HB-UNI-Sen-LEV-US - Ultraschall Füllstandsensor schwankende Werte

Beitrag von FUEL4EP » 22.01.2021, 13:27

Hallo oreider,

versuche mal, Dein verrauschtes Sensorsignal mit einem Kalman-Filter zu filtern.

Beispiele sind z.B. unter

https://github.com/NagarajSMurthy/Kalma ... nic-sensor
https://github.com/VibAruna/Kalman-Filt ... nic-Sensor

zu finden.
Grüße

Ewald

jp112sdl
Beiträge: 8468
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 474 Mal
Danksagung erhalten: 1114 Mal
Kontaktdaten:

Re: HB-UNI-Sen-LEV-US - Ultraschall Füllstandsensor schwankende Werte

Beitrag von jp112sdl » 22.01.2021, 15:09

Hier misst jemand seinen Salzbehälter-Stand über das Gewicht... vielleicht wäre das die bessere Lösung für deine Anwendung:
viewtopic.php?f=76&t=49752&start=10#p634672

Ansonsten - wenn du einen reflektierenden Feststoff misst, kannst du es mit optischer Abstandmessung (ToF Sensor VL53L0X) probieren:
https://github.com/jp112sdl/HB-UNI-Sen-LEV-TOF

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

PN sind deaktiviert!

cmjay
Beiträge: 1390
Registriert: 19.09.2012, 10:53
System: CCU
Wohnort: Jottweedee
Hat sich bedankt: 130 Mal
Danksagung erhalten: 140 Mal

Re: HB-UNI-Sen-LEV-US - Ultraschall Füllstandsensor schwankende Werte

Beitrag von cmjay » 22.01.2021, 17:48

FUEL4EP hat geschrieben:
22.01.2021, 13:27
versuche mal, Dein verrauschtes Sensorsignal mit einem Kalman-Filter zu filtern.
Für den Anwendungsfall und bei dem gezeigten Messwertverlauf braucht man aus meiner Sicht kein solch schweres Geschütz wie einen Kalman-Filter. Ein gleitender Mittelwert mit Ausschlusskriterium "20%-Abweichung vom Mittelwert", um die wenigen Ausreisser einzufangen, sollte völlig ausreichen. Letztendlich geht es doch hier nicht um eine Präzisionsmessung einer stark fluktuierenden Größe sondern nur darum festzustellen, wann sich der Behälter langsam und stetig einem Füllstand nähert, bei dem man mal ans Auffüllen denken sollte.
Es kann leider nicht ganz ausgeschlossen werden, dass ich mich irre.
HmIP muss leider draussen bleiben.
ACHTUNG! Per Portweiterleitung aus dem Internet erreichbare CCU-WebUI ist unsicher! AUCH MIT PASSWORTSCHUTZ! Daher: Portweiterleitung deaktivieren!

FUEL4EP
Beiträge: 306
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 48 Mal
Danksagung erhalten: 34 Mal

Re: HB-UNI-Sen-LEV-US - Ultraschall Füllstandsensor schwankende Werte

Beitrag von FUEL4EP » 22.01.2021, 18:22

Hallo cmjay,

im eindimensionalen Fall ist ein Kalman Filter ist kein schweres Geschütz. Es ist im Gegensatz zu einem gleitenden Mittelwertfilter sehr Speicher schonend. Ein gleitender Mittelwert über N Abtastwerte braucht dagegen N Speicherwerte. Vom Prinzip her ist ein Kalman Filter im eindimensionalen Fall es ein rekursives Filter 1. Ordnung, das ganz einfach ist. Hier aus dem zitierten Codebeispiel https://github.com/VibAruna/Kalman-Filt ... 42_IIC.ino:

Code: Alles auswählen

   //Kalman Filter Algorithm
    float mu_bar = A*pre_mu;
    float sigma_bar = A*pre_sigma*A + R;
    float K = sigma_bar*C/(C*sigma_bar*C + Q);
    float mu = mu_bar + K*(range - C*mu_bar);
    float sigma = (1 - K*C)*sigma_bar;
Dazu braucht man noch ein paar Parameter:

Code: Alles auswählen

//---------------------------------------Parameters Related to the Kalman Filter-----------------------------------------------
int A = 1;
int B = 0;
int C = 1;
int u = 0;
float R = 8*pow(10,-3);
float Q = 8.4535*pow(10,-2);
Das ist alles! Selbst wenn man mit der Schätzung des Kovarianz des Messrauschens R oder des Prozessrauschens Q daneben liegt, ist ein Kalman Filter relativ 'gutmütig'. Probiert es doch einfach mal aus und 'spielt' damit.

Selbst ein mehrdimensionales Kalman Filter passt locker auf einen ATmega1284P.
Grüße

Ewald

stan23
Beiträge: 1473
Registriert: 13.12.2016, 21:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Altmühltal
Hat sich bedankt: 338 Mal
Danksagung erhalten: 181 Mal
Kontaktdaten:

Re: HB-UNI-Sen-LEV-US - Ultraschall Füllstandsensor schwankende Werte

Beitrag von stan23 » 22.01.2021, 18:43

FUEL4EP hat geschrieben:
22.01.2021, 18:22
Es ist im Gegensatz zu einem gleitenden Mittelwertfilter sehr Speicher schonend. Ein gleitender Mittelwert über N Abtastwerte braucht dagegen N Speicherwerte.
Es ist aber nur Datenspeicher-schonend.
Die Codegröße ist wesentlich höher, gerade wenn die CPU keine HW-Division unterstützt und mit nur 8 Bit breiten Registern Float-Werte berechnen soll.

Ohne es zu testen, würde ich sagen dass ein gleitender Mittelwert in der Summe RAM+Code-Größe kleiner ist und schneller gerechnet ist.

Natürlich nimmt man dazu keine runde Dezimalzahl an Werten zur Berechnung des Mittels, sondern eine Zweipotenz die sich durch einen Shift ersetzen lässt.
Viele Grüße
Marco

RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)

cmjay
Beiträge: 1390
Registriert: 19.09.2012, 10:53
System: CCU
Wohnort: Jottweedee
Hat sich bedankt: 130 Mal
Danksagung erhalten: 140 Mal

Re: HB-UNI-Sen-LEV-US - Ultraschall Füllstandsensor schwankende Werte

Beitrag von cmjay » 22.01.2021, 19:00

Hallo Ewald,
mir ging es primär darum, dass ein gleitender Mittelwert im Gegensatz zu einem Kalman-Filter recht intuitiv verständlich und leicht auf der CCU zu implementieren ist (gibt auch Skriptbeispiele im Forum). Über den Ressourcenverbrauch habe ich mir in dem Zusammenhang gar keine Gedanken gemacht. Da hast du ganz offensichtlich ein viel tieferes Verständnis der Materie als ich.

Meine Sorge war, dass der TE (dessen Background in der Messwertanalyse ich natürlich nicht kenne) bei der Konfrontation mit den kryptischen Parametern eines Kalman-Filters akute Panikattacken bekommt und sofort den Griffel fallen lässt. :lol:

Wie auch immer. Unabhängig von der zu wählenden Methode der Filterung bin ich der Meinung, dass die Performance des US-100 mit einer Schwankungsbreite der Messungen von +/- 1.5cm durchaus ausreichend für die Anwendung des TE ist.

EDIT:
Zwischenzeitlich hat Marco ja auch einen Beitrag verfasst und ich stelle fest, dass ich von den Diskutanten derjenige mit der wenigsten Ahnung von der Materie bin. :lol:
Zuletzt geändert von cmjay am 22.01.2021, 19:04, insgesamt 1-mal geändert.
Es kann leider nicht ganz ausgeschlossen werden, dass ich mich irre.
HmIP muss leider draussen bleiben.
ACHTUNG! Per Portweiterleitung aus dem Internet erreichbare CCU-WebUI ist unsicher! AUCH MIT PASSWORTSCHUTZ! Daher: Portweiterleitung deaktivieren!

FUEL4EP
Beiträge: 306
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 48 Mal
Danksagung erhalten: 34 Mal

Re: HB-UNI-Sen-LEV-US - Ultraschall Füllstandsensor schwankende Werte

Beitrag von FUEL4EP » 22.01.2021, 19:01

Hallo stan23,

die paar Zeilen Code von oben brauchen nicht viel Flashspeicher. Für einen gleitenden Mittelwert sind ähnlich viele Programmzeilen vonnöten.
Bei einem 328P basierten Ultraschallsensor 'langweilt' sich die MCU, so dass auch Floatingpoint Operationen problemlos machbar sind.
Wollen wir dagegen über 1024 Messwerte einen gleitenden Mittelwert bilden (1 Messwert = 2 Byte), brauchen wir schon 2kByte RAM!
Ein Kalman Filter braucht nur wenige Bytes. Ich nutze gerade auf einem ATmega1284P ein Kalman Filter (n=4,m=1) mit Double Floatingpoint Arithmetik. Die Rechenzeit ist nur 0.2 Sekunden.

Wir können ja eine 'Challenge' machen: klassisches Mittelwertfilter gegen Kalman Filter :D Möge das bessere Filter gewinnen :D

Hier nochmal eine andere, einfach anwendbare Kalman Filter Bibliothek von Github für den trivialen eindimensionalen Fall:

https://github.com/denyssene/SimpleKalmanFilter

Da muss man keinen 'Angstschweiß' auf die Stirn davon bekommen :D
Grüße

Ewald

stan23
Beiträge: 1473
Registriert: 13.12.2016, 21:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Altmühltal
Hat sich bedankt: 338 Mal
Danksagung erhalten: 181 Mal
Kontaktdaten:

Re: HB-UNI-Sen-LEV-US - Ultraschall Füllstandsensor schwankende Werte

Beitrag von stan23 » 22.01.2021, 19:28

Hallo Ewald,
1024 Messwerte finde ich extrem viel, ich dachte eher an 16 :)

Aber vielleicht habe ich den Anwendungsfall nicht richtig verstanden und bin in mein gewohntes Verhalten zurückgefallen, Resourcen (Laufzeit + Speicher) zu sparen.
Viele Grüße
Marco

RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)

jp112sdl
Beiträge: 8468
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 474 Mal
Danksagung erhalten: 1114 Mal
Kontaktdaten:

Re: HB-UNI-Sen-LEV-US - Ultraschall Füllstandsensor schwankende Werte

Beitrag von jp112sdl » 22.01.2021, 19:30

Bin gespannt, was der TE überhaupt erstmal für ne Meinung zu den Vorschlägen hat :mrgreen:

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

PN sind deaktiviert!

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“