Benutzer-Werkzeuge

Webseiten-Werkzeuge


de:tech:waterlevel

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
de:tech:waterlevel [2022/11/11 16:51] – [Motivation] bullarde:tech:waterlevel [2022/11/14 09:27] (aktuell) – [Lösungsansatz] bullar
Zeile 6: Zeile 6:
 Die Füllstände aller Tanks werden über mechanische Schwimmschalter gesteuert, die die jeweiligen Pumpen bei Bedarf einschalten. Das funktioniert meist zuverlässig aber eine aktuelle Füllstandsanzeige wäre schon hilfreich. Vor allem wenn man sich schon mit [[https://www.home-assistant.io|Home Assistant]] einem Smart Home annähert. Ein Füllstandsmesser muss her. Die Füllstände aller Tanks werden über mechanische Schwimmschalter gesteuert, die die jeweiligen Pumpen bei Bedarf einschalten. Das funktioniert meist zuverlässig aber eine aktuelle Füllstandsanzeige wäre schon hilfreich. Vor allem wenn man sich schon mit [[https://www.home-assistant.io|Home Assistant]] einem Smart Home annähert. Ein Füllstandsmesser muss her.
  
 +{{ :tech:water_tanks.png?nolink&200 |water tanks}}
 ===== Lösungsansatz ===== ===== Lösungsansatz =====
  
 Fertige Lösungen sind wie immer sehr teuer und ausserdem ist ja auch der Weg das Ziel. Eine mechanische Lösung habe ich von vorne herein ausgeschlossen um wartungsfrei zu bleiben, Fertige Lösungen sind wie immer sehr teuer und ausserdem ist ja auch der Weg das Ziel. Eine mechanische Lösung habe ich von vorne herein ausgeschlossen um wartungsfrei zu bleiben,
-Auch wollte ich keine Lösung, wo ich die Tanks unterhalb der max. Wasserlinie anbohren muss und dann die Abdichtung ein Problem werden kann. +Auch wollte ich keine Lösung, wo ich die Tanks unterhalb der max. Wasserstandshöhe anbohren muss und dann die Abdichtung ein Problem werden kann. 
-Da die Geometrie der Tanks bekannt ist, bietet sich so eine Ultraschall-Abstandsmessung der Wasseroberfläche an. Selbst während des Pumpvorganges ist die Wasseroberfläche nicht so rau, das es zu deutlichen Fehlmessungen kommen wird.+Da die Geometrie der Tanks bekannt ist, bietet sich eine Ultraschall-Abstandsmessung der Wasseroberfläche an. Selbst während des Pumpvorganges ist die Wasseroberfläche nicht so rau, das es zu deutlichen Fehlmessungen kommen wird.
 Beispiele für DIY Lösungen sind auch hier zu finden (teilweise nach meiner Implementierung in 2021 erschienen): Beispiele für DIY Lösungen sind auch hier zu finden (teilweise nach meiner Implementierung in 2021 erschienen):
   - [[https://markus-haack.com/watertank-esphome/|Water tank monitoring with ESPHome]]   - [[https://markus-haack.com/watertank-esphome/|Water tank monitoring with ESPHome]]
Zeile 17: Zeile 18:
 Da wir es hier ja mit Wasser zu tun haben, scheidet das verbreitete, preiswerte Ultraschallmodul HC-SR04 aus. Aber es gibt ein ähnliches, wasserfestes Modul AJ-SR04M. Da wir es hier ja mit Wasser zu tun haben, scheidet das verbreitete, preiswerte Ultraschallmodul HC-SR04 aus. Aber es gibt ein ähnliches, wasserfestes Modul AJ-SR04M.
  
-{{:tech:hc-sr04.png?nolink&360|HC-SR04}} +<WRAP group> 
-{{:tech:water_level_sensor_set.png?direct&300|AJ-SR04M}}+<WRAP half column> 
 +{{ :tech:hc-sr04.png?nolink&360|HC-SR04}} 
 +</WRAP> 
 +<WRAP half column> 
 +{{:tech:water_level_sensor_set.png?direct&300 |AJ-SR04M}} 
 +</WRAP> 
 +</WRAP>
  
-Das AJ-SR04M hat einige gute Eigenschaften:+Das AJ-SR04M Modul hat einige gute Eigenschaften:
   - wasserfester Sensorkopf   - wasserfester Sensorkopf
   - Messbereich von 20cm bis 450cm   - Messbereich von 20cm bis 450cm
   - gute Auflösung von 0.5cm   - gute Auflösung von 0.5cm
   - fünf Betriebsmodi (pulse width (default), low power pulse width, automatic serial port, serial port trigger, ASCII code output)   - fünf Betriebsmodi (pulse width (default), low power pulse width, automatic serial port, serial port trigger, ASCII code output)
-  - geringe Stromaufnahme im Ruhebetrieb (< 20µA)+  - geringe Stromaufnahme im Ruhebetrieb (<20µA)
  
-Vom HC-SR04 kennen wir die Pulseweitenmessung. Zur Bestimmung der Entfernung messen wir die Zeit vom Triggersignal bis zum eintreffenden Echosignal. Das AJ-SR04M Modul hat einen eigenen Microcontroller an Board und bietet diese Zeitmessung an und kann das Ergebnis seriell weitergeben. Das entbindet uns von zeitkritischen Messungen. Um das Modul in den jeweiligen Betriebsmodus zu bringen muss R19 richtig bestückt werden:+Vom HC-SR04 Modul kennen wir die Pulseweitenmessung. Zur Bestimmung der Entfernung messen wir die Zeit vom Triggersignal bis zum eintreffenden Echosignal. Das AJ-SR04M Modul hat einen eigenen Microcontroller an Board und bietet diese Zeitmessung ankann das Ergebnis aber seriell zurückgeben. Das entbindet uns von zeitkritischen Pulsmessungen. Um das Modul in den jeweiligen Betriebsmodus zu bringen muss der Widerstand R19 richtig bestückt werden:
  
 ^ Modus ^ R19 ^ Standby Current ^ Low Power Current ^ ^ Modus ^ R19 ^ Standby Current ^ Low Power Current ^
Zeile 41: Zeile 48:
 ===== Umsetzung ===== ===== Umsetzung =====
  
-Ich habe mich für den Mode 4 entschieden bei dem serial ein Triggerbyte gesendet wird und anschliessend das Messergebnis seriell empfangen werden kann. Vorgesehen ist eine 0805 Bauform für R19 aber durch die großen Pads läßt sich auch leicht ein bedrahteter Widerstand von 47KΩ anlöten. +Ich habe mich für den Mode 4 entschieden bei mit der UART serial ein Triggerbyte gesendet wird und anschliessend das Messergebnis seriell empfangen werden kann. Dazu brauchen wir einen 47KΩ Widerstand. Vorgesehen ist eine 0805 Bauform für R19 aber durch die großen Pads läßt sich auch leicht ein bedrahteter Widerstand anlöten. 
  
-{{ :tech:serial_mode.png?nolink&400 |}}+{{ :tech:serial_mode.png?nolink&400 |Serial protocol}}
      
 Die Baudrate ist übrigens 9600 Baud und nach erfolgter Messung werden fünf Bytes mit folgendem Format übertragen: Die Baudrate ist übrigens 9600 Baud und nach erfolgter Messung werden fünf Bytes mit folgendem Format übertragen:
Zeile 70: Zeile 77:
 ===== Home Assistant Integration ===== ===== Home Assistant Integration =====
  
-Mit einem ESP8266 Modul und ESPHome gelingt die Integration in Home Assistant sehr einfach. Das serielle Protokoll läßt sich am einfachsten mit einem Custom Component auswerten.   +Mit einem ESP8266 Modul und ESPHome gelingt die Integration in [[https://www.home-assistant.io|Home Assistant]] sehr einfach. Das serielle Protokoll läßt sich am einfachsten mit einem Custom Component auswerten.   
-Das folgende kleine C Programm schreibt das Trigger Byte beim Update Request und berechnet das Messergebnis in Meter anhand der empfangenen fünf Bytes.+Das folgende kleine C Programm schreibt das Trigger Byte beim Update Request und berechnet das Messergebnis (in Meteranhand der empfangenen fünf Bytes.
  
 <file C AJ_SR04M_Sensor.h> <file C AJ_SR04M_Sensor.h>
Zeile 103: Zeile 110:
 </file> </file>
  
-In ESPHome generieren wir ein neues Device und fügen den eigenen Code mit einem Include hinzu. Das File ''AJ_SR04M_Sensor.h'' muss dazu in ''/config/esphome'' kopiert werden.+In ESPHome generieren wir ein neues Device und fügen den eigenen Code mit einem //includes// hinzu. Das File ''AJ_SR04M_Sensor.h'' muss dazu in ''/config/esphome'' kopiert werden.
  
 <code yaml> <code yaml>
Zeile 113: Zeile 120:
 </code> </code>
  
-Dann fügen wir die UART Schnittstelle hinzu. Falls wir keine Pins der Hardware UART verwenden wird automatisch eine Software UART implementiert. Da ich in meiner Lösung insgesamt 3 Module anschließe gehen mir sowieso die H/W UARTs aus. Zu guter Letzt die Implementierung der Sensoren. Der Sensor mit der ID ''dist1'' gibt die gemessene Distanz in Meter her. Mit Template Sensoren lässt sich dann der Wert wie oben beschrieben in eine Prozent- und Literangabe umrechnen.+Dann fügen wir die UART Schnittstelle hinzu. Falls wir keine Pins der Hardware UART verwenden wird automatisch eine Software UART implementiert. Da ich in meiner Lösung insgesamt 3 Module anschließegehen mir sowieso die H/W UARTs aus.  
 +Zu guter Letzt die Implementierung der Sensoren. Der Sensor mit der ID ''dist1'' gibt die gemessene Distanz in Meter her. Mit //Template Sensoren// lässt sich dann der Wert wie oben beschrieben in eine Prozent- und Literangabe umrechnen.
  
 <code yaml> <code yaml>
Zeile 155: Zeile 163:
 Der Sensorkopf hat am Rand Klemmlaschen und ist so für eine Öffnung von ca. 20mm geeignet. Der Sensorkopf hat am Rand Klemmlaschen und ist so für eine Öffnung von ca. 20mm geeignet.
  
-{{ :tech:size.png?direct&400 |}}+{{ :tech:size.png?direct&400 |Dimensions}}
  
-In dünnwandigen Tankgehäusen kann man mit einem passenden Leerrohrverbinder den Sensor stabil einbauen und gleichzeitig das Kabel ummanteln.+In dünnwandigen Tankgehäusen kann man mit einem passenden Leerrohrverbinder den Sensor stabil einbauen und gleichzeitig das Kabel mit einem Kabelschlauch ummanteln.
  
-{{ :tech:aj_conduit.png?nolink&300 | PVC Conduit}}+{{ :tech:aj_conduit.png?nolink&300 |PVC Conduit}}
  
-Hier die Montage oben auf unserem Dwell Tank. Der Sensor ist so gut gegen mechanischen Stress und Umwelteinflüsse geschützt. Bei uns hat er so jetzt mehr als 1 Jahr fehlerfrei überstanden.+Hier die Montage oben auf unserem Dwell Tank. Der Sensor ist so gut gegen mechanischen Stress und Umwelteinflüsse geschützt. Bei uns hat er so jetzt schon mehr als 1 Jahr fehlerfrei überstanden.
  
-{{ :tech:aj_mounted.jpeg?direct&200 |Montage auf dem Tank}}+{{ :tech:aj_mounted.jpeg?direct&200 |Mounted on top of the tank}}
  
 In den meisten Fällen wird wahrscheinlich das 2.5m lange Sensorkabel ausreichen. Bei mir war die Entfernung zu zwei Tanks leider größer. Versuche das Sensorkabel zu verlängern zogen Messungenauigkeiten mit sich. Deshalb habe ich die AJ-Steuerplatine abgesetzt und in einem kleinen, wasserdichten Gehäuse verstaut. Das Bild zeigt nur das innere 3D-gedruckte Gehäuse. In den meisten Fällen wird wahrscheinlich das 2.5m lange Sensorkabel ausreichen. Bei mir war die Entfernung zu zwei Tanks leider größer. Versuche das Sensorkabel zu verlängern zogen Messungenauigkeiten mit sich. Deshalb habe ich die AJ-Steuerplatine abgesetzt und in einem kleinen, wasserdichten Gehäuse verstaut. Das Bild zeigt nur das innere 3D-gedruckte Gehäuse.
Zeile 169: Zeile 177:
 {{ :tech:aj-adapter.png?direct&200 |3D printed inner housing}} {{ :tech:aj-adapter.png?direct&200 |3D printed inner housing}}
  
-Das ESPHome Modul ist in einem etwas größeren, wasserfesten Gehäuse untergebracht. Das Innenleben ist auf einem 3D-gedruckten Träger untergebracht. Für zwei Wassertanks kommt das serielle Signal über ein 4-adriges Kabel an die Schraubklemmen (der oben gezeigte Adapter ist ja dazwischen)) und der nahe gelegene Wassertank wird direkt an das Messmodul angeschlossen. Als Netzteil verwende ich übrigens immer diese Apple-ähnlichen USB Power Supplies. Der Eingang wurde von mir auf Schraubklemmen modifiziert. Diese Lösung ist recht zuverlässig, sehr preiswert und sicher da vollkommen gekapselt.+Das ESPHome Modul ist in einem etwas größeren, wasserfesten Gehäuse untergebracht. Das Innenleben ist auf einem 3D-gedruckten Träger untergebracht. Für zwei Wassertanks kommt das serielle Signal über ein 4-adriges Kabel an die Schraubklemmen (der oben gezeigte Adapter ist ja dazwischen)) und der näher gelegene Wassertank wird direkt an das Messmodul angeschlossen. Als Netzteil verwende ich übrigens immer diese Apple-ähnlichen [[https://www.amazon.de/gp/product/B082XG9Z31/ref=ppx_yo_dt_b_asin_image_o08_s00?ie=UTF8&psc=1|USB Netzteile]]. Der Eingang wurde von mir auf Schraubklemmen modifiziert. Diese Lösung ist recht zuverlässig, sehr preiswert und sicher da vollkommen gekapselt.
  
 {{ :tech:aj_esp_module.png?direct&300 |ESPHome module}} {{ :tech:aj_esp_module.png?direct&300 |ESPHome module}}
Zeile 176: Zeile 184:
 ===== Ergebnisse ===== ===== Ergebnisse =====
  
-Nach getaner Arbeit kann man jetzt den Füllstand der Tanks beobachten und auch Aktionen daraus ableiten. Hier ein Blick auf das übersichtliche Panel für den Aussenbereich. Dort werden die Füllstände der Tanks live angezeigt.+Nach getaner Arbeit kann man jetzt den Füllstand der Tanks beobachten und auch Aktionen daraus ableiten. Hier ein Blick auf das übersichtliche Panel von Home Assistant für den Aussenbereich. Dort werden die Füllstände der Tanks live angezeigt.
  
 {{ :tech:aj_panel.png?direct&600 |Panel screen outdoor}} {{ :tech:aj_panel.png?direct&600 |Panel screen outdoor}}
Zeile 185: Zeile 193:
  
 Der unterschiedliche Füllstand liegt am manuelle Auffüllen, da der mechanische Endschalter bei der Erstellung des Artikels defekt war. Der unterschiedliche Füllstand liegt am manuelle Auffüllen, da der mechanische Endschalter bei der Erstellung des Artikels defekt war.
-Mit Hilfe der Statistik Funktion in Home Assistant lässt sich daraus auch leicht ein Verbrauchssensor generieren. 
  
-<code yaml> 
-sensors: 
-  - platform: statistics 
-    entity_id: sensor.water_tank_volume 
-    name: Water Usage 
-    sampling_size: 2 
-    state_characteristic: change 
-</code> 
  
 +
 +
 +=====Links=====
 +  * [[https://www.home-assistant.io]] Home Assistant
 +  * [[https://esphome.io]] ESPHome
 +  * [[https://airbnb.com/h/villarollokohsamui]] Man kann bei uns Urlaub verbringen...
 +
 +===== Spenden =====
 +
 +Wenn ihr meine Arbeit unterstützen wollt, so könnt ihr mir gerne einen Cappuccino oder so spenden: .
 +
 +<html>
 +
 +<form action="https://www.paypal.com/donate" method="post" target="_top">
 +<input type="hidden" name="hosted_button_id" value="N397JC5HP82AQ" />
 +<input type="image" src="https://www.paypalobjects.com/de_DE/DE/i/btn/btn_donateCC_LG.gif" border="0" name="submit" title="PayPal - The safer, easier way to pay online!" alt="Donate with PayPal button" />
 +<img alt="" border="0" src="https://www.paypal.com/de_DE/i/scr/pixel.gif" width="1" height="1" />
 +</form>
 +
 +</html>
  
  
de/tech/waterlevel.1668185474.txt.gz · Zuletzt geändert: 2022/11/11 16:51 von bullar