
W ramach moich projektów związanych z automatyzacją, tym razem chciałbym pokazać kontroler nawadniania ogrodu. Zeszłoroczne lato było wyjątkowo upalne i raczej suche, co z pewnością odbiło się na trawie i innych roślinach ogrodowych. Jak im pomóc? Rozwiązaniem są systemy nawadniania. Każdy producent takich systemów oferuje stosowne kontrolery, jednak nie zawsze spełniają one oczekiwania użytkownika, a często po prostu chcemy coś zrobić samemu. Tak też powstał pomysł na kontroler nawadniania. Został on zaprojektowany tak, aby pasował do obudowy na szynę DIN 35, co umożliwia łatwy montaż w klasycznych rozdzielnicach elektrycznych. Wszelkie informacje serwisowe i konfiguracja jest możliwa bezpośrednio dzięki GUI – kolorowy LCD z panelem dotykowym na module oraz zdalnie przez sieć.
Kontroler jest bardzo prostym urządzeniem, w które trudno włożyć jakieś nowe superfunkcjonalności. Stąd też prezentowana konstrukcja po prostu ma to, co kontroler nawadniania mieć powinien:
- sterowanie 7 obiegami nawadniania, z możliwością prostego zwiększania liczby obwodów przez dodatkowe ekspandery podłączone przez wyprowadzoną magistralę I2C lub RS485,
- możliwość sterowania różnymi elektrozaworami – 9V, 24V, z pamięcią lub bez,
- kontrola uszkodzenia elektrozaworu (zwarcie lub rozwarcie wyjścia),
- sterowanie 2 obwodami HV 230V – np. w celu sterowania włączaniem dodatkowych pomp systemu nawadniania,
- 6 wejść z zabezpieczeniami, do których można podłączyć czujniki cyfrowe lub analogowe – możliwość pomiaru napięcia przy pomocy 12-bitowego ADC. W ten sposób można podłączyć m.in. analogowe mierniki temperatury, np. LM35. Dla LM35 stworzona została sztuczna masa o potencjale ok. 1-1,2V w celu pomiaru temperatur ujemnych,
- wszystkie wejścia mają możliwość detekcji, co jest do nich podłączone,
- magistrala 1-wire do podłączenia urządzeń tego typu, m.in. popularnych DS18x20, zasilanie magistrali zabezpieczone dodatkowym bezpiecznikiem polimerowym z możliwością programowego odłączania zasilania.
- złącze do podłączenia zewnętrznych kart pamięci SD,
- moduł radiowy RFM22/23 do komunikacji z elementami systemu (np. czujnikami opadów i zewnętrzną stacją pogodową),
- opcjonalny moduł WiFi, np. popularny ESP8266 dla zapewnienia łączności internetowej – sterowanie modułem oraz pobieranie informacji pogodowych,
- interfejs RS485 dla komunikacji z innymi elementami systemu automatyki.
PCB wygląda tak:

Poza tym moduł jest wyposażony w pamięć DataFLASH o pojemności 4 MB do przechowywania logów urządzenia oraz buzzer do sygnalizacji krytycznych awarii. Do budowy użyłem mikrokontroler XMEGA256A3BU, który posiada także podtrzymywany bateryjnie RTC, który jest przydatny w tego typu kontrolerze. Do podtrzymania zasilania zegara użyłem superkondensatora. Takie podtrzymanie wystarcza na bardzo długo, a jednocześnie nie zajmuje dużo miejsca i ma, w przeciwieństwie do baterii, praktycznie nieograniczoną trwałość.
Moduł może być zasilany napięciem od kilku do 24 V AC (w zbudowanym urządzeniu, limitem jest kondensator filtrujący za mostkiem – ze względu na rozmiary użyłem kondensatora na 35V, co jest limitem dla zasilania 24 VAC). Zasilanie jest zabezpieczone bezpiecznikiem polimerowym. Użyty stabilizator impulsowy LM2675 ma maksymalne napięcie na wejściu 40 V. W praktyce, nie spotkałem się z popularnymi elektrozaworami na napięcie >24 V, więc nie jest to problemem. W razie czego, można zasilać moduł kontrolny innym napięciem niż elektrozawory – wyjścia są izolowane galwanicznie z wykorzystaniem optoMOSów, które wytrzymują napięcia pomiędzy elektrodami tranzystorów do 60 V. Użycie optoMOSów było podyktowane możliwością sterowania elektrozaworami na prąd stały, jak i zmienny. Po prostu napięcie sterujące elektrozaworów (o ile jest inne niż napięcie zasilania modułu) podaje się na wejście X2. Użycie optoMOSów, wraz z detekcją polaryzacji zasilania i fazy (w przypadku AC) umożliwia zasilanie zaworów napięciem 24VAC, z którego programowo robi się inne napięcia (wyłączenie optoMOSa w odpowiedniej fazie sinusoidy). W ten sposób do modułu można podłączyć jednocześnie elektrozawory sterowanie różnymi napięciami (co IMHO nie ma większego sensu, ale jeśli ktoś chce…).
Prąd elektrozaworów przechodzi przez układ ACS711, który jest przetwornikiem I/U, a następnie napięcie proporcjonalne do prądu podawane jest na wejście ADC/AC XMEGA. Umożliwia to detekcję zwarcia i wyłączenie problematycznego wyjścia, a także detekcję rozwarcia – braku wzrostu pobieranego prądu po włączeniu wyjścia. Może się to przydać do wykrywania awarii typu uszkodzenie elektrozaworu. Chociaż głównie chciałem sprawdzić jak sprawują się układy ACS7xx.
Ekspander wyjść
Akurat w moim przypadku 7 obwodów wyjściowych wystarcza, jednak, jeśli zajdzie potrzeba to można dodać kolejne wyjścia. W obudowie nie ma więcej miejsca na kolejne złącza śrubowe, więc z boku modułu wyprowadzony jest interfejs I2C, który umożliwia sterowanie modułem IO z dodatkowymi wyjściami/wejściami, do którego można podłączyć kolejny moduł itd.
Wejścia cyfrowo-analogowe
Moduł ma 6 wejść, co IMHO w zupełności wystarczy. Wejścia są zabezpieczone filtrem RC + diody Schottky’ego do Vcc i GND, czyli klasycznie. Dodatkowo na wejściu można wymusić pull up lub pull down, co umożliwia prostą detekcję braku podłączenia urządzeń. Ponieważ MCU zasilany jest napięciem 3,3V, a np. mierniki LM35 wymagają zasilania 5V, na płytce jest dodatkowy, opcjonalny stabilizator liniowy 5V – jako, że ewentualne termometry pobierają raczej mA, to wydzielane ciepło jest niewielkie i rozpraszane przez powiększoną warstwę miedzi wokół stabilizatora.
Graficzny interfejs użytkownika
Pierwotnie planowałem rozbudowany interfejs użytkownika (GUI), umożliwiający różne bajery. Jednak programowanie skomplikowanych funkcji bezpośrednio na module jest średnio wygodne, dlatego równolegle wszystko można zrobić przy pomocy aplikacji na PC, która zdalnie konfiguruje moduł poprzez interfejs RS485 lub jeden z interfejsów radiowych. Do realizacji GUI wykorzystałem moduły Nextion – głównie dlatego, że je miałem. Moduły programuje się wygodnie, przy pomocy aplikacji dla Windows, wyposażonej także w symulator GUI, co ułatwia zadanie. Dodatkowo, moduły umożliwiają uaktualnienie wsadu, więc łatwo możemy zmienić GUI. Mój kontroler zawiera stosowne procedury, dzięki czemu można przez sieć wczytać nowy firmware. Wyświetlacz o rozdzielczości 320x240 pikseli/16 bpp czytelnie pokazuje bieżący stan modułu, a wbudowany panel dotykowy umożliwia prostą kontrolę. Niestety moduły Nextion mają naprawdę fatalny rendering fontów. Samo menu graficznie tez pozostawia wiele do życzenia, ale jak pisałem – układ będzie raczej konfigurowany przez PCta, lub telefon. Wyświetlacz ma raczej służyć do bieżącego podglądu pracy modułu i sygnalizowania ewentualnych awarii.
Kilka przykładowych zdjęć GUI:
1. Informacja o wersji software

2. Konfiguracja adresu i nazwy modułu w sieci RS485:

Komunikacja radiowa
Dane z modułem można wymieniać drogą radiową – WiFi lub z użyciem modułów RFM22/23 lub podobnych. RFM użyłem ze względu na zasięg – przy nawet niewielkiej antence z drutu można uzyskać 100-300m zasięgu, co jest wystarczające do zbierania danych ze zdalnych czujników, których nie możemy podłączyć przewodowo. W moim przypadku jest to zasilana solarnie stacja pogodowa, która monitoruje nasłonecznienie, opady, wilgotność, siłę wiatru itd. (kiedyś ją zaprezentuję). Dla nawadniania są to istotne parametry, które umożliwiają automatyczną modyfikację nastawionych czasów podlewania dla poszczególnych sekcji. Ekran konfiguracji parametrów do łączności z siecią z wykorzystaniem RFM:

WiFi
Z kolei WiFi jest opcją. Na module jest złącze z wyprowadzonymi sygnałami, a moduł WiFi jest podłączony jako piggyback board. W zamyśle, jeśli w przyszłości coś by mi wpadło do głowy, to zamiast budować układ od nowa, wystarczy podłączyć nową płyteczkę zawierającą potrzebne układy.
Piggyback board posiada też złącze do podłączenia karty SD – np. w celu logowania danych. Nie jest to potrzebne, bo zawarty na płytce 4 MB DataFLASH umożliwia zalogowanie sporej ilości danych. Na zdjęciu widać, że aktualnie jest podłączony układ ESP8266 – nie nadaje się on jako serce systemu sterowania nawadnianiem, ale dobrze się sprawdza jako interfejs WiFi.
Działanie
Układ robi to co robi – czyli kontroluje nawadnianie. W tym celu interpretuje proste metainstrukcje – zawierają one informację o kontrolowanych liniach nawadniania, czasie włączenia, długości nawadniania, dniach tygodnia, w których ma być nawadnianie oraz parametry określające średnie właściwości nawadnianego sektora – ekspozycję, nasiąkliwość gleby itd. Umożliwia to przeliczenie nastaw w zależności od warunków atmosferycznych.
Dodatkowo układ potrafi sterować dwoma pompami – np. pompą podającą wodę do nawadniania i pompą napełniającą zbiorniki. Ta część pracuje przy napięciu 230V, jest zabezpieczona dodatkowym bezpiecznikiem i umożliwia sterowanie np. stycznikiem.
Wszelkie błędy są sygnalizowane przez wbudowany buzzer, a ich przyczyna jest wyświetlana na LCD. Dodatkowo istnieje możliwość wysłania powiadomień do zdefiniowanych zdalnych urządzeń.
Mam świadomość, że układ miejscami jest pewnym przerostem formy i można go znacznie uprościć, ale po prostu chciałem się pobawić nowymi układami i sprawdzić je w działaniu, a przy okazji dodać kilka bajerów dla rozruszania prostej konstrukcji. Jako, że na nawadnianiu się nie znam, więc jeśli jakieś kolejne opcje będą potrzebne to je dodam – program zajmuje ok. 42 kB, a do dyspozycji jest aż 256 kB FLASH. Uaktualnianie firmware odbywa się po RS485 przy pomocy prostej aplikacji na PCta.
Integralność aplikacji zabezpieczona jest przez kod CRC32, po starcie odpala się bootloader, który sprawdza zgodność CRC32 aplikacji, jeśli jest zgodne to ją odpala, w przeciwnym przypadku oczekuje na nowy wsad. Całość dodatkowo zabezpieczona jest przez Watch Dog, a liczba jego zadziałań jest logowana przez moduł, co umożliwia detekcję potencjalnych problemów. Całość wydaje się być niezawodna, zobaczymy co czas pokaże.
Tak się prezentuje moduł po otwarciu obudowy:

No i schemat, oraz rysunki PCB:



Cool? Ranking DIY