Zalivalni krmilnik MB2014-V1, izdelan z Arduino MEGA

Odločil sem se izdelati Zalivalni krmilnik MB2014-V1. Zakaj? Osnova zdravega življenja je v lastni pridelavi vrtnin, če nam le to dopušča čas in če imamo na razpolago vsaj malo vrta. Če si lahko sami pridelamo sezonske povrtnine, naredimo ogromno za lastno zdravje. Pred kratkim sem prebral, da če zelenjava ni dobra za polže, potem tudi za ljudi ni. In takšno nezdravo zelenjavo (npr. solato) imamo v večini na razpolago v trgovinah. Doma si lahko pridelamo bistveno bolj zdravo zelenjavo, če ji le dodamo pravilno količino hrane in vode. Predvsem zalivanje je v zadnjem času čedalje bolj potrebno, saj so prisotne vedno bolj ekstremne vremenske razmere (visoke temperature in daljša obdobja brez dežja). Če pa še pomislimo na paradižnik, ki ga v mnogih vrtovih vidimo pokritega, da ni izpostavljen »kislemu« dežju, pa pridemo do situacije, da je prisotna potreba po vsakodnevnem zalivanju (tudi v deževnih dnevih).

Slika 1: Prikaz funkcije zalivalnega krmilnika

Uvod je bil bolj »vrtnarski«, nadaljevanje pa bo izključno tehnično – elektronika, programiranje in preizkušanje. Pa preidimo na opis funkcionalnosti delovanja zalivalnega krmilnika. Osnovna funkcija je regulacija vlažnosti zemlje. Krmilnik ima možnost regulacije 4 sekcij. Osnova za regulacijo je senzor, ki ga potisnemo v zemljo in nam meri vlažnost. Na osnovi podatka vlažnosti zemlje in želene vlažnosti zemlje zalivalni krmilnik ob upoštevanju histereze vklopi/izklopi posamezen izhod, na katerega imamo priklopljen elektromagnetni ventil za posamezno sekcijo.

Izbral sem komponente, ki so dobavljive na trgu s čim manj lastnega spajkanja. Odločil sem se, da bom sestavil zalivalni krmilnik iz izdelanih komponent, ki jih bom sestavil v uporabno celoto. Končni izdelek sem skušal sestaviti z najmanj stroški. Komponente sem testiral nekaj mesecev. Najprej sem naredil enostaven merilnik vlažnosti zemlje z Arduinom NANO, ki je prikazoval le vlažnost. Naslednji krmilnik je bil izdelan z Arduinom UNO in je reguliral dve sekciji. Oba izdelka sta imela napajanje senzorjev vlažnosti zemlje nenehno vklopljeno. Posledica je bila obraba senzorjev in čez čas sprememba rezultata ob isti vlažnosti zemlje. Na osnovi teh spoznanj sem v zalivalnem krmilniku sprogramiral merjenje vlažnosti tako, da je možno nastavljati čas med meritvami in nato vklopim napajanje merilnega pretvornika le za 1 sekundo. Tako sem obrabo senzorjev bistveno zmanjšal.

Pri načrtovanju logike delovanja krmilnika sem si zadal naslednje zahteve:

  • Vsaka sprememba na Joystick-u (pritisk tipke SW ali premik položaja) bo vklopila osvetljenost ozadja LCD za eno minuto
  • Na osnovnem prikazu (MENI 1) bo na zaslonu prikazana trenutna vrednost vlažnosti zemlje, želena vrednost vlažnosti zemlje in stanje zalivanja (če zaliva, prikaže »1«, drugače »0«)
  • MENI 2 do 5: nastavljanje želene vrednosti vlažnosti za sekcije od 1 do 4
  • MENI 6: nastavljanje želene vrednosti histereze med vklopom in izklopom sekcij
  • MENI 7 do 10: nastavljanje vklopa/izklopa delovanja zalivanja sekcij od 1 do 4
  • MENI 11: nastavitev časa, ki preteče med posameznimi meritvami vlažnosti zemlje (10 s do 2.550 s, v 10 s intervalih)
  • MENI 12: nastavitev časa zalivanja pri ugotovitvi, da ni dovolj vlage (1 min do 30 min)
  • MENI 13: nastavitev časa, ki poteče pred ponovnim zalivanjem (koliko minut bomo počakali, da se vlaga v zemlji enakomerno porazdeli in ustali – 2 min do 60 min)
  • MENI 14 do 17: umerjanje senzorja vlažnosti (nastavitev 100 % vlažnosti), ki je nameščen na sekcijah od 1 do 4
  • Po menijih se premikamo krožno, po končanem zadnjem meniju se vrnemo v osnovni prikaz
  • Joystick uporabimo za vse nastavitve krmilnika:
    • če držimo tipko SW 0,5 sekunde, se pomaknemo na naslednji meni (krožni sistem prehoda med meniji), hkrati pa pri izhodu iz določenega menija shranimo nastavljene vrednosti v EEPROM mikrokrmilnika
    • premik položaja gor pomeni prištevanje vrednosti ali vklop (iz OFF v ON)
    • premik položaja dol pomeni odštevanje vrednosti ali izklop (iz ON v OFF)
    • premik položaja levo ali desno pomeni možnost prikaza drugih vrednosti na LCD zaslonu; v osnovnem meniju pomik desno povzroči prikaz stanja aktivnosti posameznih sekcij (katera je na ON – aktivna in katera OFF – trajno izklopljena)

Osnova Zalivalnega krmilnika je Arduino MEGA. V krmilniku še imamo štirivrstični LCD prikazovalnik (20×4), Joystick, dva DC/DC pretvornika navzdol z LM2596 in usmernik. Ob tem še imamo tranzistorje BC547B, ki so uporabljeni kot stikala. Uporabimo jih za vklop osvetlitve LCD in vklop napajanja posameznih merilnih pretvornikov za senzorje vlažnosti.

Slika 2: Vgrajene komponente

Slika 3: Blokovna shema

Za napajanje krmilnika sem uporabil transformator 230 V / 24 V AC. Napajalni transformator sem priklopil na programsko uro, ki sem jo nastavil na delovanje v nočnem času za nekaj ur. To sem naredil iz dveh razlogov. Prvi je racionalizacija porabe energije (krmilnik napajamo le v nočnem času). Drugi razlog je občasen vnovični zagon mikrokrmilnika, če bi slučajno prišlo do zaustavitve programa.

24 V izmenično napajalno napetost sem najprej z usmernikom usmeril in tako dobil 34 V enosmerne napetosti. Za znižanje napetosti sem uporabil dva DC/DC pretvornika z LM2596, ki imata izkoristek do 92 % in omogočata do 3 A električnega toka. Prvega sem uporabil za znižanje napetosti iz 34 V na 7 V, ki sem jo uporabil za napajanje Arduino MEGA. Drugi DC/DC pretvornik sem uporabil za znižanje napetosti iz 34 V na 24 V. To napetost potrebujem za napajanje močnostnega krmilnika, ker so na izhode priklopljeni 24 V enosmerni ventili. Smiselnost uporabe DC/DC pretvornika je v zmanjšanju izgub. Pri izkoristku okrog 90 % in zmanjšanju napetosti za 10 V pri toku 1 A to pomeni, da imamo izgube okrog 1 W. Če bi se odločili za linearni način zniževanja napetosti (stabilizator 7824), bi imeli izgub skoraj 10 W. Vgrajeni močnostni krmilnik temelji na integriranem vezju L298N, ki je v osnovi dvojni H-most in je zgrajen za krmiljenje enosmernih motorjev. Ima 4 izhode, ki zmorejo poganjati do 2 A toka na posameznem izhodu. Priklopljeni elektromagnetni ventili imajo porabo toka pod 200 mA, zato je ta močnostni krmilnik primeren.

Joystick ima napajanje 5 V DC ter dva analogna izhoda (x in y pomik). Ob tem ima še stikalo, ki odreagira na pritisk smerne tipke. Joystick modul je iz PS2. Napajanje sem porabil iz Arduina MEGA, ki ima +5 V izhod.

LCD prikazovalnik je štirivrstični. V vsaki vrstici ima 20 mest za izpis znakov iz ASCII tabele. Tekst se izpisuje v beli barvi na modri podlagi. Krmiljenje osvetlitve LCD sem izvedel s tranzistorjem BC547B, na katerega sem iz Arduina izhoda 37 pripeljal signal na bazo preko upora 2,2 kE. Emitor sem vezal na GND. Na kolektor sem dal upor 68 E ter drugi priključek upora priklopil na negativni priključek osvetlitve LCD (16. priključek). 15. priključek  LCD sem priklopil na +5 V.

Napajanje merilnega pretvornika vsakega senzorja vlažnosti zemlje sem naredil na podoben način. Na bazo sem preko upora 16 kE pripeljal signal za napajanje, emitor sem vezal na GND, kolektor pa na GND merilnega pretvornika.

Programiranje

Želene nastavljene vrednosti se po vsaki spremembi shranijo v EEPROM. S tem smo naredili napravo bolj funkcionalno, saj nam vrednosti ohrani tudi po izklopu. Hkrati je potrebno paziti, da ne vpisujemo prevečkrat, saj ima EEPROM omejeno število vpisov.

Veliko časa sem porabil ob razmišljanju, kako se lotiti zapisa programske kode, da bi bilo možno preko menija umerjati senzor merjenja vlažnosti zemlje. Merilni pretvornik nam na analognem izhodu da vrednosti od 0 V do nekje 3,7 V. Prva vrednost je, ko je senzor v 100 % suhi zemlji, oziroma v zraku, druga vrednost pa je analogna izhodna napetost, ko je senzor v vodi, oziroma v zemlji, ki je 100 % prepojena z vodo. Umerjanje je pomembno tudi zaradi dejstva, da imamo senzorje vlažnosti zemlje, ki izvajajo meritev na uporovnem načinu. Posledično to pomeni, da teče med elektrodama enosmerni tok, ki obrablja prevodni material na senzorju. Zaradi tega se efektivna merilna površina manjša in je potrebno po določenem času senzor ponovno umeriti.

Pa preidimo na programsko kodo. Ob zagonu programa najprej preberemo nastavljene vrednosti parametrov zalivanja. Te podatke smo shranili v EEPROM, ker jih moramo imeti ohranjene tudi takrat, ko zmanjka napajanja in se mikrokrmilnik ponovno vklopi.

Sledi branje analognega izhoda merilnega pretvornika senzorja vlažnosti. Tukaj se je izkazalo, da je potrebno vklopiti vsak merilni pretvornik ločeno, saj v nasprotnem primeru ne dobimo primerljivih rezultatov. Pri umerjanju posameznega senzorja (umerjanje analogne izhodne napetosti pri 100 % vlažnosti zemlje) je vklopljen le en merilni pretvornik in tudi tukaj je pri merjenju trenutne vrednosti vlažnosti potrebno vklapljati napajanja merilnih pretvornikov ločeno. Najprej vklopimo digitalni izhod za napajanje merilnega pretvornika, počakamo 1.000 ms, da se meritev umiri in preberemo analogno vrednost. Sledi še pretvorba iz 0 do 1023 na 0 do 100 in nato preračun na absolutno vrednost (da bo pri analognem izhodu okrog 3,7 V prikazovalo 100 % vlažnost).

S pritiskom na tipko vstopimo v menije. Primer prvega menija je v nadaljevanju. Tukaj lahko nastavljamo želeno vrednost vlažnosti na sekciji 1. Za premik v naslednji meni za pol sekunde pridržimo stikalo na Joysticku. V prikazanem meniju beremo le eno analogno vrednost izhoda na Joysticku, saj imamo le možnost povečevanja ali zmanjševanja želene vrednosti vlažnosti.

Funkcija »krmiljenje_izhodov« nam vklaplja in izklaplja zalivanje v posamezni sekciji. Pogoji za vklop in izklop so pogojeni s časom, ki so nastavljeni, hkrati pa je potrebno upoštevati še histerezo. S tem se izognemo pogostemu vklapljanju in izklapljanju posameznega ventila in posledično uničenja močnostnega krmilnika ali ventila.

Za vsak meni je potrebno pripraviti primeren izpis. V osnovnem meniju prikazujemo večino vrednosti. V nadaljevanju je prikazan primer programske kode, kako se izpiše trenutna vlažnost.

V prikazu programske kode sem navedel le nekaj ključnih primerov. Celoten program ima preko 1200 vrstic. Verjamem, da bi bilo možno program še optimizirati, kar me čaka pri naslednji verziji.

Testiranje

Največ testiranja je bilo potrebno pri senzoriki. Preizkušal sem tri različne senzorje za merjenje vlažnosti zemlje in izbral tistega, ki se je izkazal kot najbolj zanesljiv in je hkrati zagotovil najboljšo ponovljivost meritev.

Pri razumevanju merjenja vlažnosti tal si moramo najprej razjasniti osnovni pojem. Vlažnost tal predstavlja vodo, ki je v tleh in je eden najpomembnejših elementov v pedologiji tal, saj je nujno potrebna za nemoteno rast in razvoj rastlin (ARSO). Ločimo tri glavne oblike vode v tleh: higroskopska, kapilarna (ta je dostopna rastlinam) in gravitacijska voda. Vlažnost tal je odvisna od številnih faktorjev: mineralne sestave talnih agregatov, njihove teksture in strukture, volumna por, količine vode in količine organskih snovi v tleh (Hočevar in Petkovšek 1995). Obstaja veliko senzorjev vlažnosti zemlje (direktne in indirektne metode). Pri nas nisem uspel najti nizkocenovnih merilnikov vlažnosti zemlje, ki bi jih lahko uporabil pri mojem projektu, zato sem jih nabavil preko ebay.com.

Slika 4: Merilniki vlažnosti zemlje (od leve: HL-69, FC-28 in YL-100)

Na sliki 4 imamo dva senzorja (HL-69 in FC-28), ki imata ločena merilna pretvornika. Merilna pretvornika imata digitalni in analogni izhod. V našem primeru sem uporabili analogni izhod. Desni senzor (YL-100) ima že vgrajen merilni pretvornik in ima le analogni izhod. Na primeru senzorja YL-100 lahko vidimo primer obrabe, saj so na levi strani senzorja na prevodni plošči robovi že obrabljeni.

Merilnike vlažnosti sem umerjal z laboratorijskim merilnikom Vernier (www.vernier.com). Pripravil sem 5 različnih vzorcev tal z različno vsebnostjo vlage. Na osnovi meritev sem ugotovil, da je senzor FC-28 najprimernejši oziroma najboljši približek glede na razpoložljive vire. Senzor FC-28 sem kasneje tudi uporabil. Opozoriti moram, da karakteristike preizkušenih senzorjev niso linearne. Utopično bi bilo razmišljati, da bi senzor v cenovnem razredu okrog 1 EUR imel linearno karakteristiko, vendar je možno izbrani senzor uporabiti v celotnem območju vlažnosti.

Ventilski otok:

Ventilski otok je sestavljen iz štirih elektromagnetnih ventilov. Ventili imajo 24 V enosmerno napajanje in so v stanju brez napajanja zaprti (NC – Normally Closed). Pomemben podatek pri ventilih je še največji tlak, ki pri mojih znaša 0,8 Mpa. Iz tega razloga je potrebno pred ventilski otok namestiti omejevalnik tlaka, ki zmanjša tlak v dovodnem sistemu na primerno vrednost za naše ventile. Vodo lahko pripeljemo do ventilskega otoka iz vodovoda, rezervoarja z deževnico ali pa jo črpamo iz podtalnice. Najprimernejša je seveda stoječa voda, ki je segreta na temperaturo, podobno temperaturi zemlje.

Slika 5: Ventilski otok

Izdelan krmilnik

Slika 6: Notranjost zalivalnega krmilnika

Na sliki 6 sem prikazal fotografijo notranjosti zalivalnega krmilnika. Zgoraj je nameščen Arduino MEGA, v levem zgornjem delu je DC/DC pretvornik za napajanje močnostnega krmilnika. Le-ta se nahaja pod njim. Drugi DC/DC pretvornik za napajanje Arduino MEGA se nahaja v črni termo skrčki, ki je na desnem robu. Desno spodaj se nahaja eksperimentalna ploščica, na katero sem namestil elektroniko. V prvi vrsti je to usmernik, ki usmeri 24 V AC napajalno napetost v enosmerno. Na AC napajanju je prisotna še hitra varovalka 1 A. Na levem delu te ploščice sem zgoraj namestil priključke za + 5 V in spodaj za GND. Tukaj se še nahaja trimer za nastavitev fokusa LCD. Tranzistorje za vklop posameznih senzorjev in osvetlitve LCD sem v tej prvi izvedbi namestil v termo skrčke, saj sem to delal naknadno, ko sem v času razvoja ugotovil, da jih potrebujem. Smiselno bi bilo, da bi to vse skupaj namestili na eksperimentalno ploščo.

Slika 7: Priključitev LCD in Joystick-a

Na sliki 7 je prikazan priklop LCD in Joystick-a. Za prenos podatkov na LCD sem uporabil štiri podatkovne bite (D4, D5, D6, D7). Na Joystick priklopimo napajanje +5 V in GND ter dobimo dva analogna izhoda (VRx in VRy). Za SW je potrebno dodati še pull-up upor. Električnega načrta nisem izrisoval, saj imam v komentarjih programske kode podrobno opisane vse priklope.

Slika 8: Končni izgled krmilnika

Pri končnem izdelku krmilnika sem se lotil še grafičnega oblikovanja nalepk, ki sem jih dal izdelati v grafični studio (UV zaščitene, laminirane, vodoodporne in izrezane).

Krmilnik je namenjen za montažo v zaprtih prostorih ali vsaj pod nadstrešek. Ohišje je sicer odporno na vdor vlage (IP56), vendar imamo nameščen še LCD prikazovalnik, odprtino za Joystick in luknje za vodnike. Za povečanje funkcionalnosti iz vidika vodoodpornosti bom verjetno naslednjo verzijo izboljšal z membranskimi tipkami na mestu Joysticka, lahko bi izbral ohišje s prozornimi vrati, s katerimi bi zaščitil LCD prikazovalnik ter uporabil drugačne priključne konektorje za vodnike. Tako izboljšan izdelek bi bil primeren tudi za namestitev na odprtem.

Možnosti izbojšav, nadgradnje krmilnika in programa:

Največja prednost lastnega izdelanega krmilnika je prilagodljivost. Ko obvladamo tehnologijo, so možnosti skorajda neomejene. Na obstoječem krmilniku je možno izdelati nadgradnjo z vidika števila sekcij. Ob vgradnji dodatnega močnostnega krmilnika in še štirih senzorjev lahko krmilimo naslednje 4 sekcije. 

Ob tem še lahko v sistem regulacije dodatno vključimo podatke, kot so zunanja temperatura, temperatura tal in vode ter vlažnost zraka. Ob dodanem senzorju za dež bi lahko preprečili zalivanje zunanjih površin s prenizko vlažnostjo v zemlji, če bi pričelo deževati. Vse podatke lahko shranjujemo tudi na SD kartico. Do podatkov lahko nato dostopamo preko TCP/IP vrat ali brezžično. Lahko bi dodali še senzor razdalje (UZ ali IR) in merili ter beležili višino rastlin.

V nadaljevanju lahko razmišljamo, da lahko v zaprtem rastlinjaku na osnovi podatkov o temperaturi in želeni temperaturi vklapljamo grelec, na osnovi podatka o vlažnosti vlaženje, …

Prepričan sem, da bo moja nadaljnja nadgradnja usmerjena v krmiljenje zaprtega rastlinjaka.

Za celotno programsko kodo ali kakršnokoli dodatno pojasnilo mi lahko pišete na e-pošto. Z veseljem vam odgovorim.

Na osnovi članka o zalivalnem krmilniku je novi naročnik izrazil željo po izdelavi prilagojenega sistema, ki bi omogočal 18 zalivalnih krmilnikov, za vsako izmed 18 korit z rožami, ki jih imajo na okenskih policah hiše – izdelali smo celoten sistem, ki lokalno regulira in zaliva korito z rožami na vsaki okenski polici.

Potrebuješ izdelek po meri?

Nudimo celovite rešitve za uspešen razvoj, prototipiranje in proizvodnjo. Zaupate nam lahko, da boste z nami zmeraj imeli ob sebi pomoč za Vaš uspeh.

Scroll to Top