Chciałbym podzielić się z wami moim projektem kontrolera do grow boxa zrealizowanym na bazie platformy Arduino Yun (
arduino.cc/en/Main/ArduinoBoardYun ).
Na wstępie zaznaczę że nie polecam brania się za bary z Arduino Yun osobom które nie mają chociaż podstawowej wiedzy z zakresu elektroniki, linuxa oraz programowania.
Jednak ja sam nie uważam się ani za elektronika ani za programistę, a udało mi się w miarę bezboleśnie zmontować projekt o którym wam piszę.
Podstawowym założeniem jakie mi przyświecało było po pierwsze maksymalne zautomatyzowanie uprawy, a po drugie możliwość zdalnego monitorowania co się dzieje w boxie gdy nie ma mnie na miejscu dłuższy czas.
Zaprogramowana logika działania urządzeń jest dość specyficzna i być może nie u wszystkich się sprawdzi.
Ale do rzeczy. Do budowy użyłem Arduino Yun, które jest połączeniem zwykłego arduino (bazuje na modelu Leonardo) oraz osobnego chipa na którym działa dystrybucja linuxa openwrt. Posiada ono wbudowane wifi, czytnik kart microSD oraz port USB host.
Czujniki użyte w projekcie:
DHT22 - cyfrowy czujnik temperatury i wilgotności, mierzy warunki panujące wewnątrz boxa (tańszy model DHT11 też się dobrze sprawdzi)
LM35 - analogowy czujnik temperatury na zewnątrz boxa. Na dobrą sprawę jest to element opcjonalny ale miałem pod ręką więc użyłem
Sonda wilgotności gleby (
botland.com.pl/czujniki-wilgotnosci/1588-czujnik-wilgotnosci-gleby.html ) - wtykasz toto na stałe do doniczki i wiesz kiedy roślinkę trzeba podlać bez brudzenia paluchów

I tu odrazu zaznaczę, że oryginalne elektrody uległy bardzo szybko utlenieniu,
więc musiałem wstawić jakieś blaszki w ich miejsce. Ale wtedy jeszcze sonda pracowała w trybie ciągłym, teraz włączam ją tylko na moment wykonania pomiaru, więc żywotność elektrod powinna być dużo dłuższa.
fotorezystor GL5537-1 - dzięki niemu automatyka wie czy w boxie jest dzień czy noc.
I tu odrazu zaznaczę iż z pewnych względów nie powierzyłem funkcji sterowania światłem mojemu układowi. Wolałem aby osobny dedykowany włącznik czasowy się tym zajął.
Oczywiście nie byłoby najmniejszego problemu z zaimplementowaniem tego w Arduino, ale skoro miałem już u siebie fotoperiod cyfrowy z bateryjnym podtrzymaniem (arduino nie posiada bateryjki do podtrzymania zegara, aczkolwiek można dokupić osobny moduł RTC)więc po prostu go zostawiłem do sterowania światłem, a arduino zajmuje się resztą spraw. Jednakże zaimplementowałem opcję wyłączenia światła przez arduino np. na wypadek awarii wentylacji lub gdy chcę dyskretnie zajrzeć do boxa w czasie fazy jasnej.
Przekaźnik w obwodzie oświetlenia jest wpięty tak, że przy braku sygnału sterującego, obwód jest domyślnie zamknięty i światłem steruje fotoperiod.
Elementy wykonawcze użyte w projekcie:
Czterokanałowy moduł przekaźników 5V (
botland.com.pl/przekazniki/1998-czterokanalowy-modul-przekaznika-rm4-5v-10a125vac.html) - steruje włączaniem urządzeń 230V (nawilżacz, pompa, oświetlenie)
2x komputerowy wiatrak 12V 120mm 3pin - wiadomo, wentylacja. Jeden wlotowy, drugi wylotowy.
Trochę o logice działania:
U podstaw całego projektu leżał fakt że box ma działać jak najciszej, czyli minimalne obroty wentów, a gdy nie trzeba całkiem wyłączone.
Jeśli czujnik oświetlenia wykryje że jest faza jasna, włącza wentylację. Wentylatory normalnie działają na najniższych możliwych obrotach, dopiero gdy temperatura przekroczy zdefiniowany próg
załącza się drugi bieg wentów. Sterowanie obrotami zrealizowałem przy pomocy 4 potencjometrów. Osobno dla niskich i wysokich obrotów każdego wenta ponieważ mam 2 różne modele.
Spokojnie wystarczyłoby też sterowanie z użyciem dwóch potencjometrów wspólnych dla obu wentów. Oczywiście dałoby się też zrobić sterowanie cyfrowe obrotami sygnałem PWM, ale z pewnych względów wybrałem analogową opcję.
Kontroler działa w 2 trybach weg / flo. W trybie weg włącza nawilżacz jeśli wilgotność spada poniżej zdefiniowanego poziomu. W trybie flo włącza w nocy wenty jeśli wilgotność przekroczy zdefiniowany próg.
Podlewanie jest inicjowane przez linuxa o określonej porze (wpis w cronie). Jednak zanim zostaje włączona pompa sprawdzana jest wilgotność gleby i tylko poniżej zdefiniowanego poziomu wilgotności gleby
podlewanie jest zrealizowane. Tu nadmienię iż zakładam zbliżone zapotrzebowanie na wodę w różnych doniczkach przy takiej samej ich wielkości, więc na podstawie wyników jednej wybranej podlewam wszystkie.
Podlewanie trwa przez czas zdefiniowany w odpowiednim parametrze, po czym pompa jest wyłączana.
Arduino oprócz sterowania elementami wykonawczymi nasłuchuje poleceń ze strony linuxa i na ich podstawie podejmuje stosowne działania jak np. uruchomienie podlewania lub tylko zwraca wartości parametrów o które jest pytane.
Komunikacja odbywa się w formacie REST poprzez odpowiednio sformatowane urle.
Zaimplementowałem 3 typy polecen:
-https://adresIPkontrolera/arduino/get/nazwaparametru -zwraca wartość parametru z urla
-https://adresIPkontrolera/arduino/set/nazwaparametru/wartość -ustawia wartośc parametru, parametry zapisuję do pamieci eeprom więc przeżywają reset układu
-https://adresIPkontrolera/arduino/polecenie -wykonuje akcję zdefiniowaną dla danego polecenia
Po szczegóły obsługiwanych parametrów zapraszam do lektury załączonego kodu.
Oczywiście na wbudowanym serwerku http ustawiłem autoryzacje hasłem.
Wbudowany serwerek http serwuje również stronkę dynamiczną z odczytem stanu czujnikow na żywo ( https://adresIPkontrolera/sd/ ). Wszystkie pliki trzymam na karcie pamięci SD w arduino. Jest też fajny bonus - na stronce wyświetlany jest screenshot z kamerki internetowej którą podłączyłem do portu usb arduino.
Robienie zdjęć z kamerki inicjuję z crona (przykładowe polecenie w załączonych plikach). Kamerka musi być być typu "Universal Video Class (UVC) device" żeby bez problemów ją ogarnąć pod linuchem. (polecam artykul:
learn.adafruit.com/wireless-security-camera-arduino-yun/setting-up-your-arduino-yun)
Stronka statusu jest raczej surowa w wyglądzie ale podstawowe info jak temperatura, wilgotność, wilgoć gleby, obroty wentów są pokazane i na bieżąco odświeżane.
Mam w necie postawiony serwer monitoringu zabbix (
www.zabbix.com), ktory łączy się z klientem zabbixa działającym na części linuksowej arduino i zbiera dane przy pomocy CURLa poprzez zapytania http do mikrokontrolera (konieczna instalacja paczki zabbix-agentd)
Historia wartości jest pamiętana i ładne wykresy można sobie wyświetlać.
Można też ustawić w zabbixie alerty, gdy któryś z odczytywanych parametrów wychodzi poza akceptowalny zakres. Ja wysyłam je sobie na maila.
W załączonych plikach znajduje się export przykładowych definicji obiektów dla serwera zabbix oraz konfig agenta na arduino.
Cały układ zasilam z 2 osobnych zasilaczy: 12V(wiatraki) oraz 5V(cała reszta).
Załączony kod jeszcze nie był testowany "produkcyjnie", więc nie gwarantuje, że nie ma jakiś błędów w logice działania.
Pierwszą uprawę wykonałem na innym kodzie, a układ był inaczej zbudowany.
Poniżej zdjęcia gotowego układu zbudowanego na płytce protoshield do arduino. Przy okazji uwaga - Yun ma bardzo wysokie gniazda złączy LAN i USB które dotykają płytki montażowej. Lepiej nie lutować nic ponad nimi. Szczyt USB musiałem odizolować, aby nie dotykał ścieżek na płytce powyżej.
Ważne jest też odizolowanie elektryczne obudów tranzystorów od radiatora gdyż ich kolektory pracują w różnych obwodach.
Czujniki, wenty, przekaźniki są podłączane osobno na wlutowanych złączach goldpin.
---
Pozdro dla majsterkowiczów!