Měření srážek a dešťové vody
Tento článek bude o měření hladiny v nádrži na dešťovou vodu v kombinaci se srážkoměrem. Připojení a nastavení serveru se již věnovat nebudu, půjdeme rovnou na věc a ukážeme si jak použít ultrazvukový modul na měření vzdálenosti a jednoduchý srážkoměr.

V našem domě se nachází 10m3 nádrž na dešťovou vodu. Je za domem a její víko je aktuálně zadeklované těžkým plechem. Dešťovou vodu hodně užíváme k závlaze zahrady, zeleniny, umívání apod. Takže vědět kolik jí ještě máme, kolik můžeme kde použít a jak s ní hospodařit se prostě hodí. Chodit se tam pokaždé koukat by jistě šlo, ale není to úplně pohodlné a hlavně by s tím nebyla žádná zábava. Proto jsem se rozhodl, že chci nějak měřit a v čase ukládat množství vody v nádrži.



Zvažoval jsem různé přístupy a opět nejdřív hledal hotová řešení, leč nenašel. Po prozkoumání všemožných plováků apod. mě zaujala možnost měřit hladinu ultrazvukovým senzorem vzdálenosti. Z počátku jsem se obával, že bude problém, že měření nebude na hladině kapaliny fungovat, ale ukázalo se to (v rámci možností) jako velmi spolehlivé řešení.

Ultrazvukových senzorů se prodává vícero. Já jsem sáhnul po vodotěsné verzi. Dle vzhledu zakončení to je nejspíš to samé nebo hodně podobné co se používá v autech pro parkovací senzory. Senzor umí měřit od cca 20cm do 4m vzdálenosti, přesnost měření 1cm, což je úplně dostačující.
První prototyp jsem si udělal nejdříve v obyčejné IBC nádrži na chalupě, kde jsme na jaře 2020 byli schovaní před covidem. Senzor jsem protáhnul nějakou trubkou a prkýnkem a postavil na horní díru nádrže.



Přikládám ukázku kódu do Arudina. Nebudu tentokrát vypisovat celý kód, pro ukázku MQTT připojení apod. se můžete podívat do jiných článků.
#include <NewPing.h>
//.. some more includes
// Sonar setup
#define pinTrigger D7
#define pinEcho D8
#define maxDistance 450
NewPing sonar(pinTrigger, pinEcho, maxDistance);
//.. some other definitions
void sendMeasurments()
{
// Get water level
int distance[5];
for (int i = 0; i < 5; i++)
{
delay(2000);
distance[i] = sonar.ping_cm();
}
// Send message
snprintf (msg, MSG_BUFFER_SIZE, "{\"distance\": [%d,%d,%d,%d,%d]}", distance[0], distance[1], distance[2], distance[3], distance[4]);
Serial.print("Publish message: ");
Serial.println(msg);
client.publish(mqtt_topic, msg);
}
void setup() {
// Wifi, mqtt, serial or other setup
// Sonar is ready no need to set anything more
}
void loop()
{
// some simple loop to check mqtt and wifi connection and call sendMeasurments() in specified interval
}
Jak si můžete všimnout, osvědčilo se mi naměřit těch hodnot více s časovým odstupem. Posléze pak dělám to, že je průměruji a kontroluji, čímž se mi dostává trochu čistších grafů. To pak probíhá už na serveru v Node-RED a je to celkem primitivní (i když zápis vypadá dlouhý). Kód je už pro finální verzi na velké nádrži doma.
p = JSON.parse(msg.payload);
var distances = [];
var count = 0;
for(var i = 0; i < 5; i++)
{
if(p.distance[i] != 0)
{
distances[count] = p.distance[i];
count++;
}
}
if(count == 0)
{
msg.payload = -1;
return msg;
}
var distance = 0;
for(var i = 0; i < count; i++)
{
distance += distances[i];
}
distance = distance / count;
//node.warn("Calculated distance: " + distance);
if (distance < 20)
{
distance = 20;
}
var d = distance * 0.01; // Centimeters to meters
var H = 1.62;
var l = H - d;
var v = l * 7.2 * 1000;
// max = 10440
if(v < 0)
{
v = 0;
}
msg.payload = v;
return msg;
Na začátku odstraním všechny nuly, které občas senzor vrací a zbylé hodnoty zprůměruji. Pokud je naměřená hodnota menší než 20cm, tak bude měření nejspíš už nepřesné a tak zarovnám hodnotu na 20. Následuje výpočet objemu. Naše nádrž má na výšku 162cm, přepad je umístěn cca 20cm pod okrajem. Tzn. voda by nikdy neměla být výš než těch požadovaých 20cm. Hodnota 7,2 udává kolik litrů vody znamená zvýšení hladiny o 1mm. Když tedy počítáme, že maximálně dosáhneme výšky hladiny 1,42cm, tak nám vychází, že celkový objem nádrže je 10 224 litrů. Ten údaj 10 440 je reálně naměřený objem (délka x šířka x hloubka), který jsem si pak nějak zaokrouhlil, aby se to blížilo. Nejde nám tu o nějakou super přesnost, v praxi stačí, když to sedí na stovky litrů až kubíky.

V reálu mám v Node-RED jak vidíte ještě nějaké teploměry, to abych věděl, jestli mi už nádrž (není izolovaná) nezamrzá. Výše uvdený kód je pak pro node „water volume calculation“.
A když takto data sbíráme, nezbývá než si je pak zobrazit v Grafaně. Například takto. Toto je původní verze pro kubíkovou IBC nádrž na chalupě.

Takže po spolehlivém otestování na chalupě nezbývalo než to samé provést i doma. Senzor je protažen pod plechem a je tam úplně primitivně nalepen na mamuta zespodu v takovém místě, aby měl volný „výhled“ na hladinu, tzn. aby okolo nebyly nějaké hadice a čerpadlo nebo další věci co jsou v nádrži.
Ten senzor má nějaký úhel výhledu pod kterým kouká, proto si myslím, že použítí v 4m dlouhé úzké trubce by bylo problematické. Ale v nádržích, kde je velká plocha hladiny to funguje pěkně.


Když už měříme kolik máme dešťové vody, je zajímavé k tomu přidat i možnost měřit množství srážek. Toto za vás dneska obstará kdejaká meteostanice, který má tento senzor. Já žádnou meteostanici nemám, takže jsem si objednal extra srážkový senzor, například tento. Já to tehdy obejdnával odněkud z číny, ale je to to samé. Je to velmi primitivní zařízení, vevnitř je vanička, která když se naplní, tak se překlopí a pošle impulz. Počítání impulzů je pak tedy analogické jako u měření spotřeby elektřiny.


Tento senzor udává 0.2794mm / impulz. Pro test do toho stačí nalít známé množství vody a poslouchat, kolikrát to „klapne“, mě to celkem sedělo. Senzor pak umístit někam ven, ideálně mimo dosah dětí a rozverných kamarádů.
Co jsme z grafů zjistili?
Přidám pár zajímavostí, k čemu nám to bylo dobré.
- Věděli jsme přesně kolik máme vody a jak s ní hospodařit (v kombinaci s předpovědí počasí)
- Na jaře bylo krásně vidět (v kombinaci se srážkoměrem), že čisté gajgry na okapových svodech mají zásadní vliv na účinnost sběru dešťovky (při stejném množství srážek začalo přibývat výrazně více) – tzn. fakt tam je dobrý občas kouknout a vyčistit.
- Na začátku bylo potřeba nádrž opravit – vyčistit a zelepit díry. Přišli bychom na to samozřejmě i jinak, ale sledování grafů pomohlo odhalit že nádrž teče a je potřeba jí znovu zkontrolovat. Pak bylo již vše bez problému.
- Měření spotřeby elektřiny odhalilo, že má instalace čerpadla nebyla tak bezproblémová. Čerpadlo se má po dosažení určitého tlaku vypnout, tzn. když vypnu všechny kohouty na hadicích, mělo by přestat čerpat. Ne však pokud je někde nějaká netěsnost. Větší spotřeba elektřiny v kombinaci s tím, že jsme věděli, že je čerpadlo spuštěné a že voda v nádrži neubývá vedlo ke zjištění, že v rozvodech v nádrži jsou netěsnosti, díky kterým čerpadlo běží neustále. A ten odběr proudu nebyl malý. Řešení je prosté – čerpadlo důsledně vypínat a na příští léto všechny rozvody přetěsnit. Nicméně bez měření spotřeby bychom na to nepřišli. Za jeden den běhu čerpadla se tam propálilo zhruba 10kWh energie navíc.

2 thoughts on “Měření srážek a dešťové vody”
Super !
Myslíte, že pomohlo dát tento senzor do trubky – směrovat a „zaostřit“ ultrazvuk v případě že jeje chystám využít do studny s pažením a trubkou z čepadla?
Nemám s tím zkušenost, ale čekal bych že v úzké trubce to nebude fungovat. Ostatně – dá se to asi snadno vyzkoušet – pokud máte na autě parkovací senzory (to je technicky to samé), tak stačí před senzor strčit trubku a sledovat zda se chová jak má. Ale myslím, že nebude protože ten pozorovací úhel je myslím kolem 120 stupňů.