MudPi to otwarty system automatyki ogrodowej, zaprojektowany do zarządzania i utrzymywania zasobów ogrodowych zarówno wewnątrz domu, jak i na zewnątrz, np. w ogrodzie. Został zbudowany na bazie Raspberry Pi i posiada szerokie możliwości dostosowania go do konkretnych potrzeb danego ogrodu czy domu.
W artykule opisana jest podstawowa konfiguracja, której można użyć np. w domu, aby sprawdzić jak wdrożyć MudPi lub zarządzać ogrodem na zewnątrz i kontrolować nawadnianie. Poniższy opis pozwoli nam dowiedzieć się jak zainstalować MudPi na komputerze jednopłytkowym Raspberry Pi i zastosować ten system do kontroli zautomatyzowanej irygacji w domu czy przydomowym ogródku. Nic nie stoi na przeszkodzie, aby później rozbudować system do nawadniania całego ogrodu, lub stworzenia systemu automatyki ogrodowej o bardziej zaawansowanej konstrukcji. MudPi można skonfigurować na bardzo wiele sposobów, które opisano na stronie z dokumentacją aplikacji (https://mudpi.app/docs).
Potrzebne materiały
Do budowy opisanego systemu irygacji będzie potrzebny szereg elementów elektronicznych i elektromechanicznych, a także elementy do wykonania klasycznego systemu irygacji. Potrzebne będą także podstawowe narzędzia.
Potrzebne komponenty
- komputer jednopłytkowy Raspberry Pi z łącznością Wi-Fi (wersja z wbudowaną karta sieciową, lub z dodaną zewnętrzną kartą na USB). Na komputerze powinien być już zainstalowany system operacyjny, preferowany jest Debian 9 lub 10 (Rasbpian),
- monitor, klawiatura i mysz – potrzebne będą tylko w czasie konfiguracji komputera,
- karta microSD dla Raspbiana, co najmniej 8 GB,
- moduł z sensorem wilgotności i temperatury (DHT11),
- czujnik poziomu wody w zbiorniku,
- podwójny przekaźnik,
- pompka na 12 V i zasilacz do niej lub pompka na 230 V,
- zasilacz 5 V,
- rezystory 10 kΩ do podciągania linii cyfrowych,
- przewód czterożyłowy, który nadaje się do umieszczenia na dworze,
- wodoodporna obudowa z dławnicami do kabli,
- rurki do nawadniania roślin.
Rozplanowanie systemu irygacji
Pierwszym krokiem, przed rozpoczęciem montażu systemu, jest rozplanowanie tego gdzie i jak przebiegać będą rurki systemu irygacyjnego – niezależnie czy podlewamy w ten sposób pojedynczą roślinę czy cały ogród, to planowanie pozwoli nam uniknąć problemów i komplikacji później. Ważne jest, aby mieć przygotowane wszystkie rzeczy potrzebne do budowy systemu, a aby tak się stało, musimy z gotowym projektem przysiąść do zamówienia. Potrzeby naszej instalacji mogą się zmieniać z czasem, a dobrą praktyką jest przygotowywanie się na przyszłość. Zatem należy wziąć pod uwagę możliwość późniejszej rozbudowy instalacji.
Planując system irygacji musimy podjąć szereg decyzji projektowych. Pierwszą z nich jest wybór systemu dostarczania wody. Dwie główne opcje to użycie pompy w zbiorniku wody, albo wąż podłączony do instalacji wodnej z elektrozaworem do sterowania przepływem. Większy, bardziej złożony system może nawet wykorzystywać oba te elementy (np. do wydzielania stref różnego nawadniania w ogrodzie). W opisywanym projekcie zastosowano pompkę do dostarczania wody do linii irygacyjnej.
MudPi idealnie nadaje się do skalowania i testowania wielu różnych rozwiązań. Projekt systemu można zacząć od butelki wody i pompki na 3,3 V do podlewania kwiatka w doniczce. Projektując system należy dobrać odpowiednie rozwiązania dla naszych roślin. Na rynku dostępnych jest wiele różnych systemów podawania wody – tryskacze, kroplówki, zraszacze etc. Każdy z nich ma swoje konkretne aplikacje, ale jako że Elektronika Praktyczna nie jest czasopismem ogrodniczym, a elektronicznym, to tematyki tej nie będziemy zgłębiać na jej łamach. Zakładamy tylko, że rozpoczynając budowę elektronicznej części systemu, każdy ma już przygotowany system nawadniania, dobrany do potrzeb swojego ogrodu.
MudPi może również sterować oświetleniem roślin w pomieszczeniach za pomocą przekaźnika. Możliwości dalszej rozbudowy systemu są nieograniczone, więc jeśli potrzebujecie zautomatyzować coś, oprócz samego systemu irygacji, to MudPi idealnie się do tego nada.
Sensory i inne elementy elektroniczne w systemie
Kolejnym ważnym aspektem planowania, są dane, które zbieramy z ogrodu, aby sterować systemem irygacji. Przydatne informacje to temperatura i wilgotność gleby. Pomiar wilgotności gleby to świetny sposób wykrywania deszczu, aby uniknąć nadmiernego nawodnienia naszego ogrodu. Oczywiście, w domu taka funkcja może nie być potrzebna – to od Ciebie i potrzeb Twoich roślin zależy docelowy kształt systemu.
W ramach opisywanej w artykule konfiguracji system monitorować będzie:
- temperaturę,
- wilgotność powietrza,
- poziom wody w zbiorniku.
Do pomiaru poziomu wody w zbiorniku zastosowano pływakowy czujnik poziomu, który jest w stanie podawać poziom napełnienia zbiornika. Poziomy zostały zdefiniowane, jako: 10%, 25%, 50%, 75% i 95%, gdzie 10% to poziom krytycznie niski, a 95% przyjmuje się za pełen zbiornik.
Do układu podłączone są, także przekaźniki. Pozwalają one kontrolować wszystkie systemy, które nie są kompatybilne z napięciem 3,3 V, jakie może dawać Raspberry na liniach GPIO . Przekaźnik umożliwia sterowanie obwodami o wyższym napięciu i prądzie. W omawianym projekcie urządzeniem takim jest pompka do wody, która wymaga wyższego napięcia, a przy tym pobiera znaczny prąd. Do sterowania pompą potrzebny jest tylko jeden przekaźnik. W systemie zainstalowano dwa przekaźniki, aby zapewnić możliwość rozbudowy sterownika w przyszłości.
Najważniejszą rzeczą do zaplanowania jest zasilanie. W pierwszej kolejności konieczne jest ustalenie, z czego zasilanie będzie Raspberry Pi i inne podzespoły.
Zwykle Pi jest zasilany z zasilacza USB, ale to wymaga osobnej wtyczki. Jeśli zasilamy inne urządzenia o wyższym napięciu, można zastosować zasilacz prądu stałego np. z przetwornicą impulsową DC/DC, aby obniżyć napięcia do 5 V. Pamiętajmy, aby dobrać odpowiedni moduł zasilacza, który zapewni dostateczny prąd do pracy komputera jednopłytkowego (co najmniej 1 A) i innych elementów, w zależności od tego, co podłączymy w naszej konfiguracji.
Raspberry Pi domyślnie współpracuje jedynie z cyfrowymi liniami GPIO. Oznacza to, że nie można po prostu podłączyć czujnika wilgotności gruntu bezpośrednio do komputera. Potrzebny jest moduł z przetwornikiem analogowo-cyfrowym lub dedykowany mikrokontroler z obsługą wejść analogowych, np. Arduino lub ESP32. Na szczęście MudPi obsługuje sterowanie takimi urządzeniami, jako podrzędnymi węzłami sieci. Potrafi wydawać polecenia tym urządzeniom z głównego kontrolera (Raspberry Pi). Umożliwia to posiadanie kontrolera z wieloma jednostkami z czujnikami, którymi może sterować wraz z podłączonymi do nich komponentami analogowymi.
Instalacja MudPi na komputerze jednopłytkowym
Po przygotowaniu projektu i zgromadzeniu wszystkich elementów czas przygotować sprzęt. Na początek należy zainstalować na MudPi najnowszą wersję Raspbiana – robi się to pobierając obraz systemu z oficjalnej strony Raspberry Pi i wgrywając go na kartę microSD. W naszym przypadku karta o pojemności 8 GB będzie wystarczająca. Po wgraniu obrazu na kartę SD i umieszczeniu jej w Raspberry Pi, możemy uruchomić komputer. Uruchomi się automatyczny instalator, który przeprowadzi nas przez cały proces instalacji. Po zainstalowaniu należy tylko połączyć komputer do sieci Wi-Fi – jeśli mamy zainstalowany system z GUI, możemy zrobić to z poziomu pulpitu. Jeśli mamy do dyspozycji tylko terminal, konieczne jest edytowanie pliku /etc/wpa_supplicant/wpa_supplicant.conf dowolnym edytorem tekstowym (nano lub vim).
Następną rzeczą, którą trzeba wykonać zaraz po podłączeniu komputera do Wi-Fi jest aktualizacja systemu zainstalowanego na Raspberry Pi. W tym celu w terminalu wpisujemy następujące komendy:
Napięcie zasilające pompę (w opisywanym przypadku 230 V) podłączymy w dalszym etapie budowy. Teraz należy sprawdzić poprawność montażu poszczególnych komponentów. Na rysunku 1 pokazano schemat testowego systemu do irygacji. Kolejnym krokiem jest odpowiednie skonfigurowania oprogramowania.
Konfiguracja MudPi
Po podłączeniu czujników i innych komponentów do Raspberry Pi można utworzyć plik konfiguracyjny i przetestować, czy wszystko działa poprawnie przed ostatecznym zakończeniem montażu urządzenia w obudowie. Aby skonfigurować MudPi konieczne jest zaktualizowanie pliku mudpi.config, który znajduje się w katalogu /etc/mudpi/core. Jest to plik tekstowy w formacie JSON. Można edytować go ręcznie, na przykład z pomocą edytora tekstu lub przy użyciu dedykowanego programu przygotowanego przez autora projektu.
Plik konfiguracyjny dla opisanej powyżej konfiguracji sprzętu w systemie pokazany jest na listingu 1. Podzielono go na kilka podstawowych sekcji: name, version, debug, redis, relays, workers, triggers i actions. Pierwsze cztery pola są obowiązkowe w konfiguracji, pozostałe są opcjonalne. Obowiązkowe pola opisują, odpowiednio, nazwę systemu, jego wersję, wejście w tryb do debugowania oraz dane do połączenia z siecią bezprzewodową. Warto zwrócić uwagę, że ostatnie pole nie jest jedną wartością, a samo w sobie jest kolejnym JSONem, w którym zawarte są dwa pola – host oraz port.
Kolejne pola, także są bardziej złożone – każde z nich jest grupą JSONów, z których każdy opisuje pojedynczy wpis. Nazwy poszczególnych sekcji - relays, workers, triggers i actions – dosyć dobrze opisują ich zawartość. W pierwszej znajdziemy definicje podłączonych do systemu przekaźników, w drugiej źródeł danych (od prostych sensorów cyfrowych, podłączonych do linii GPIO Raspberry Pi po wykorzystujące zewnętrzne mikrokontrolery zaawansowane urządzenia pomiarowe. Trzecia i czwarta sekcja opisują behawioralny model systemu. Sekcja triggers konfiguruje wyzwalacze akcji (actions) w układzie. Mechanizm tego opisu jest bardzo prosty – w sekcji actions zawarte są opisy poszczególnych działań systemu – w przypadku omawianego układu – włączenia i wyłączenia pompy do wody.
System, w momencie wystąpienia zdarzenia opisanego w sekcji triggers uruchamia następnie zapisaną w danym wpisie akcję. Parametrem wyzwalającym w przypadku konfiguracji opisanej na listingu 1 jest czas, ale równie dobrze może to być np. wartość mierzonej zmiennej, wejście cyfrowe etc.
{ „name”: „MudPi”,
„version”: 0.8,
„debug”: false,
„redis”: {
„host”: „127.0.0.1”,
„port”: 6739
},
„relays”: [
{
„pin”: 13,
„normally_open”: true,
„group”: „”,
„name”: „Pump”,
„topic”: „garden/pi/relays/1”,
„tag”: „relay1”
},
{
„pin”: 16,
„normally_open”: true,
„group”: „”,
„name”: „Extra”,
„topic”: „garden/pi/relays/2”,
„tag”: „relay_extra”
}
],
„workers”: [
{
„type”: „sensor”,
„sensors”: [
{
„pin”: 25,
„is_digital”: true,
„type”: „Humidity”,
„name”: „dht”
},
{
„pin”: 17,
„is_digital”: true,
„type”: „Float”,
„name”: „float1”
},
{
„pin”: 27,
„is_digital”: true,
„type”: „Float”,
„name”: „float2”
}
]
}
],
„triggers”: [
{
„type”: „time”,
„key”: „turn_on_pump”,
„name”: „Daily Pump 12 Hours”,
„schedule”: „0 */12 * * *”,
„actions”: [„turn_on_pump”]
},
{
„type”: „time”,
„key”: „turn_off_pump”,
„name”: „Daily Pump Off”,
„schedule”: „15 */12 * * *”,
„actions”: [„turn_off_pump”]
}
],
„actions”: [
{
„type”: „event”,
„name”: „Turn on Pump”,
„key”: „turn_on_pump”,
„action”: {„event”:”Switch”, „data”:1},
„topic”: „garden/pi/relays/1”
},
{
„type”: „event”,
„name”: „Turn off Pump”,
„key”: „turn_off_pump”,
„action”: {„event”:”Switch”, „data”:0},
„topic”: „garden/pi/relays/1”
}
]
}
Wyzwalacz czasowy w tym projekcie pobiera ciąg sformatowany zgodnie z wymaganiami cron, aby określić, kiedy powinien zostać aktywowany. W tej konfiguracji jest on ustawiony do uruchamiania się, co 12 godzin (dwa razy dziennie). Wyzwalacze przesunięte są w czasie o 15 minut, dzięki czemu pompa za każdym razem wyłącza się po 15 minutach.
Dokładny opis składni plików konfiguracyjnych MudPi znaleźć można w dokumentacji. Zapoznanie się z nią pozwoli uzyskać więcej szczegółowych informacji. Po skonfigurowaniu MudPi można ponownie uruchomić oprogramowanie, informując supervisor o chęci ponownego uruchomieniu programu. W tym celu w terminalu wpisujemy:
Możliwe jest również nasłuchiwanie zdarzeń MudPi bezpośrednio przez Redisa. Jest to najlepsza opcja, aby otrzymywać aktualizacje dotyczące systemu w czasie rzeczywistym. Zdarzenia z Redisa odczytywać można bezpośrednio poprzez redis-cli. W terminalu wpisujemy:
Źródło: https://bit.ly/3aqIJcx