NEWS
Füllstandsmessung per Pegelsonde.
-
Hallo, @BastelKlaus ,
Du brauchst das Volumen im ESP nicht berechnen. Da Du das ja schon in Excel gemacht hast, weißt Du ja schon, wie viel Liter bei Dir den Zustand "Voll" bedeuten. Du brauchst ja nur den Wert für leer und voll. Der ESP setzt ja die Spannung am A0 intern in 1024 Schritte um, also 0-1023. Dabei entspricht 0 = leer und 0V am Eingang A0 bzw. 1023=Voll= 3,3V am Eingang A0. Der ESP wandelt also die Eingangsspannung in einen Wert um, der irgendwo zwischen 0 und 1023 liegt. Mit den Angaben für 0=0 und 1023=5600 Liter (bei mir) kann der ESP den Füllstand auf 5,4 Liter genau berechnen. Das ist mehr als ausreichend. Die Berechnung in der Rule mache ich nur, weil ich im ioBroker nicht noch ein Umrechnungsscript laufen lassen will. Da sollen nur noch die absoluten Werte ankommen für Füllstand und Prozent Füllstand, die ich dann in meiner VIS verwurste. Da es ja in letzter Zeit immer geregnet hat, ist meine Zisterne bis zum Überlauf gefüllt, so dass ich bei mir die Höhe der Wassersäule gut messen konnte, dann brauchte ich noch den Durchmesser auf Höhe des Wasserspiegels, damit konnte ich dann das Volumen eines Zylinders recht schnell berechnen. (Betonzisterne als Zylinder mit aufgesetztem Kegel, um das mal geometrisch zu beschreiben.) Herausgekommen ist dann das Ergebnis 5600 Liter.
Sorry, wenn ich jetzt schneller war. Ich bin aber auf Dein Ergebnis und vielleicht auch auf Deine VIS gespannt. -
So ähnlich sieht meine aus das bedeutet, bis zur Mitte steigt das Volumen stärker und nimmt dann weiter zu aber langsamer.
Deine Berechnung gibt das nicht her.Espeasy unterstützt solche komplexen Berechnungen nicht, es ist aber schon eine Pull request erstellt worden.
V = r²l(arccos(r-h/r) - (r-h)√(2r*h - h²)/r²)Mit der Vis bin ich noch ganz am Anfang, die hattest du ja schon fertig als du noch auf die Teile gewartet hast
-
Hallo, @BastelKlaus ,
interessant, das ist das Tankproblem (habe ich erst mal nachlesen müssen). Wenn Du nun platt den Wert h an iobroker überträgst und die Berechnung mit einem Script im iobroker löst? -
Moin so wirds werden, nur hab ich noch keine Ahnung wo und wie ich das umsetzen kann.
Die Suche hat mir noch nichts ausgeworfen das jemand sowas schon in Iobroker gemacht hat. -
Hallo, @BastelKlaus ,
ist in der Tat nicht einfach. Du mußt ja die Variable h ermitteln. Aber die gesamte Berechnung würde ich dann doch auf den iobroker übertragen und dort rechnen.
Ich habe im Netz mal kurz gesucht, habe nur das gefunden. -
Eigentlich nicht die höhe h ist bekannt, die kann ich vom sensor ablesen.
Wie gesagt Berechnung in Excel kein Problem, nur wie ich das wieder umsetzte... -
@BastelKlaus ich würde das im Script erledigen. Den Script Adapter muss man installieren.
-
Hallo, @BastelKlaus ,
hier hat das jemand mit einem Arduinosketch gelöst. Habe das nur überflogen, kannst es Dir ja mal anschauen. Im Post #18 ist wohl der funktionierende Sketch. Dort wird das ja nur im seriellen Monitor ausgegeben. Aber Du könntest ja den von @Eisbaeeer gebauten Sketch etwas umbauen. Dann müßtest Du nur versuchen, auf den ESP8266 den Arduinosketch zum Laufen zu bringen. Ob das geht, keine Ahnung, habe ich nicht getestet.
-
Ist beides reizvoll
Wenn ich sowas über script berechnen könnte, hätte ich weiter die mir bekante Espeasy Oberfläche ( wollte noch Sensoren ran hängen). kenn mich aber mit dem script zeug noch nicht aus.
Ich hab heut schon mal probiert was vom Quellcode eines online Rechners zu klauen, vergeblich.Oder ich versuch mich an der Modifikation des Arduino sketches, evtl möglich hab da schon aweng rein gelesen.
Muss dann aber mit weiteren Sensoren schaun wie das geht.Was raten mir da die Profis?
-
@BastelKlaus
Ich bin für dich da, wenn du Fragen zum Sketch hast. Einfach wird das Projekt als Einstieg aber nicht, kann ich dir sagen. Wenn du in Zukunft noch mehr mit arduino machen willst, dann schreib deinen Code selbst. Falls es ein einmaliges Projekt wird, ESPEasy.
ESPEasy hat halt eine große Community. -
@Eisbaeeer Danke für dein Angebot!
Ich schau mir das ganze mal näher an, die Berechnung des Volumens wäre ja in dem Beispiel sketch drin.
Der Umbau würde dann noch die Bibliotheken für den ESP8266, wlan etc. betreffen.@opossum Ich bin da noch über was gestolpert, verstehe aber nicht was er da macht.
-
@BastelKlaus sagte in Füllstandsmessung per Pegelsonde.:
@Eisbaeeer Danke für dein Angebot!
@opossum Ich bin da noch über was gestolpert, verstehe aber nicht was er da macht.
Was meinst Du damit, kannst gern fragen.
-
@opossum
im letzten post schreibt er das er es gelöst hat.
Ich wollte das erst mal so testen was da für Werte raus kommen, aber ich bekomm ja noch nicht mal die Formel rein, seine ist zu lang (....*100)
aber wenn ich nicht versteh was er da berechnet ist es auch schon fast egal. -
Ein Freund von mir will sich die andere Formel mal anschauen, ich kümmer mich jetzt erst mal um die Hardware.
Das wird meine erste selbst gelötete Platine. -
Einen liegenden Tank habe ich auch, siehe https://homematic-forum.de/forum/viewtopic.php?p=328133&sid=c9889fdb7499abc6e015d80692f97910#p328133 .
Und die Formel hatte ich schon lange zuvor, als ich noch mit dem Maßstab arbeitete, hergeleitet und auch in xls implementiert. Die Herleitung war damals noch schneller als Suchen. Im obigen Post (bzw. Folgepost) ist das auch kurz beschrieben:"Die Umrechnung von Füllstandshöhe auf Volumen hängt von der Tankform ab. Im meinem Fall eines liegenden Erdtanks kann aus der Füllhöhe der Füllquerschnitt berechnet werden. Stichwort Fläche des Kreissegments, s. https://de.wikipedia.org/wiki/Kreissegment hier die vierte Formel, Fläche in Abhängigkeit vom Druchmesser und der Füllhöhe. Die ESP8266 können den arccos rechnen, die Resultate stimmen mit einer XLS-Referenzberechnung überein. Nach Multiplikation mit der lichten Tanklänge erhält man das Füllvolumen ohne Berücksichtigung der Klöpperböden."
Wie beschrieben verwende ich die vierte Formel mit dem arccos(h). Die enthält alles, was wir kennen: Radius (bzw. Durchmesser) und Höhe vom Grund zum Flüssigkeitsspiegel (= Sehne)
Die Abbildung in Wikipedia einfach auf den Kopf stellen, dann wird es klar was das mit dem Tank zu tun hat.
https://de.wikipedia.org/wiki/Kreissegment#/media/Datei:Circular_segment.svgIm ESP8266 - Arduino-Code sieht das bei mir dann so aus:
void calculateInventory() { currentLevel = deltaPressure / cfg.fluidDensity + cfg.levelOffset; if (currentLevel > maxLevel) { currentLevel = maxLevel; if (currentLevel > maxLevel * 1.3) measError = 1; return; } // Meas error -> stop, no further calculation else measError = 0; // calculation for a cylindrical tank, horizontally oriented, Kloepperboden not regarded currentInventory = (pow(cfg.tankRadiusReal, 2) * acos(1 - currentLevel / cfg.tankRadiusReal) - sqrt( 2 * cfg.tankRadiusReal * currentLevel - pow(currentLevel, 2)) * (cfg.tankRadiusReal - currentLevel)) / 1000 * cfg.tankLengthReal; quantityToOrder = cfg.maxCapacity_90percent - currentInventory; } // end calculate inventory
Also die Formel stumpf und ohne Optimierung reingeklopft. Wird bei mir auch nur einmal pro Nacht gemessen und gerechnet.
Alle Variablen, die "cfg." davor haben, sind Teil eines Konfigurations-Structs, welches ich im EEPROM halte und persistent verstellen kann.Dabei bedeuten:
- quantityToOrder: Zu bestellende Ölmenge. Dabei ist in meinem Fall (Erdtank) zu beachten, daß der Tank nicht mehr als 90% befüllt werden darf. Das regelt die eingebaute (thermische) Füllstandssonde, die an das Tankfahrzeug angeschlossen wird.
- tankRadiusReal=79.00 - lichter Radius des Tanks in cm
- tankLengthReal=502.75 - lichte Länge des Tanks in cm
- maxCapacity_90percent=9472.00 - Max erlabte Fuellmenge bis zur 90Prozent Abschaltung
- fluidDensity=0.86 - Dichte des Mediums, Heizoel =0,86
- levelOffset=9.80 - Level-Offet in cm. >0 wenn Perlsonde höher als realer Tankgrund. Bei Euch wäre das die Höhe des Drucksensors über Grund
Wie schon andernorts hier im Thread erwähnt: Die Sache schnurrt bei mir jetzt schon >3 Jahre und bei der letzten Füllung wurde der Tankwagen durch die eingebaute Abschaltsonde exakt bei der bestellten Füllmenge angehalten. Auf den Liter genau bei einem 10.000 Liter Tank. War sicher auch Zufall dabei (Der Tankwagen hätte auch einen Tag früher oder später kommen können), aber die Genauigkeit ist sicher ausreichend. Trotz des in meinem Fall "windigen" (=pneumatischen) Verfahrens.
-
@klassisch
Danke für deinen Hinweis.
Hättest du die letzten Beiträge genauer gelesen, geht es mir eher drum die Berechnung in EspEasy umzusetzen oder in IoBroker.
Deine Formel ist mir, zugegeben durch Wiki bekannt und auch umsetzbar.
Für EspEasy wäre es nötig, die Berechnung mit einer Polynomial Funktion 5. Grades zu machen, da hier acos nicht verfügbar ist.
Alles nicht so Wild.Frohe Weihnachten.
-
@BastelKlaus Die Beiträge hatte ich gelese, aber EspEasy ist mir nicht geläufig. Als mir das zur Kenntnis kam, war ich schon weitgehend durch.
Es wurde ja auch überlegt, da Ganze in Arduino für ESP8266 umzusetzen - zumindest hatte ich das so verstanden.Zur Reihenentwicklung von arccos findet sich hier etwas https://mathepedia.de/Arkussinus_und_Arkuskosinus.html . Die Fehler bei 5. Grad und Argumenten im Intervall [-1, 1] habe ich nicht allerdings noch nicht gerechnet.
-
Seit gestern ist die Version 1.4 auf Github verfügbar. Ich habe ein Array eingefügt, welches die Meßdaten glättet und beruhigt.
Grüße Eisbaeeer -
Hallo Eisbaeeer,
habe die neue Version ausprobiert.
Läuft ganz gut, aber ich mußte die Zeile 311 von
percent = fuel * 0.132;
auf
percent = (fuel * dichte) / 10;
Danach zeigte das LCD Display die richtige Prozentzahl an.
Grüße
Manfred -
@Beowolf uups. Kann sein, dass ich da noch nen Bug drin hab. War gestern auch ein Schnellschuß mit andauernden Störungen von extern