V předchozím článku Přehled možností monitorování spotřeby vody jsem shrnul (teoreticky) hromadu možností, jak číst impulzy z vodoměrů, a jak informace o těchto impulzech dopravit do Home Assistantu.
Jedno z tam zmíněných řešení jsem úspěšně vyzkoušel a už pár týdnů používám, tak ho tady popíšu krok za krokem: Jde o snímání litrového kolečka line-tracking senzorem TCRT5000, a data do HA odesílá Wemos D1 Mini (s ESPHome firmware).
Výhody:
- Cena potřebného hardwaru je asi $3 (70 Kč)
- Provoz přes WiFi (netřeba řešit ZigBee nebo Bluetooth)
- Přímá integrace do Home Assistant přes ESPHome (netřeba řešit ani MQTT)
Nevýhody:
- Spotřeba (cca 7 kWh/rok), takže problematičtější provoz na baterii
- S tím související potřeba mít možnost k vodoměru natáhnout tenký drát (3 vodiče, příp. 4 pro dva vodoměry)
Rozdělím to celé na tři části:
1) Odečítání impulzů z vodoměru (tento článek)
2) Odesílání impulzů do Home Assistant (dále jen HA) přes ESPHome
3) Zpracování informací v HA a jejich zobrazení na dashboardu (to do)
Díl 1. Odečítání impulzů z vodoměru
Co je cílem na konci tohoto článku? →
- Mít senzor TCRT5000 připravený k finálnímu uchycení na vodoměr.
- Mít ho nastavený tak, aby dával 1 impulz s každým jedním protočením litrového kolečka.
Hardware, který jsem použil
- vodoměr Enbra ER-AM
- vývojová destička Wemos D1 Mini s čipem ESP8266 (55 Kč)
- optické čidlo TCRT5000 (10 Kč)
Dál se bude hodit:
- nějaké vodiče pro pospojování všeho dohromady („Dupont“ kabely)
- USB zdroj → jakákoliv stará USB nabíječka
- microUSB kabel pro napájení
- páječka
Páječka je jen na napájení header pinů na Wemos D1 Mini (většinou to přijde ve stavu dodělej si sám):
Důvod, proč jsem použil zrovna TCRT5000 (a ne jakýkoliv jiný způsob) je jednoduchý – prostě už jsem jich měl hromadu doma, objednával jsem je (nevím proč) před pěti lety. :)
Každopádně jde o čidlo, které svítí jednou IR diodou na povrch, a odraz zpátky snímá fototranzistorem. Na základě toho pak dokážete detekovat změnu odrazivosti povrchů, sledovat černou čáru nakreslenou na bílém papíru…. a nebo otáčející se kolečko na vodoměru.
Použitý software
- domácí automatizace Home Assistant (zobrazování naměřených hodnot)
- ESPHome – firmware pro ESP desky (předávání dat z čidla do HA přes WiFi)
- Arduino IDE pro prvotní zkalibrování čidla TCRT5000
Výchozí situace
V tomto konkrétním případě jdu měřit spotřebu vody ze studny u RD. Pro tyto účely jsem koupil použitý vodoměr Enbra ER-AM (50 Kč/kus), který vlepím za čerpadlo. Nejdražší ze všeho na tomhle všem byly přechodky z PP a šroubení (+300). :D
Vodoměr bude ve sklepě rodinného domu, takže není problém ani s napájením pro Wemos, ani s dosahem WiFi pro odesílání dat. Samozřejmě rozumím tomu, že ne vždy si lze k vodoměru dotáhnout kabely, nicméně tady je situace taková, takže tak.
Šlo by toto řešení provozovat na baterii? Tak jak to je tady popsané, asi ne. Po nějakých úpravách (úspornější deska než Wemos D1 Mini, např. ESP32-C3, použití samotného IR a fototranzistoru namísto celého modulu TCRT5000, odpájení všech blikátek, pohrání si s deep-sleep) by to na nějakou větší baterku asi mohlo nějaký čas běžet.
Pro představu, toto řešení (tj. Wemos D1 Mini, 2x TCRT5000 pro dva vodoměry, v 5V/1A USB nabíječce od iPhonu) má spotřebu okolo 7 kWh/rok (měřil jsem to).
Odečítání impulzů z vodoměru Enbra ER-AM
Vodoměr Enbra ER-AM má reflexní kolečko, které se jednou otočí s každým litrem vody, který vodoměrem proteče:
Toto kolečko je ze 2/3 reflexní a z 1/3 černé, a změny těchto dvou povrchů budeme sledovat senzorem TCRT5000. Ten má dva výstupy – analogový A0
, kde lze sledovat aktuální výstup z fototranzistoru v rozsahu (0-1024), a digitální D0
; který vyhazuje HIGH (1) a LOW (0) výstup. Bod, ve kterém se tento výstup přepíná lze potom štelovat potenciometrem přímo na senzoru.
Takto vypadá analogový výstup z TCRT5000, když se kolečko otáčí (a senzor je umístěn přímo nad nímú):
Toto řešení tak bude fungovat na všech vodoměrech, které na sobě nějaké takové kolečko mají. Například vodoměry Sensus na litrovém kolečku rovnou magnet, který by šel snímat jazýčkovým kontaktem, ale protože magnet je jen z půlky kolečka, lze ho snímat i opticky. Viz kolečko úplně vlevo:
Připevnění čidla TCRT5000 na vodoměr
Prerekvizity pro tento krok:
- kreativita :D
- tavné lepidlo
- volitelně: 3D tiskárna
Začneme tím, že zhruba vymyslíte finální (resp. nemusí být finální, ale potom může být potřeba jej ještě znova dokalibrovat) uchycení samotného senzoru na vodoměr.
Kreativitě se meze nekladou, já osobně na 3D tiskárně tisknu tento model, který nahrazuje originální čepičku:
Tuto čepičku umístím přesně nad jednu polovinu otáčejícího se kolečka, a přilepím tavným lepidlem:
Jinak tato čepička má ještě tu výhodu, že lépe odstiňuje IR diodu a fototranzistor: mělo by to tak být přesnější díky méně odrazům. Nicméně já ji všude dávám hlavně proto, že senzor lze v případě potřeby snadno vytáhnout, a zase dát zpět.
Samotné tavné lepidlo jde sundat bezestop, pokud to ale nechcete riskovat, tak navrhuji třeba tuto variantu nalepení na 3M maskovací pásku s otvorem pro diody:
Ale jak už jsem psal, kreativitě se meze nekladou… :D
Tím je vyřešeno, jak bude TCRT5000 držet na vodoměru. Než se dostaneme k odesílání impulzů do HA, tak čidlo ještě zkalibrujeme tak, aby přepínalo digitální stav (1
a 0
) ve správný moment.
Kalibrace čidla TCRT5000
A tou kalibrací je myšleno správné nastavení potenciometru malým hodinářským šroubováčkem. K tomu využijeme jak analogový, tak digitální výstup. Finální verze už bude potom využívat jenom digitální výstup. Nyní potřebujeme senzor dostat do stavu, kdy se s každým litrem přepne digitální digitální výstup z 0 na 1 (nebo obráceně).
Poznámka: Teoreticky tenhle krok můžete přeskočit, resp. potenciometr na TCRT5000 nastavit od oka: prostě jen pustit vodu, a otáčet potenciometrem až do doby, kdy se indikační LED (to je ta blíž pinu D0, ta druhá svítí pořád) bude rozsvěcet a zhasínat střídavě s každým litrem.
Prerekvizity pro tento krok:
- Nainstalované Arduino IDE a v něm nastavený repozitář pro ESP8266 destičky. Návod najdete např. zde.
Začneme tím, že čidlo TCRT5000 připojíme k desce Wemos D1 Mini podle následujícího schématu (deska Wemos D1 Mini
→ senzor TCRT5000
):
5V
/3V3
→VCC
(napájení; TCRT5000 umí 3.3-5V, takže si vyberte)GND
→G
(zem)A0
→A0
(analogový výstup)D0
→D6
(nebo jiný GPIO pin)
Dalším krokem bude nahrání jednoduchého kódu na Wemos D1 Mini přes Arduino IDE, s pomocí kterého potom snadno nastavíme potenciometr:
// Arduino kod pro zkalibrovani TCRT5000 na Wemos D1 Mini const int digital_pin = 12; // GPIO 12 = pin D6 na D1 mini const int analog_pin = A0; // toto zpravidla nemenit void setup() { Serial.begin(9600); pinMode(digital_pin, INPUT); // Serial.println("Prvni hodnota je analogovy vystup, druha hodnota digitalni"); } void loop() { int analog_val = analogRead(analog_pin); int digital_val = digitalRead(digital_pin); Serial.print(analog_val); Serial.print("\t"); if (digital_val == HIGH) { // pokud je digitalni vystup HIGH (tzn. indikacni dioda primo na senzoru je zhasnuta, ale jsem liny to overit], tak... Serial.println(0); // ... do konzole vypiseme nulu } else { Serial.println(analog_val * 1.01); // pokud je digitalni vystup LOW, tak do konzole vypiseme hodnotu analogoveho senzoru +1 % } delay(50); // a to vse kazdych 50 ms, i kdyz staci i mene, klidne 100-150 ms }
Kód čte každých 50 ms výstup analogového i digitálního výstupu ze senzoru, a vypisuje je do konzole. Pokud je digitální výstup 1
, tak se vypisuje jenom analogový výstup; a pokud je digitální výstup 0
, tak vypisuje analogový a znova analogový zvýšený o 1 %. Při zobrazení v grafu potom lze sledovat hranici, kdy se digitální výstup mění z 0
na 1
a obráceně.
Tento kód nahrajeme na desku Wemos D1 Mini. V nastavení Arduino IDE stačí nastavit typ desky a port v Tools v menu nahoře, kde:
- Board:
LOLIN WEMOS D1 R2 & MINI
- Port: podle platformy
Port je na Macu /dev/cu.usbserial-****
, na Windows to bude COM*
. Předtím bude ještě potřeba nainstalovat ovladače pro převodník CH340G
(viz zde pro Windows i Mac).
Potom už stačí jen ve Sketch
zvolit Upload
, kód se zkompiluje, a potom se naflashuje na desku. U Wemos D1 Mini je někdy potřeba těsně před začátkem flashování samotnou desku zresetovat tlačítkem.
Po úspěšném nahrání kódu zkontrolujeme v „terminálu“ (Serial Monitor
), že se tam vypisují nějaké hodnoty podle toho, jak hýbeme kouskem papíru před senzorem. Vlevo analogový výstup (0-1024), vpravo digitální (0/1):
Pokud tam čísla běhají, můžeme ho zavřít a otevřeme si místo něj Serial Plotter
, který bude tyto hodnoty zobrazovat ve formě grafu.
Teď to všechno vezmeme k vodoměru (snad jste doteď dělali na notebooku :D ), čidlo TCRT5000 (už připojené k Wemos D1 Mini) vsuneme do připraveného držáčku, pustíme vodu, a sledujeme, co se děje. Každé otočení kolečka na vodoměru by mělo být dobře vidět. Potom už jen zbývá nastavit potenciometr tak, aby se se druhá linka zobrazovala „vypnutá a zapnutá“ (což značí přechod mezi HIGH a LOW stavem z digitálního výstupu TCRT5000) vždy zhruba v půlce přechodu. Zhruba nějak takhle:
V tento moment se digitální výstup z TCRT5000 přepíná s každým jedním otočením litrové kolečka na vodoměru a kus práce tak máme za sebou.
V dalším článku se podíváme na naflashování ESPHome na Wemos D1 Mini, nadefinování senzoru a konečně začneme hodnoty vidět v Home Assistantu.
Ověte se mi, prosím.
Měl bych pro Vás doplnění článku – univerzální uchycení čidla pro EMBRA vodoměry.
—
Petr Pokluda