Zisterne: Füllstandsberechnung mittels Ultraschallsensor: Unterschied zwischen den Versionen

Aus FHEMWiki
(Die Seite wurde neu angelegt: „Diese Seite beschreibt, wie man den Füllstand einer zylindrischen liegenden Zisterne mittels 1Wire Ultraschallsensor messen und in FHEM anzeigen kann. Die Be…“)
 
(FHEM(R))
 
(3 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
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 1Wire
[[Ultraschallsensor]] messen und in FHEM anzeigen kann.
Ultraschallsensor messen und in FHEM anzeigen kann.


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.
 
Diskussion dazu im Fhem Forum:
* http://forum.fhem.de/index.php/topic,20480.msg145802.html#msg145802
 


== Komponenten ==
== Komponenten ==
 
* Ultraschallsensor, angesprochen über 1-Wire (DS2423 Counter mit Ultraschallsensor)
Ultraschallsensor angesprochen über 1Wire ( DS2423 Counter mit Ultraschallsensor )
* 1-Wire USB Adapter (hier USB9097)
1Wire 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]


Berechnung eines Kreissegment:  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).
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.
Die Länge der Zisterne ist ebenfalls bekannt.
 
 
Hier muss noch ein Bild vom Aufbau reint.
 
 
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.
Die Formel für eine Kreisfläche ist r*r*Pi, von dieser Kreisfläche muss das berechnete Kreissegment abgezogen werden.


 
== Integration in FHEM ==
== Integration in die fhem.cfg ==
Definition des Sensors in der [[Konfiguration]]:
 
<pre>
Der Sensor ist im ersten Schritt zu defnieren:
 
 
''
define Zisterne OWCOUNT DS2423 A2D993000002 3600
define Zisterne OWCOUNT DS2423 A2D993000002 3600
attr Zisterne room OWX''
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 verwendete 1Wire Counter hat 2 Eingänge A und B
Es ist möglich, direkt einen Offset anzugeben. Das ist der Abstand vom Oberrand der Zisterne bis zum Ultraschallsensor.
Mit BName wird nur der Wert von Eingang B für die Berechnung
<pre>
benutzt:
attr Zisterne BOffset -32
attr Zisterne BUnit cm|cm
</pre>


 
Weitere erforderliche Attribute:
''attr Zisterne BName USensor''
<pre>attr Zisterne IODev USB9097
 
 
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 model DS2423emu
attr Zisterne nomemory 1''
attr Zisterne nomemory 1
 
</pre>


Berechnung des aktuellen Wasserstands in cm vom Grund der
Berechnung des aktuellen Wasserstands in cm vom Grund der Zisterne:
Zisterne:


''
<pre>define Wasserstand readingsProxy Zisterne:USensor
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
''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)))))))) }''
 
 
Ebenso ist hier ein Wiki Beitrag zu finden:
http://www.fhemwiki.de/wiki/Ultraschallsensor


--[[Benutzer:Franz Tenbrock|Franz Tenbrock]] ([[Benutzer Diskussion:Franz Tenbrock|Diskussion]]) 18:01, 23. Mär. 2014 (UTC)
== 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:Other Components]]
[[Kategorie:Code Snippets]]
[[Kategorie:HOWTOS]]
[[Kategorie:Examples]]
[[Kategorie:Füllstandsmesser]]
[[Kategorie:Füllstandsmesser]]

Aktuelle Version vom 24. Januar 2017, 18:55 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

Aufbau der Zisterne

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