Jak wygląda wersja alfa mojej automatycznej uprawy roślin.
Pora podsumować pierwszy etap rozbudowy szklarni oraz tworzenia nowego sterownika. Na blogu pojawiało się już kilka nawiązań w postaci mini projektów: doniczka pomiarowa oraz pH-metr, które będą w przyszłości także integralną częścią całego projektu.
Założenia są rozbudowane, o czym wspominałem między innymi podczas World Space Week Wro przy okazji omawiania automatyzacji uprawy roślin na Ziemi i poza nią.
Póki co, nie uruchomiłem jeszcze zautomatyzowanej hydroponiki, ale już z nią eksperymentuję.
Część tego projektu opiera się na poprzedniej wersji szklarni w IoT, której opis znajdziecie na blogu tutaj. Dla wersji 2.0 elektronika i oprogramowanie zostały wymienione. Wiele się nauczyłem, pracując przy tym projekcie i staram się korzystać z nowej wiedzy 😊
Proces rozwoju przedstawiłem podczas live streamów, całą listę możecie znaleźć tutaj (nie 100% jest o szklarni).
Jeśli jednak nie chcecie teraz tego wszystkiego oglądać, w skrócie opiszę kroki, jakie ostatnio poczyniłem z projektem.
Mechanika
Dodałem kolejną warstwę na obudowę. Ciężko już nazwać to szklarnią, bardziej jest to growth box. Trzy ściany oraz dach pokryłem sklejką 3 mm z naklejonym od wewnątrz kocem termicznym odbijającą stroną do środka. Dzięki temu zabiegowi światło zostaje w skrzyni, nie oświetla pokoju tylko roślin, plus daje dodatkową izolację termiczną.
Na jednej ze ścian zawisła obudowa ufundowana przez firmę Kradex. Zawiera dwie szyny DIN, na których umieściłem 8 przekaźników od Easy switch, SSR, zasilacze 5 V i 12 V, wyłącznik nadprądowy, trochę zacisków, masę przewodów oraz najważniejsze – mój sterownik. Zostało jeszcze trochę miejsca. Mam gdzie wkładać kolejne klocki tej układanki.
Sterownik elektronika
Sterownik zamknąłem w obudowie ZD1010 od Kradex, do której dobrałem zestaw dwóch dedykowanych płytek uniwersalnych. Zapewne za jakiś czas wymienię je na własne projekty dla oszczędności miejsca i łatwiejszej konfiguracji peryferiów. Obecne do prototypowania nadają się świetnie.
Całość chodzi na ESP8266 na płytce NodeMCU. Dodatkowo w sterowniku znajdują się: gniazdo na kartę SD, RTC (zegar czasu rzeczywistego) DS1307, pamięć EEPROM 24C32, ekran OLED SSD1306 oraz ekspander GPIO MCP23017.
Peryferia
Wewnątrz szklarni, jak to było w poprzedniej wersji, podpięte są LEDowe lampki do naświetlania roślin. Są to głównie niebieskie i czerwone LEDy w obudowach z przetwornicami z 230 VAC pod gniazdo E27. Wykorzystałem także wentylator ze starego zasilacza komputerowego na 12 VDC oraz czujnik BME280, który po I2C przesyła mi pomiary temperatury oraz wilgotności powietrza, ciśnienia nie potrzebuję.
System nadrzędny
Obecnie do automatyki domowej używam Home Assistanta z wykorzystaniem Node-REDa do automatyzacji. Mam to zainstalowane na Raspberry Pi i poprzez MQTT komunikuje się z szklarnią.
Kod
Można się zastanawiać, dlaczego tyle pracy, a tak mało elementów działa w tym systemie. Po co tyle kodu? Objętość jest podyktowana tym, że projekt, w odróżnieniu od poprzedniej wersji, chcę zrobić trochę bardziej elegancko w podejściu programistycznym. Oczywiście, cały kod można zobaczyć i pobrać z repozytorium.
Działanie sterownika nie jest tak mocno powiązane z kodem, jest generyczne, co ułatwi używanie projektu przez kogoś innego i dostosowanie go do swoich potrzeb. Co to znaczy, że jest generyczne? Konfiguracja urządzenia odbywa się poprzez kartę pamięci. Nie musi ona być włożona na stałe, zmiany zostaną wprowadzone przy włączeniu urządzenia, a następnie zapamiętane. Karta musi mieć plik typu JSON w odpowiednim formacie, jak w przykładzie poniżej, z którego wszystko zostaje sczytane: ile będzie ekspanderów, jakie piny będą wyjściami, jakie wejściami, z jakimi tematami na MQTT będą powiązane oraz cała konfiguracja związana z WiFi i brokerem. W efekcie, aby zacząć używać takiego sterownika, nie trzeba nic zmieniać w kodzie. Nawet jeśli będzie więcej ekspanderów niż teraz, to tylko sprawa pliku konfiguracyjnego.
{
"SSID":"nazwa_sieci",
"PASS":"haslo_sieci",
"MQTT_SERVER":"192.168.0.17",
"HARDWARE_CONFIGURATION":
{"SENSOR":"greenhouse/sensor",
"GPIO_CONTROLLERS":[
{"ADDRES":"100",
"GPIOS":[
{"TYPE":"OUT",
"TOPIC":"greenhouse/output/light"},
{"TYPE":"OUT",
"TOPIC":"greenhouse/output/fan"},
{"TYPE":"IN",
"TOPIC":"greenhouse/floodsensor"}
]},
{"ADDRES":"010",
"GPIOS":[
{"TYPE":"OUT",
"TOPIC":"greenhouse/output/pump"},
{"TYPE":"IN",
"TOPIC":"greenhouse/floodsensor"}
]}
]}
}
Chcę utrzymać w kodzie dość dobry podział na warstwy, aby łatwo wydzielić z niego reużywalne części. Nie jest do końca tak czysto jak mam w planach, ale porządki są w trakcie, będzie SOLIDnie 😉
Projekt będzie się rozwijał podczas live’ów i już niedługo zobaczycie kolejne kroki. W międzyczasie zbieram także inspiracje z projektów jak ten:
Mam nadzieję, że wiosną pochwalę się ciekawymi efektami w postaci roślin, które tam wyrosły 😉