Avtor: mag. Vladimir Mitrović
Opisujemo pametni domači vrt, ki bo s pomočjo tehnologije eni rastlini zagotovil optimalne pogoje za rast in razvoj.
V prejšnjem nadaljevanju smo se seznanili z masko za Arduino UNO R4 WiFi, ki vsebuje vso potrebno elektroniko, zdaj pa sledi opis programske logike, ki predstavlja tudi navodila za uporabo in nastavitev parametrov.
Programska logika in navodila za uporabo
Kot smo že omenili, pametni domači vrt poganja mikrokontroler RA4M1 na plošči Arduino UNO R4 WiFi. Čeprav gre za zelo zmogljiv mikrokontroler, smo ga morali vseeno naučiti, kaj naj počne.
Ta vsebina je samo za naročnike
Ustrezni program je napisan v Arduino IDE 2.3.5 in je sestavljen iz treh funkcionalnih enot. Po inicializaciji se zažene glavna programska zanka, v kateri se večkrat pridobivajo podatki iz ure realnega časa, berejo se senzorji in položaj krmilne palice, krmili se intenzivnost osvetlitve in delovanje ventilatorja, po potrebi pa se vklaplja in izklaplja vodna črpalka. Tretji del je konfiguracija, kjer je v interaktivnem načinu (krmilna palica + zaslon) mogoče spreminjati vse parametre, ki določajo način delovanja naprave.


Inicializacija
Takoj po vklopu program vzpostavi komunikacijo z zaslonom, uro in vsemi senzorji, pridobi potrebne parametre za nastavitev intenzivnosti osvetlitve in delovanja ventilatorja, izpiše pozdravno sporočilo in nato aktivira normalno delovanje. Pozdravno sporočilo na sliki 11 je treba prilagoditi priložnosti, za katero je bil program napisan, in ga je mogoče popolnoma izpustiti.
Normalni način dela – dnevni režim
V normalnem načinu se program izvaja v zanki, v kateri se na zaslonu izmenično prikazujejo naslednji podatki:
zgornja vrstica prikazuje podatke, pridobljene iz ure realnega časa – dan v tednu, datum in čas;
v drugi vrstici so prikazani podatki, pridobljeni iz senzorja BME280 – temperatura, vlažnost in zračni tlak;
tretja vrstica je namenjena izpisu različnih sporočil, npr. ali je črpalka vklopljena in ali je treba v rezervoar dodati vodo;
V četrti vrstici se izmenično prikazujejo izmerjena vlažnost tal, nastavljena intenzivnost osvetlitve in intenzivnost delovanja ventilatorja.
Program nadzoruje intenzivnost LED osvetlitve z uporabo pulzno-širinske modulacije: svetleče diode se izmenično vklapljajo in izklapljajo v hitrem ritmu, intenzivnost svetlobe pa je odvisna od razmerja vklop:izklop. Na voljo je 16 stopenj svetilosti in stanje ugasnjenih LED-ic. V normalnem načinu lahko intenzivnost osvetlitve spreminjate s premikanjem krmilne palice gor in dol.
Program nadzoruje intenzivnost delovanja ventilatorja z uporabo pulzno-širinske modulacije: ventilator se izmenično vklaplja in izklaplja v hitrem ritmu, intenzivnost vrtenja pa je odvisna od razmerja vklop:izklop. Na voljo je skupno 9 stopenj intenzivnosti vrtenja in stanje ugasnjenega ventilatorja (odvisno od vrste ventilatorja je možno, da se ne bo vrtel niti pri nekaj nižjih nastavljenih vrednostih). V normalnem načinu lahko intenzivnost vrtenja spremenite s premikanjem krmilne palice v smeri levo-desno.
Ventilator ne deluje neprekinjeno, temveč se vklopi vsakih 15 minut za približno 5 minut. Le če temperatura okolice preseže 30 °C, bo ventilator deloval neprekinjeno in hladil napravo.
V normalnem načinu delovanja program bere tudi senzor vlage v zemlji in po potrebi vklopi in izklopi črpalko:
črpalka se bo vklopila, če vlažnost zemlje pade pod najnižjo dovoljeno vrednost, npr. pod 30 %;
Črpalka se bo izklopila, če vlažnost zemlje preseže največjo dovoljeno vrednost, npr. nad 70 %
Ko je črpalka vklopljena, ne bo delovala neprekinjeno, temveč v sunkih: na primer 10 sekund vsakih 30 sekund. To daje vodi čas, da se porazdeli po zemlji in izenači vlažnost, zato bo postopek merjenja vlažnosti bolj smiseln. Pragove vlažnosti in intervale delovanja črpalke je mogoče spremeniti v postopku konfiguracije naprave, da se doseže optimalen učinek v določenem primeru.
Med delovanjem črpalke se na zaslonu prikaže ustrezno sporočilo. Če črpalka v 5 minutah ne navlaži tal, se na zaslonu prikaže sporočilo »Dodajte vodo!« kot znak, da je rezervoar prazen. V tem primeru je treba v rezervoar dodati vodo in rastlino zalivati ročno, da se vzpostavi normalen postopek zalivanja (lahko pa napravo na kratko izklopite in nato vklopite).


Normalni način dela – nočni način
Prej opisana logika programa se nanaša na dnevni način delovanja, tj. obdobje od 7:00 do 19:00 (te vrednosti so prav tako nastavljive). Izven tega obdobja program deluje v nočnem načinu: vsi senzorji se berejo, sporočila se izpisujejo na zaslonu, vendar so LED osvetlitev, ventilator in črpalka izklopljeni. Osvetlitev ozadja zaslona je prav tako izklopljena, tako da naprava v temi ne sveti moteče.
Če si želimo ogledati odčitke ali spremeniti parametre v nočnem načinu, je dovolj, da na kratko pritisnemo ali premaknemo krmilno palčko: osvetlitev ozadja zaslona se bo vklopila in vse funkcije bodo na voljo. Naprava se po kratkem času samodejno vrne v nočni način.
Konfiguracija
Nastavitve, ki smo jih spremenili med normalnim delovanjem, kot sta intenzivnost osvetlitve ali delovanje ventilatorja, bodo ostale v veljavi, dokler ne izklopimo napajanja naprave: ko jo ponovno vklopimo, bodo te nastavitve prevzele svoje začetne vrednosti. Če želimo spremeniti začetne vrednosti, moramo napravo konfigurirati.
Postopek konfiguracije omogoča spreminjanje datuma in časa, osvetlitve in intenzivnosti vetra, načina delovanja črpalke in obdobja nočnega načina (slika 12), aktivira pa se s pritiskom in držanjem krmilne palice.
S premikanjem igralne palice navzgor ali navzdol (levi stolpec na sliki 12) izberemo, kaj želimo konfigurirati, in izbiro potrdimo s pritiskom na igralno palico. V vsakem od tako izbranih menijev (desni stolpec na sliki 12) se po nastavitvah premikamo s premikanjem igralne palice levo in desno. Izbrana nastavitev je označena z znakom »^^«, njeno vrednost pa spreminjamo s premikanjem igralne palice navzgor in navzdol.
datum+ura: možno je spremeniti datum, mesec, leto (2025–2099), uro in minute. Dan v tednu se izračuna samodejno. Ob vnosu so sekunde nastavljene na 0;
svetloba+veter: možno je vnesti začetno vrednost intenzivnosti svetlobe (0–16) in vetra (0–9; odvisno od vrste ventilatorja je možno, da se pri nekaj nižjih nastavljenih vrednostih ne bo vrtel);
vlažnost tal: možno je vnesti spodnjo mejo vlažnosti, pri kateri se črpalka vklopi (10–40 %), zgornjo mejo vlažnosti, pri kateri se črpalka izklopi (60–90 %), in interval delovanja črpalke (2–28/30 s);
Nočni način: vnesti je mogoče začetni čas (18:00–23:00) in končni čas nočnega načina (05:00–10:00).
Vse menije zapustite z daljšim pritiskom na krmilno palico, pri čemer se posodobljene vrednosti datuma in časa zapišejo v pomnilnik ure realnega časa, vse ostale pa v EEPROM mikrokonotrolerja, tako da ostanejo shranjene tudi v primeru izpada električne energije.
Opis programske logike vsebuje tudi navodila za uporabo in konfiguracijo pametnega domačega vrta. Program ima več kot 1200 vrstic kode in ga tukaj ne bomo analizirali, lahko pa ga brezplačno dobite v uredništvu revije.
Udeleženci Poletne šole tehničnih dejavnosti so ustvarili 30 pametnih domačih vrtov in vsi so delovali, kot je opisano!
Izziv izven Arduino IDE
Pisanje tako obsežnega programa za Arduino IDE je za enega Bascomaša kar precejšen izziv. Ampak nisem imel izbire: Bascom-AVR ne podpira mikrokontrolerja RA4M1 …
Prvi korak je potekal gladko: po namestitvi plošče Arduino UNO R4 WiFi se je v meniju primerov pojavilo več primerov, prilagojenih tej plošči, in lahko sem začel z raziskavo. Najprej sem moral oživiti zaslon I2C! Izkazalo se je, da prva knjižnica, ki sem jo namestil, ni mogla pravilno pisati na zaslon 16×4, zato sem uporabil nasvet umetne inteligence (ChatGPT). To je bila zelo smiselna poteza, saj je po namestitvi knjižnice:

Moj zaslon je začel brez vprašanj ubogati programske ukaze. V drugem poskusu je bila izbrana pravilna knjižnica, ki podpira BME280, senzor temperature, vlažnosti in zračnega tlaka; vključiti je bilo treba:

Z uro realnega časa je bilo več težav. Mikrokontroler RA4M1 ima vgrajen RTC in med primeri programov boste našli vse, kar potrebujete za njegovo uporabo. Vendar se je izkazalo, da vgrajeni RTC ni deloval pravilno, odstopanje je bilo več minut na dan. Po iskanju napake v programu sem pogledal po spletnih forumih in naletel na enake izkušnje. Nato sem poiskal shemo plošče R4 in na njej nisem našel niti enega kvarca … Če delo odličnega mikrokontrolerja in njegovih RTC-jev resnično temelji na notranjih oscilatorjih, potem je to nenavadna opustitev s strani načrtovalca Arduino UNO R4 plošče! To me je usmerilo k že znanemu in zanesljivemu modulu ZS-042, ki je bil na koncu vključen v projekt. Zagnal sem ga z uporabo:

in dosegel želeno točnost.
Za uporabo EEPROM-a je bilo potrebno vključiti ustrezno knjižnico:

in po nasvetih v primerih delo z EEPROM-om ni predstavljalo težav!
Na koncu bi rad opozoril na nekaj, česar nikoli ne smete storiti oziroma, če že, bodite zelo previdni! Ker sem bil navajen mikrokontrolerjev z veliko manj pomnilnika, sem po končanem programu začel racionalizirati. V programih za Arduino boste najpogosteje srečali celoštevilske spremenljivke tipa »int«. Ta vrsta spremenljivke lahko shranjuje pozitivna in negativna števila in glede na vrsto plošče Arduino in vgrajenega mikrokontrolerja zaseda 2 ali 4 bajte.
V mojem programu se je to zdelo kot potrata virov, zato sem poskušal prilagoditi tipe spremenljivk dejanskim vrednostim, ki bi se vanje zapisale. Za vrednosti do 255 se je zdela zadostna spremenljivka tipa »uint8_t« (1 bajt), za vrednosti do 65535 pa spremenljivka tipa »uint16_t« (2 bajta). Oba tipa lahko shranita le pozitivna števila, kar je bilo v skladu z mojimi potrebami. Ko sem popravil neskladja, ki jih je zaznal prevajalnik, se je zdelo vse v redu, dokler se nenadoma ni pojavila napaka pri branju leta iz ure realnega časa in je bil dan v tednu zato napačno prikazan.
Med racionalizacijo sem pozabil, da imajo knjižnični programi svoja pravila, ki jih ne moremo kar tako spregledati … Nekaj časa sem potreboval, da sem vse preveril in uskladil, a sem se iz tega nekaj naučil: bodite previdni s podprogrami, ki jih niste napisali sami!
Opomba: program HZTK_2025_terarij.ino lahko brezplačno dobite v uredništvu revije!
