Zisterne: Füllstandsberechnung mittels Ultraschallsensor: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
(Formatierung überarbeitet; kleinere Korrekturen) |
||
Zeile 1: | Zeile 1: | ||
Diese Seite beschreibt, wie man den Füllstand einer | Diese Seite beschreibt, wie man den Füllstand einer zylindrischen, liegenden Zisterne mittels [[1-Wire]] | ||
zylindrischen liegenden Zisterne mittels | [[Ultraschallsensor]] messen und in Fhem anzeigen kann. | ||
Ultraschallsensor messen und in | |||
Die Berechnung des Tankinhalt eines stehenden Zylinders ist | Die Berechnung des Tankinhalt eines stehenden Zylinders ist dagegen vergleichsweise trivial und kann entsprechend der Anleitung sicher leicht umgesetzt werden. | ||
dagegen vergleichsweise trivial und kann entsprechend der | |||
Anleitung sicher leicht umgesetzt werden. | |||
== Aufgabe== | == Aufgabe== | ||
Der Wasserstand einer flach liegenden zylindrischen Zisterne | Der Wasserstand einer flach liegenden zylindrischen Zisterne soll mittels Ultraschallsensor, der im Dom der Zisterne angebracht ist, möglichst genau gemessen werden. | ||
soll mittels Ultraschallsensor der im Dom der Zisterne | |||
angebracht ist möglichst genau gemessen werden. | |||
== Komponenten == | == Komponenten == | ||
* Ultraschallsensor, angesprochen über 1-Wire (DS2423 Counter mit Ultraschallsensor) | |||
Ultraschallsensor angesprochen über | * 1-Wire USB Adapter (hier USB9097) | ||
== Berechnung des Tankinhalts == | == Berechnung des Tankinhalts == | ||
[[Datei:zisterne2.jpg|mini|400px|rechts|Aufbau der Zisterne]] | |||
Berechnung eines Kreissegments: [http://de.wikipedia.org/wiki/Kreissegment] | |||
Vorhanden ist der Radius ''R'' der Zisterne und der Abstand zwischen Ultraschallsensor und Wasseroberfläche. Von diesem Wert muss der Abstand des Ultraschallsensors zum maximalen Wasserstand der Zisterne abgezogen werden (im Beispiel als Offset direkt eingegeben). | |||
Vorhanden ist der Radius R der Zisterne und der Abstand Ultraschallsensor Wasseroberfläche. | |||
Von diesem Wert muss der Abstand | |||
Die Länge der Zisterne ist | Die Länge der Zisterne ist ebenfalls bekannt. | ||
Die Formel für eine Kreisfläche ist r*r*Pi, von dieser Kreisfläche muss das berechnete Kreissegment abgezogen werden. | Die Formel für eine Kreisfläche ist r*r*Pi, von dieser Kreisfläche muss das berechnete Kreissegment abgezogen werden. | ||
== Integration in Fhem == | |||
Definition des Sensors in der [[Konfiguration]]: | |||
<pre> | |||
define Zisterne OWCOUNT DS2423 A2D993000002 3600 | |||
attr Zisterne room OWX | |||
</pre> | |||
Der verwendete 1-Wire Counter hat zwei Eingänge: ''A'' und ''B''. Mit BName wird nur der Wert von Eingang B für die Berechnung benutzt: | |||
<pre>attr Zisterne BName USensor</pre>'' | |||
Der | |||
'' | |||
Mit BName wird nur der Wert von Eingang B für die Berechnung | |||
benutzt: | |||
Es ist möglich, direkt einen Offset anzugeben. Das ist der Abstand vom Oberrand der Zisterne bis zum Ultraschallsensor. | |||
<pre> | |||
attr Zisterne BOffset -32 | attr Zisterne BOffset -32 | ||
attr Zisterne BUnit cm|cm | |||
</pre> | |||
Weitere erforderliche Attribute: | |||
<pre>attr Zisterne IODev USB9097 | |||
attr Zisterne model DS2423emu | attr Zisterne model DS2423emu | ||
attr Zisterne nomemory 1</ | attr Zisterne nomemory 1 | ||
</pre> | |||
Berechnung des aktuellen Wasserstands in cm vom Grund der Zisterne: | |||
<pre>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)) }</ | </pre> | ||
Berechnung des aktuellen Wasservolumens in der Zisterne: | Berechnung des aktuellen Wasservolumens in der Zisterne: | ||
<pre> | |||
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 | ||
attr Tankinhalt room OWX | attr Tankinhalt room OWX | ||
attr Tankinhalt valueFn { | </pre> | ||
int((0.5*(20106-((6400*(acos(1-((ReadingsVal("Zisterne", | Wichtig: die folgende Attribut-Definition ist ohne Zeilenumbrüche einzugeben: | ||
"USensor", "160")+0)/80)))-(sqrt(160*(ReadingsVal("Zisterne", | :<code>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)))))))) }</code> | ||
"USensor", "160")+0)-((ReadingsVal("Zisterne", "USensor", | |||
"160")+0)**2))*(80-(ReadingsVal("Zisterne", "USensor", | |||
"160")+0)))))))) }</ | |||
== Links == | |||
* [http://forum.fhem.de/index.php/topic,20480 Diskussion] dazu im Fhem Forum | |||
* Wikipedia: [http://de.wikipedia.org/wiki/Kreissegment Berechnung eines Kreissegments] | |||
[[Kategorie:Code Snippets]] | [[Kategorie:Code Snippets]] | ||
[[Kategorie:Examples]] | [[Kategorie:Examples]] | ||
[[Kategorie:Füllstandsmesser]] | [[Kategorie:Füllstandsmesser]] |
Version vom 24. März 2014, 11:18 Uhr
Diese Seite beschreibt, wie man den Füllstand einer zylindrischen, liegenden Zisterne mittels 1-Wire 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.
Komponenten
- Ultraschallsensor, angesprochen über 1-Wire (DS2423 Counter mit Ultraschallsensor)
- 1-Wire USB Adapter (hier USB9097)
Berechnung des Tankinhalts
Berechnung eines Kreissegments: [1]
Vorhanden ist der Radius R der Zisterne und der Abstand zwischen Ultraschallsensor und Wasseroberfläche. Von diesem Wert muss der Abstand des Ultraschallsensors zum maximalen Wasserstand der Zisterne abgezogen werden (im Beispiel als Offset direkt eingegeben).
Die Länge der Zisterne ist ebenfalls bekannt.
Die Formel für eine Kreisfläche ist r*r*Pi, von dieser Kreisfläche muss das berechnete Kreissegment abgezogen werden.
Integration in Fhem
Definition des Sensors in der Konfiguration:
define Zisterne OWCOUNT DS2423 A2D993000002 3600 attr Zisterne room OWX
Der verwendete 1-Wire Counter hat zwei 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 vom Oberrand der Zisterne bis zum Ultraschallsensor.
attr Zisterne BOffset -32 attr Zisterne BUnit cm|cm
Weitere erforderliche 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
Wichtig: die folgende Attribut-Definition ist ohne Zeilenumbrüche einzugeben:
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)))))))) }
Links
- Diskussion dazu im Fhem Forum
- Wikipedia: Berechnung eines Kreissegments