Půdní vlhkoměr je vstupní modul pro Arduino. Tento modul umožňuje detekovat vlhkost půdy a substrátů. Sada se skládá z měřící sondy a zesilovače signálu. Výstupem měřícího zesilovače je jak analogový výstup, tak digitální signál, u kterého můžeme nastavit detekční práh pomocí trimru na modulu. Záleží tedy pak na nás, jestli chceme provádět sami detekci hodnoty analogového výstupu nebo číst pouze logickou hodnotu 0 a 1.
Pro napájení celého modulu je možné využít napájecí napětí 3,3 nebo 5 Voltu, přičemž dle použitého napětí bude i na výstupu modulu signál 0 až 3,3 nebo 5 V.
Pro úspěšné propojení modulu vlhkoměru a Arduino desky je nutné zapojit celkem 4 vodiče. Propojíme VCC s pinem D4, GND se zemí Arduina, D0 s pinem D3 a A0 s pinem A0. Jak si můžete všimnout, napájecí pin VCC jsme připojili na datový pin Arduina, abychom mohli programově zapínat napětí pro modul (důvod zjistíte v následujícím textu). Pro piny VCC a D0 pak můžeme zvolit i jiné digitální piny, podobně jako pro A0 zvolit jiný analogový pin. Ale všechny tyto změny je nutné provést také na začátku programu.
Ukázkový kód obsahuje na svém začátku nastavení čísel propojovacích pinů společně s vytvořením proměnné, do které budeme ukládat čas poslední kontroly.
V podprogramu setup nejprve zahájíme komunikaci po sériové lince. V dalším kroku nastavíme směry všech propojovacích pinů a vypneme napájecí napětí pro modul vlhkoměru.
Nekonečná smyčka loop obsahuje důležitou if podmínku, která kontroluje rozdíl aktuálního času a poslední kontroly. Pokud je tento rozdíl větší než tři sekundy, provedeme samotné měření (v praxi použijeme například desetiminutový interval, tzn. 600 000 ms). Na začátku měření zapneme napájecí napětí pro měřící modul a vyčkáme 100 ms pro ustálení napětí. Následně načteme do proměnných analogovou a digitální hodnotu. Pro ukázku nyní můžeme vypsat hodnotu analogového vstupu po sériové lince a provést kontrolu digitálního vstupu. Pokud je tedy tento vstup aktivní, vypíšeme si o tom informaci po sériové lince. Zde bychom také mohli přidat kontrolu překročení určité hodnoty, při které se například sepne čerpadlo (if (analog > 100) {..}). Po kontrole digitálního vstupu pak pro správné formátování textu vytiskneme nový řádek, vypneme napětí pro modul vlhkoměru a uložíme do časové proměnné aktuální čas. Tím končí detekovaná kontrola a Arduino pokračuje do nové detekce rozdílu času pro dosažení kontroly přibližně každé tři sekundy.
// Půdní vlhkoměr // nastavení čísel propojovacích pinů #define analogPin A0 #define digitalPin 3 #define vccPin 4 // proměnná pro uložení času kontroly unsigned long cas = 0; void setup() { // zahájení komunikace po sériové lince // rychlostí 9600 baud Serial.begin(9600); // nastavení datových pinů jako vstupů // a napájecího pinu jako výstupu pinMode(analogPin, INPUT); pinMode(digitalPin, INPUT); pinMode(vccPin, OUTPUT); // vypnutí napájecího napětí pro modul digitalWrite(vccPin, LOW); } void loop() { // pokud je rozdíl mezi aktuálním časem a posledním // uloženým větší než 3000 ms, proveď měření if (millis() - cas > 3000) { // zapneme napájecí napětí pro modul s krátkou pauzou // pro ustálení digitalWrite(vccPin, HIGH); delay(100); // načtení analogové a digitální hodnoty do proměnných int analog = analogRead(analogPin); bool digit = digitalRead(digitalPin); // výpis analogové hodnoty po sériové lince Serial.print("Analogovy vstup: "); Serial.print(analog); if (digit == HIGH) { Serial.print(" | Detekovano prekroceni hranice!"); } // ukončení řádku na sériové lince Serial.println(); // vypnutí napájecího napětí pro modul digitalWrite(vccPin, LOW); // uložení aktuálního času do proměnné pro další kontrolu cas = millis(); } }
Po nahrání ukázkového kódu do Arduino desky s připojeným modulem půdního vlhkoměru dostaneme například tento výsledek:
// suché elektrody Analogovy vstup: 1001 // částečné ponoření do vody Analogovy vstup: 801 | Detekovano prekroceni hranice! // test v zalité hlíně Analogovy vstup: 612 | Detekovano prekroceni hranice!
Půdní vlhkoměr je jednoduše použitelný vstupní modul pro Arduino. Tento modul se často využívá při vytváření chytrých květináčů a truhlíků, kdy se pomocí jej detekuje vlhkost půdy, v které je vložený. Pokud se pak dostane vlhkost pod námi nastavenou hranici, můžeme to vlhkoměrem detekovat a spustit například automatickou zálivku nebo informovat uživatele, aby zalití provedl sám.
Jak jste si mohli všimnout v programu, ovládáme u modulu nejen načítání dat, ale také zapínáme a vypínáme napětí pro jeho napájení. Toto chování je zvoleno pro dosažení co největší životnosti měřící sondy. Pokud bychom totiž nechali sondu běžet stále, velmi rychle by začala degradovat díky probíhající elektrolýze mezi jejími elektrodami. Řešením je provádět měření jednou za čas, přičemž tím i ušetříme elektrickou energii. A pokud se Vám po delší době sonda zničí, můžete zakoupit pouze samotnou sondu bez měřícího zesilovače.
Seznam použitých komponent:
https://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html
https://dratek.cz/arduino/1399-pudni-vlhkomer-modul-pro-arduino-1474354607.html