1-2 hete kezdtem el foglalkozni az Arduino-val, illetve az AVR mikrokontrollerekkel, az elektronikával kapcsolatban nagyon sok alapvető dolgot kell még megtanulnom. Az első projektem eredményét szeretném közreadni, nem biztos hogy nincs benne szarvashiba, egyéb hibás elgondolás, kérlek ezt figyelembe véve olvasd amit írok. Aki szintén teljesen kezdő, érdekesnek találhatja a témát, aki pedig tapasztaltabb, esetleg írhatna pár sort, hogy mit kellene máshogy csinálni, ezt nagyon megköszönném.
Az első projektnek (a villogó led Arduino program kipróbálása után) egy virágföld szárazságmérőt csináltam. Tudom ez az 1000. változat, az Interneten több is fellelhető, elcsépelt lehet, de kezdésnek szerintem jó. Az eredeti változat, amit az Interneten találtam, és megtetszett, tweet-et tud küldeni, de ez azt hiszem túlzás lenne, célkitűzésnek első körben elég annyi, hogy ha kiszárad a virágföld, meg kell locsolni a virágot, akkor villogjon egy led (szerintem ne csipogjon, mert az éjszaka nem biztos hogy jó ötlet). Az eszköz állítható legyen, olcsó legyen, és elemről működjön. A következő eszközöket választottam: CR2032 elem (3V-os), ATTINY25 mikrokontroller.
A program fejlesztéséhez én Eclipse IDE-t használok. A programot C-ben írtam, az Arduino library-je nélkül, mert az ATTINY25-ben csak 2kb flash memória van, eredetileg ATTINY13-at (1kb flash memória) akartam használni, csak nem találtam.
Az alapgondolat, hogy ha száraz a virág földje, akkor nagyobb az ellenállása, mint ha nedves, ezt fogja az eszköz kihasználni. (remélem ez jó elgondolás
Belefutottam 1-2 érdekes problémába:
1. A föld egyes helyeken eltérő lehet, nem mindegy hogy az elektródákat milyen messzire szúrjuk le egymástól, mi van ha az egyik virágot tápoldatozzák, a másikat nem, tehát az alapvető kérdés, hogy mikor mondjuk a virágföldre hogy ki van száradva: Ezt egy potméterrel gondoltam beállítani, ami a virágfölddel van sorba kötve, egy ellenállásosztót létrehozva. Tehát a beállítás: Ha száraz a virágföld (vagyis meg kellene locsolni a virágot), akkor benyomjuk az elektródákat a virágföldbe, megkeressük a potméterrel azt a pontot, amikor már nem villog az eszköz, majd visszaállítjuk egy picit, hogy villogjon (hiszen száraz a föld). Ezután meglocsoljuk a virágot, a led elalszik. Ha megint elérjük az eredeti állapotot, akkor a LED-nek villognia kell. A virágföld kb 5-10 kOhm-os lehet, ha egymástól 3-4 cm-re szúrom a két elektródát. A beállító potméter 47kOhm-os, tapasztalati érték és az Internet alapján.
2. Ha belenyomjuk az elektródákat a földbe, majd áramot vezetünk át rajta, akkor elektrolízis indul el. Pár nap után az elektróda korróziója miatt használhatatlan lesz az eszköz: http://db.tt/8gPSg4v6 Erre egy másik virágföld szárazságmérő projektből vettem az ötletet: Mérés után közvetlen meg kell cserélni nagyon rövid időre az elektródák polaritását. Az én próbám alapján nem teljesen tökéletes ez a megoldás, de sokkal jobb lett a helyzet, az eszköz használható marad: http://db.tt/zA68PScL
3. Mivel az eszköz egy gombelemről működik, kérdésként merült fel bennem, hogy vajon meddig bírja, egyáltalán kitart-e az első jelzésig? Ezt a mikrokontroller alvás üzemmódjával, és a watchdog áramkörrel gondoltam megoldani. Itt nagyon jó leírások vannak: http://www.atmel.com/devices/attiny25.a ... =documents, itt érhető el az ATTINY25 adatlapja is, illetve van itt egy nagyon jó leírás arról, hogy mire jó a watchdog, mik a usecase-ek: http://www.atmel.com/Images/doc2551.pdf
Az ATTINY25 adatlapját érdemes böngészni, mert fontos infókat tartalmaz, aminek az ismerete nélkül nem fog működni a program: például ami nagyon egyszerű és kézenfekvő dolog, de én mégis sokat küzdöttem vele, az interruptok alapértelemzésben le vannak tiltva. Ha az Arduino keretrendszert használtam ott minden jól működött (alapesetben engedélyezve vannak az interrupt-ok), ha a saját programom futtattam, az nem működött (az alapértelmezetten tiltott interrupt-ok miatt).
A példaprogram, hogy hogyan kell használni a watchdog –ot, hogy kell a sleep módot bekapcsolni, hogy kell analóg digitális átalakítást végezni, az Interneten fellelhető. Az adatlapot a példaprogramok elemzéséhez, megértéséhez el kellett olvasni.
A program egyszerű, itt található: https://gist.github.com/dlaszlo/5429438
A program minden 8 mp-es ciklus elején megcsinálja a mérést + felcseréli az elektródákat (rövid időre), jelez a leddel ha szükséges, majd power down sleep módba teszi a kontrollert. A watchdog timer 8 mp után feléleszti a mikrokontrollert, majd új iteráció kezdődik. Van egy nyomógomb, amit az eszköz beállítása közben kell megnyomni, hogy ne kerüljön a mikrokontroller sleep módba (vagy kikerüljön onnan), ez azért kell, hogy folyamatosan lehessen látni a ledet hogy világít, vagy sem.
A kapcsolási rajz (remélem nem rontottam el):
http://db.tt/oI3DbjqS
Üdv!