Zisterne: Füllstandsberechnung mittels Ultraschallsensor: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 47: | Zeile 47: | ||
'' | '' | ||
define Zisterne OWCOUNT DS2423 A2D993000002 3600 | <nowiki>define Zisterne OWCOUNT DS2423 A2D993000002 3600 | ||
attr Zisterne room OWX'' | attr Zisterne room OWX</nowiki>'' | ||
Zeile 55: | Zeile 55: | ||
benutzt: | benutzt: | ||
'' | |||
<nowiki>attr Zisterne BName USensor</nowiki>'' | |||
Zeile 63: | Zeile 64: | ||
attr Zisterne BOffset -32 | |||
attr Zisterne BUnit cm|cm'' | '' | ||
<nowiki>attr Zisterne BUnit cm|cm</nowiki>'' | |||
Zeile 70: | Zeile 73: | ||
'' | '' | ||
attr Zisterne IODev USB9097 | <nowiki>attr Zisterne IODev USB9097 | ||
attr Zisterne model DS2423emu | attr Zisterne model DS2423emu | ||
attr Zisterne nomemory 1'' | attr Zisterne nomemory 1</nowiki>'' | ||
Zeile 79: | Zeile 82: | ||
'' | '' | ||
define Wasserstand readingsProxy Zisterne:USensor | <nowiki>define Wasserstand readingsProxy Zisterne:USensor | ||
attr Wasserstand alias Wsserstand (max 160) aktuell in cm | attr Wasserstand alias Wsserstand (max 160) aktuell in cm | ||
attr Wasserstand group Zisterne | attr Wasserstand group Zisterne | ||
attr Wasserstand room OWX | attr Wasserstand room OWX | ||
attr Wasserstand valueFn { (-1*(ReadingsVal("Zisterne", | attr Wasserstand valueFn { (-1*(ReadingsVal("Zisterne", | ||
"USensor", "160")-160)) }'' | "USensor", "160")-160)) }</nowiki>'' | ||
Zeile 90: | Zeile 94: | ||
''define Tankinhalt readingsProxy Zisterne:USensor | '' | ||
<nowiki>define Tankinhalt readingsProxy Zisterne:USensor | |||
attr Tankinhalt alias Zisterne (max 10000) aktuell in Liter | attr Tankinhalt alias Zisterne (max 10000) aktuell in Liter | ||
attr Tankinhalt group Zisterne | attr Tankinhalt group Zisterne | ||
Zeile 99: | Zeile 104: | ||
"USensor", "160")+0)-((ReadingsVal("Zisterne", "USensor", | "USensor", "160")+0)-((ReadingsVal("Zisterne", "USensor", | ||
"160")+0)**2))*(80-(ReadingsVal("Zisterne", "USensor", | "160")+0)**2))*(80-(ReadingsVal("Zisterne", "USensor", | ||
"160")+0)))))))) }'' | "160")+0)))))))) }</nowiki>'' | ||
Zeile 107: | Zeile 112: | ||
--[[Benutzer:Franz Tenbrock|Franz Tenbrock]] ([[Benutzer Diskussion:Franz Tenbrock|Diskussion]]) 18:01, 23. Mär. 2014 (UTC) | --[[Benutzer:Franz Tenbrock|Franz Tenbrock]] ([[Benutzer Diskussion:Franz Tenbrock|Diskussion]]) 18:01, 23. Mär. 2014 (UTC) | ||
[[Kategorie: | [[Kategorie:Code Snippets]] | ||
[[Kategorie: | [[Kategorie:Examples]] | ||
[[Kategorie:Füllstandsmesser]] | [[Kategorie:Füllstandsmesser]] |
Version vom 23. März 2014, 19:47 Uhr
Diese Seite beschreibt, wie man den Füllstand einer zylindrischen liegenden Zisterne mittels 1Wire Ultraschallsensor messen und in FHEM anzeigen kann.
Die Berechnung des Tankinhalt eines stehenden Zylinders ist dagegen vergleichsweise trivial und kann entsprechend der Anleitung sicher leicht umgesetzt werden.
Aufgabe
Der Wasserstand einer flach liegenden zylindrischen Zisterne soll mittels Ultraschallsensor der im Dom der Zisterne angebracht ist möglichst genau gemessen werden.
Diskussion dazu im Fhem Forum:
Komponenten
Ultraschallsensor angesprochen über 1Wire ( DS2423 Counter mit Ultraschallsensor ) 1Wire USB Adapter ( hier USB9097 )
Berechnung des Tankinhalts
Berechnung eines Kreissegment: http://de.wikipedia.org/wiki/Kreissegment w Vorhanden ist der Radius R der Zisterne und der Abstand Ultraschallsensor Wasseroberfläche. Von diesem Wert muss der Abstand Ultraschallsensor zum maximalen Wasserstand der Zisterne abgezogen werden. Das habe ich als Offset direkt eingegeben.
So hat man alle Variablen für die Formel.
Bild vom Aufbau
Die Länge der Zisterne ist ebenso bekannt.
Die Formel für eine Kreisfläche ist r*r*Pi, von dieser Kreisfläche muss das berechnete Kreissegment abgezogen werden.
Integration in die fhem.cfg
Der Sensor ist im ersten Schritt zu defnieren:
define Zisterne OWCOUNT DS2423 A2D993000002 3600 attr Zisterne room OWX
Der verwendete 1Wire Counter hat 2 Eingänge A und B
Mit BName wird nur der Wert von Eingang B für die Berechnung
benutzt:
attr Zisterne BName USensor
Es ist möglich direkt einen Offset anzugeben. Das ist der Abstand Oberrand Zisterne 51; Ultraschallsensor.
attr Zisterne BOffset -32
attr Zisterne BUnit cm|cm
weiter notwendige Attribute:
attr Zisterne IODev USB9097 attr Zisterne model DS2423emu attr Zisterne nomemory 1
Berechnung des aktuellen Wasserstands in cm vom Grund der
Zisterne:
define Wasserstand readingsProxy Zisterne:USensor attr Wasserstand alias Wsserstand (max 160) aktuell in cm attr Wasserstand group Zisterne attr Wasserstand room OWX attr Wasserstand valueFn { (-1*(ReadingsVal("Zisterne", "USensor", "160")-160)) }
Berechnung des aktuellen Wasservolumens in der Zisterne:
define Tankinhalt readingsProxy Zisterne:USensor attr Tankinhalt alias Zisterne (max 10000) aktuell in Liter attr Tankinhalt group Zisterne attr Tankinhalt room OWX attr Tankinhalt valueFn { int((0.5*(20106-((6400*(acos(1-((ReadingsVal("Zisterne", "USensor", "160")+0)/80)))-(sqrt(160*(ReadingsVal("Zisterne", "USensor", "160")+0)-((ReadingsVal("Zisterne", "USensor", "160")+0)**2))*(80-(ReadingsVal("Zisterne", "USensor", "160")+0)))))))) }
Ebenso ist hier ein Wiki Beitrag zu finden:
http://www.fhemwiki.de/wiki/Ultraschallsensor
--Franz Tenbrock (Diskussion) 18:01, 23. Mär. 2014 (UTC)