Programowanie Arduino, czyli nauka podlewania

Mamy już gotową część sprzętową systemu nawadniania i wiemy jak będzie się komunikować z systemem narzędnym działającym na bazie OpenWRT. Pora zabrać się za oprogramowanie. Przygotowując je należy pamiętać, że posłuży ono za podstawę budowy kolejnych elementów inteligentranego domu (lub jak kto woli, automatyki domowej). Poza tym system podlewania także ma dodatkowe funkcje, co trzeba przewidzieć.

Podsumujmy, co jest do zrobienia:

  1. Obsługa Ethernet Shield
  2. Klient www na potrzeby zgłaszania zdarzeń do systemu nadrzędnego (mastera)
  3. Obsługa serwera www - do przyjmowania komunikatów
  4. Sterowanie czterema przekaźnikami (dwa do podlewania, dwa na razie wolne)
  5. Pilnowanie zmian czterech wejść (dwa kontaktrony na drzwiach i dwa czujniki zalania)
  6. Realizacja różnych faz podlewania ogrodu

Komunikacja urządzeń inteligentnego domu - Arduino i OpenWRT

Zgodnie z koncepcją , przygotowałem część sprzętową mojego systemu odpowiedzielnego za podlewanie ogródka i parę innych rzeczy. Obiecałem, że wkrótce napiszę, jak to wszystko oprogramować. Wcześniej jednak należałoby zaprojektować komunikację różnych elementów systemu - nie tylko części odpowiedzialnej za podlewanie, ale urządzeń związanych z automatyką domową w szczególności.

Jak już wiecie z koncepcji systemu , “mózgiem” będą routery (jeden główny, drugi zapasowy) z oprogramowaniem w php. Oczywiście nie muszą to być routery - w szczególności mogą to być serwery, komputery, cienkie klienty lub inne urządzenia, na których można uruchomić Linuksa. Router (z zainstalowym OpenWRT ) jest o tyle dobrym wyborem, że jest energooszczędny a dodatkowo i tak działa cały czas pełniąc inne funkcje.

System nawadniania z Arduino - realizacja

Opisywałem ostatnio , jaka jest koncepcja przeniesienia mojego niewielkiego systemu nawadniania na nową platformę - Arduino . Mamy więc zebrane informacje, jaka będzie architektura i jakie elementy zostaną użyte. Co więcej, wszystko poza Arduino z osprzętem jest już gotowe. Pora więc zabrać się za montowanie całości i łączenie kabelków.

Ponieważ trudno zaakceptować wtykanie poszczególnych przewodów do złącz Arduino, więc najwygodniej jest zastosować moduł prototypowy And Proto Shield , który chwaliłem już wcześniej. Mimo, że na płytce nie będzie żadnych dodatkowych układów, to nawet dla pewnego umieszczenia przewodów we właściwych wejściach Arduino Uno, warto zastosować taki moduł. Docenia się to już po pierwszej konieczności odłączenia przewodów od Arduino i ponownego ich podłączenia.

Arduino - system podlewania

Koncepcja nowego systemu nawadniania ogródka

Gdy dwa lata temu tworzyłem poprzedni system podlewania ogródka, który opisałem gościnnie na Nibyblogu, wiedziałem, że musi być sterowany “przez Internet”, z możliwością autonomicznego działania. Nie znałem jeszcze wtedy Arduino , a rozwiązanie zostało oparte o kartę przekaźnikową podłączoną przez USB do routera. Nie powiem, żeby źle działało, ale pora w zabawie pójść dalej. Pretekstem ku temu jest chęć rozbudowy mojego systemu inteligentnego domu z użyciem Arduino . System podlewania ma być swego rodzaju poligonem doświadczalnym - na nim będę testował stabilność rozwiązania i tworzył pierwsze wersje oprogramowania, którego kawałki potem użyję potem w głównym module.

Nadal zakładam, że nadrzędnym elementem w systemie będzie router z OpenWRT z oprogramowaniem głównie w php. Arduino za to będzie posiadać większą autonomię. Nie będzie, jak karta przekaźnikowa, dostawać prostych poleceń - włącz, wyłącz, przełącz, tylko bardziej złożone, w rodzaju - podlewaj trawę przez 20 minut a pozostałe przez 15. Arduino będzie wykonywać te polecenia i raportować do routera. Co na tym zyskuję? Jeżeli podczas podlewania zawiesi się router, wystąpią problemy z programem w php (np. padnie system plików, pendrive albo hub usb), to czynność zostanie dokończona, a przede wszystkim zatrzymana zgodnie z planem. Jeżeli natomiast popsułoby się Arduino, to router mnie o tym poinformuje i będę miał szansę interweniować.

Co więcej, zyskuję możliwość wprowadzenia, przynajmniej częściowej, odporności na awarię głównego routera sterującego. W przypadku gdy przestanie on działać lub program sterujący nie będzie odpowiadać, chciałbym, żeby jego funkcję przejęło inne urządzenie. Wszak w domu są 3 routery z OpenWRT, więc możliwości jest sporo i zakładam, że przynajmniej część funkcji mogą realizować wymiennie. Co prawda innym założeniem jest, że system nie ma być używany do zastosowań “krytycznych”, czyli takich, których niewykonanie lub złe wykonanie mogłoby czymś poważnym zgrażać, ale czemu ma wyschnąć trawnik przez awarię routera, gdy można się przed tym zabezpieczyć? Będzie więc mój system podlewania pracował w “klastrze niezawodnościowym”… A co? Trzeba mieć fantazję. Oczywiście nie zabezpieczy to przed awarią Arduino, ale o tym zostałbym powiadomiony.

Ethernet Shield, czyli Arduino w Internecie

Ostatnio opisywałem mały router Edimaksa . Nie bez powodu. Zamierzam podłączyć Arduino do Internetu. Właściwie głównie do sieci lokalnej, ale z możliwością bezpośrednich zapytań “w świat”. Jak to zrobić? Przez Ethernet Shield - rozszerzenie nakładane na Arduino (kompatybilne zarówno z Uno jak i Mega ).

Arduino z Ethernet Shield

Komunikuje się ono przez interfejs SPI, który w Arduino Uno wyprowadzony jest na wyjścia 11, 12 i 13, natomiast w Mega na 50, 51 i 52. I tu może pojawić się pytanie, w jaki sposób jest w takim razie, shield jest kompatybilny z obydwoma płytkami. Jest, bo używa pinów oznaczonych jako ICSP, które są połączone z właściwymi wyjściami konkretnego Arduino. Warto to wiedzieć, bo na rynku jest jeszcze kilka “wynalazków” bez złącza ICSP, które używają zwykłych wyjść i nie współpracują poprawnie z wersją Mega (można je zmusić, ale nie w sposób elegancki). Oficjalna wersja działa w każdym razie poprawnie w każdym przypadku.

Edimax BR-6258n - router jak pudełko zapałek

Taki tani? Niestety jeszcze nie, ale taki mały. Zastanawiacie się, po co komu taki gadżet? Można go zabrać ze sobą w podróż, podłączyć w hotelu do sieci przewodowej i mieć wifi. Albo podłączyć do wifi i mieć sieć przewodową. Oczywiście, można, ale to trochę naciągane. Zastosowania jednak są a samo urządzenie ma kilka istotnych zalet.

Edimax BR-6258n wielkości pudełka zapałek

Czujnik zalania CZ 01

System nawadniania ogrodu powinien “wiedzieć”, kiedy pada deszcz. Gdy używałem karty przekaźnikowej (w wersji z cyfrowymi wejściami), to miałem do niej podłączony sensor opadów wykonany w oparciu o czujnik zalania CZ 01 firmy Sigma Projekt. Czujnik ten bardzo dobrze będzie współpracował z Arduino. Może nie jest to najprostsze możliwe rozwiązanie w przypadku niebieskiej płytki , ale do tej pory świetnie się sprawdzało i chcę je zachować.

Czujnik zalania CZ 01

Kontaktron, czyli Arduino pilnuje drzwi

Przy okazji przenoszenia funkcjonalności systemu podlewania z karty przekaźnikowej do Arduino, muszę podłączyć także czujniki otwarcia drzwi. Opierają się one na kontaktronach. Co to takiego? To po prostu łącznik sterowany polem magnetycznym. A w zrozumiałych słowach, w popularnym wydaniu - tanie i proste urządzenie składające się z magnesu, montowanego zwykle na drzwiach i części wykrywającej pole, z której wychodzą dwa kabelki - montowanej na futrynie. Jak magnes jest w pobliżu kontaktronu (czyli zwykle gdy drzwi są zamknięte), to przewody są zwarte, gdy dalej - nie. Kontaktron działa więc na takiej samej zasadzie jak włącznik, przynamniej z punktu widzenia Arduino.

Kontaktron

Moduł przekaźnikowy do Arduino

Dawno nie miałem okazji nic napisać, z powodu zupełnego braku czasu. Ponieważ jednak planuję w najbliższej przyszłości kilka zmian w moim ekosystemie inteligentnego domu , myślę, że wpisy będą się pojawiać częściej.

W pierwszej kolejności będę chciał przenieść mój system nawadniania ogrodu z karty przekaźnikowej na Arduino . Dlatego też zaopatrzyłem się w tanie moduły przekaźników, które z powodzeniem można wykorzystać z Arduino.

Moduły przekaźników dla Arduino

Mój pierwszy "shield" do Arduino

Arduino to bardzo fajna zabawka. Świetnie wspomaga naukę podstaw współczesnej elektroniki. W budowaniu własnych układów szczególnie pomocna jest płytka stykowa . Dzięki niej można szybko i wygodnie tworzyć prototypowe urządzenia bez lutowania. Wtykamy tylko kabelki i elementy na płytkę, podłączamy do Arduino i już działa. Bardzo dobrze testuje się w ten sposób działanie różnych elementów elektronicznych oraz sprawdza, czy wymyślone koncepcje układów będą działać.

Tylko, że płytka stykowa nijak nie daje się użyć przy gotowym układzie - elementy można z niej wyszarpnąć, całość zajmuje dużo miejsca, same wady. Oczywiście, można powiedzieć, że Arduino do tego nie służy, że na gotowo można zbudować własny układ na mikrokontrolerze. Ale nie trzeba, bo Arduino nadaje się do gotowego układu, o ile ma elegancką powłokę (shield). Tylko, że amatorsko ciężko taką zrobić - trzeba zaprojektować i przygotować (lub zamówić) płytkę drukowaną, a potem polutować elementy (co w porównaniu z przygotowaniem płytki jest banalne). Czy aby na pewno trzeba?