Inteligencja w doniczce

Czyli o tym jak  moja roślina zaczęła wysyłać do mnie maile. Oto kilka słów o tym, jak na parapecie, zaraz obok mojego biurka, w zwykłej ziemi, wyrosła mała, sztuczna inteligencja.

Jak mówi słynne powiedzenie:

Potrzeba jest matką wynalazków.

 

Ta sentencja stała się ostatnio dewizą moich elektronicznych wojaży.

Pierwszy układ

Jakiś czas temu na parapecie pojawiła się mała, niepozorna roślinka. Okazało się, że wodę pije bardzo szybko, a ja nieustannie zapominam jej podlewać, co spowodowało, że zaczęła obumierać. Trzeba było szybko działać. Złapałem więc za arduino, czujnik wilgotności gleby, diodę, wskaźnik diodowy, push button i zestaw rezystorów. Pierwszy układ, który zbudowałem odczytywał wilgotność gleby i zapalał diodę, aby alarmować o suchej ziemi w doniczce. Dodatkowo naciśnięcie przycisku powodowało zapalenie diodowego wskaźnika wilgotności. Czerwona dioda sama zapalała się w momencie zbyt niskiej wilgotności.

Pierwszy działający prototyp

Czas na WiFi

Układ ten jednak długo się nie ostał, bo w mojej głowie szybko zrodził się nowy pomysł. Arduino zamieniłem na układ ESP8622, który jest płytką z interfejsem WiFi, ale zawiera również programowalny mikrokontroler i m.in. kilka wejść/wyjść cyfrowych, jedno analogowe itd.

ESP8622 wersja 12F

Ten mały sprytny układ, który można zakupić za kilka złotych, daje naprawdę bardzo dużo możliwości. Zmontowałem więc szybko nowy układ, zawierający jedynie wspomnianą płytkę i podłączony do niej czujnik wilgotności. Samą płytkę zaprogramowałem za pomocą Arduino IDE.

Założenie było proste. Sprawdź poziom wilgotności, jeśli spadł on poniżej zadanego poziomu, to wyślij mailowe powiadomienie. Ponieważ układ sam z siebie maila wysłać nie może, na swoim serwerze ustawiłem prosty skrypt, który dostaje odczyt z układu i wysyła maila.

Przykład maila jaki wysyłany jest przez serwer po powiadomieniu przez układ o stanie wilgotności.

Modyfikacje układu

Zaraz po uruchomieniu drugiego prototypu, zacząłem jego modyfikacje. Ponieważ różne rośliny wymagają różnego poziomu wilgotności, natychmiast przeniosłem decyzję czy wysyłać alert z programu samego układu, na serwer. Aby to serwer decydował, czy należy alert wysłać. Dzięki temu, można łatwo zmienić próg alertu bez potrzeby przeprogramowania płytki ESP.

Kolejny temat to energooszczędność. Wilgotność gleby nie jest współczynnikiem, który zmienia się bardzo dynamicznie. Odczyt raz na godzinę jest i tak często. Wprowadziłem więc modyfikację, aby płytka usypiała się i co godzinę sama się budziła. Zmiana jest dosyć prosta, ponieważ biblioteka do płytki posiada funkcję usypiającą. Wystarczy cały potrzebny kod wykonywać w funkcji setup(), a na jej końcu wywołać

ESP.deepSleep(3600e6, WAKE_RF_DEFAULT); // uśpienie na jedną godzinę

Po zadanym czasie płytka bootuje się od początku, nawiązuje połączenie z WiFi, sprawdza odczyt i wysyła informację na serwer.

Drugi działający prototyp. Tym razem oparty o układ ESP8622

Zasilanie czujnika wilgotności

Pojawił się jeszcze jeden problem z układem. Ponieważ wyjścia układu ESP mają zbyt małą wydajność prądową, aby zasilić czujnik, był więc on podłączony na stałe do źródła zasilania. ESP oszczędzało energię usypiając się i budząc raz na godzinę, ale jednocześnie czujnik wilgotności cały czas działał. Wpływało to niekorzystnie na energooszczędność układu oraz na trwałość samego czujnika, który działając stale, znacznie szybciej zacznie korodować, pokrywać się patyną, czyli po prostu zużywać.

Problem rozwiązałem stosując tranzystor, dzięki któremu zasilanie mogłem załączać tylko w momencie wybudzenia płytki ESP.

Układ wzbogacony o tranzystor załączający zasilanie czujnika gleby

Co dalej?

Wydawać by się mogło, że projekt działa, spełnia zadanie, więc można zamknąć temat. Stety/niestety układ wymaga rozwiązania kilku problemów, widzę również drogi dalszego rozwoju:

  • zasilanie bateryjne – obecnie układ jest zasilany z sieci, co uniemożliwia zastosowanie go w dowolnej lokalizacji
  • nazwa i hasło WiFi są zahardcodowane w programie układu – konieczne jest stworzenie trybu konfiguracji urządzenia
  • niskiej jakości czujnik – jest bardzo duża rozpiętość cenowa pomiędzy zwykłym czujnikiem, który się zużywa i ma niską dokładność, a profesjonalnymi czujnikami rolniczymi (~6zł w stosunku do ~200 – 800zł) – rozwiązaniem będzie skonstruowanie własnego czujnika
  • śledzenie odczytów – chciałbym rozbudować API na serwerze, aby zapisywać wyniki w bazie danych i agregować dane na wykresie

 

O dalszym rozwoju projektu będę informował wkrótce. 🙂