Wasserdurchflussanzeige

Moin,

ich habe eine S0 Wasseruhr.
Die wird über einen volkszähler geloggt, dieser pusht die Daten letztendlich auf einen MQTT Broker und den lese ich mit einem ESP8266 aus und bringe den Wert zur Anzeige.

Am ESP8266 kommen ein timestamp in Millisekunden sowie die Durchflussrate in L/h an.
Das habe ich bereits durch 60 geteilt, und erhalte so die Durchflussrate L/min.

So weit, so gut.

Jetzt gibt es aber folgendes Problem:
Die S0 Wasseruhr gibt einen Impuls pro 0,5l aus.
Teilt man die Impulse durch die Zeit, so erhält man die Durchflussrate.
Die Durchflussrate wird übertragen.
Wenn nun kein neuer Impuls kommt, so wird die Durchflussrate nicht mehr aktualisiert und bleibt somit stehen.
Beispiel: Wenn man eine Durchflussrate von 2 L/min hat und schließt den Hahn, dann wird kein neuer Impuls mehr erfasst und die Durchflussrate nicht mehr aktualisiert. In der Anzeige stehen also immer noch 2 L/min. Das ist natürlich falsch.

Wenn man den Hahn ganz langsam zudrehen würde, dann würde die Anzeige auch runter gehen, aber nie auf Null, denn Null wird ja nie gemessen, weil dann kein Impuls mehr kommt.

Frage: Wie kriegt man denn jetzt eine Anzeige hin, die Null Durchflussrate anzeigt, wenn nichts fließt?

Lieben Gruß,
Chris

Ja, wobei so ganz trivial ist das ja nicht.
Wenn man den Wasserhahn nur ein bisschen schließt oder langsam kontinuierlich schließt, dann würde die Anzeige immer zwischen einem Wert und Null hin und her springen.

Das geht nur über die Zeitmessung wie schon gesagt wurde. Und 0,5l pro Impuls ist halt schon sehr grob, eine relativ genaue Anzeige wird nicht möglich sein.

Gruß

Das geht nur über die Zeitmessung wie schon gesagt wurde.

Okay, und wie genau?

Und 0,5l pro Impuls ist halt schon sehr grob

Für ein Messinstrument sicherlich ja.
Aber für ne kommerzielle Hausinstallationswasseruhr ist das schon das genaueste was ich finden konnte. Die meisten anderen sind gröber.

themanfrommoon:
Okay, und wie genau?

Kam z.B. die letzten 30s. kein Impuls mehr herein, dann springt die Anzeige auf Null. Einen praktikablen Wert musst du experimentell ermitteln. Anders geht es nicht, da dein ESP nicht hellsehen kann. Wenn du es genauer haben willst, dann müsstest du zusätzliche Sensoren nutzen, die z.B. die Bewegung des Flügelrad der Wasseruhr detektieren.

Etwas genauer ginge es noch wenn du eine Art Strömungswächter hättest der dir Bescheid gibt sobald die Strömung nachlässt. Ginge evtl über einen Druckwächter, da der Druck beim Entnehmen immer schwächer wird um beim Zudrehen kurz über Normaldruck ansteigt. Oder falls deine Leitung Fließgeräusche von sich gibt mit einem Mikrofon das ans Rohr geklemmt und nach außen isoliert ist. Der Pegel kann bestimmt analog mit dem Arduino eingelesen werden.

Gruß

Hmmmmmmm..........
...............................mal laut gedacht:

Also ich hab mir den Datenstrom mal angesehen.
Es kommt z.B. sowas rein:

"timestamp=1534425729767 value=719.71211515394"
"timestamp=1534425732377 value=689.65517241379"
"timestamp=1534425734702 value=774.1935483871"
"timestamp=1534425737367 value=675.42213883677"
"timestamp=1534425739753 value=754.40067057837"
"timestamp=1534425747638 value=228.2815472416"
"timestamp=1534425755292 value=235.17115233865"

Der timestamp ist in Millisekunden nach 1970
Der Wert ist in l/h
Ich habe dann mal die Differenz zweier aufeinander folgender timestamps gebildet und die Wert durch 60 geteilt um auf L/min zu kommen.
Dann habe noch die L/min durch 60000 geteilt um auf L/ms zu kommen und habe diesen Wert mit den Millisekunden zwischen zwei timestamps multipliziert. Dabei kommt immer 0,5L raus. Das passt, alle 0,5L gibts einen Impuls.

timestamp [ms nach 1970] dt [ms] L/h L/min L
1534425729767 719,712115153940000 11,99520192
1534425732377 2610 689,655172413790000 11,49425287 0,5
1534425734702 2325 774,193548387100000 12,90322581 0,5
1534425737367 2665 675,422138836770000 11,25703565 0,5
1534425739753 2386 754,400670578370000 12,57334451 0,5
1534425747638 7885 228,281547241600000 3,804692454 0,5
1534425755292 7654 235,171152338650000 3,919519206 0,5

Nun konnte man doch folgendes machen:
Wir kennen den letzten Durchflusswert und können damit ausrechnen wann der nächste Impuls bei der gleichen Durchflussrate kommen müsste.
Wird diese Zeit unterschritten gibts einen neuen Durchflusswert.
Wird diese Zeit überschritten muss die Durchflussrate kleiner geworden sein.
Nun könnte man die Durchflussrate einfach kleiner werden lassen, weil die Zeit in der der nächste Impuls kommen müsste immer größer wird.
Bei echten 0,1 L/min würde jeder Impuls 5min dauern.
Bei echten 0,5 L/min würde jeder Impuls 1min dauern.
Bei echten 1,0 L/min würde jeder Impuls 30s dauern.
Bei echten 5,0 L/min würde jeder Impuls 6s dauern.
Bei echten 10,0 L/min würde jeder Impuls 3s dauern.

Das bedeutet, nach dieser Methode dauert es 5 Minuten bis der Wert auf 0,1 L/min gefallen ist (wenn man die Anzeige auf 0,1 L/min genau haben will.
Wenn einem 1 L/min reicht, dann dauert es 30s bis der Wert darunter gefallen ist.

Hmm, irgendwie nicht so ganz zufriedenstellend.....

Was du berechnest ist linear aber das entspricht nicht der Realität. Wenn du nur einen Verbraucher hättest der immer den Hahn genau gleichweit und gleichschnell dreht dann hättest du eine Chance das zu berechnen aber so ist es leider nicht.

Gruß

themanfrommoon:
Das bedeutet, nach dieser Methode dauert es 5 Minuten bis der Wert auf 0,1 L/min gefallen ist (wenn man die Anzeige auf 0,1 L/min genau haben will.
Wenn einem 1 L/min reicht, dann dauert es 30s bis der Wert darunter gefallen ist.

Genauer geht es ohne zusätzliche leider Sensoren nicht. Vielleicht wäre noch der Wert, wie viel Wasser in den letzten 10min. gezapft wurden ein Ausweg. Dann hätte man auch gleich den Überblick, wie viel man z.B. verduscht hat.

Abgesehen davon ist ein Wert von 1l pro Minute ein ganz schön geringer Wert. 100ml pro Minute ist schon fast im Bereich tropfender Wasserhahn.