Arduino

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?

Arduino w służbie inteligentnego domu - koncepcja

Minęło już trochę czasu odkąd testuję Arduino Uno R3 , więc pewnie pora zbudować koncepcję rozbudowy mojej niskobużetowej, amatorskiej instalacji inteligentnego domu , o której pisałem wcześniej. Chciałbym dołożyć dodatkowe funkcjonalności, a przy okazji pozbyć się jednej z kart przekaźnikowych na rzecz Arduino (skoro już jest, nie ma potrzeby mnożyć bytów). Nie chcę oczywiście odcinać się od routerów z OpenWRT i tego, co już osiągnąłem. Pora podsumować cały projekt, stan obecny i wizję przyszłości.

Stan obecny

Na początek małe podsumowanie (w skrócie) tego, jak system wygląda bez Arduino. Centralnym urządzeniem w środowisku automatyki domowej jest router TPlink TL-WR1043ND z zainstalowanym systemem OpenWRT. Dostarcza on Internet (sieć w ogólności) przewodowo do różnych punktów w domu i bezprzewodowo. Zlokalizowany jest w garażu, skąd rozchodzi się gwiaździście okablowanie do dużej części pomieszczeń w domu. Do routera podłączony jest dysk USB, który w przeszłości był źródłem dla odtwarzacza multimediów podłączonego do telewizora w salonie. W tej chwili z tej funkcji router został odciążony przez Iomega iConnect , stanowiący centrum składowania i serwowania danych. Do routera podłączona jest za to magistrala one-wire i kilkanaście termometrów w całym domu (w tym wiele w kotłowni do monitorowania kotła). Router gromadzi dane, rysuje wykresy i je udostępnia. Analizuje też temperatury z kotłowni i powiadamia smsem o różnych zdarzeniach, np. wygaśnięciu pieca. Router otwiera też bramę wjazdową, co opisywałem ostatnio i steruje ogrzewaniem (przełącza kocioł na ekogroszek w coś w rodzaju trybu bardzo oszczędnego).

Wielozadaniowość w Arduino?

Programowanie Arduino jest bardzo proste. Do takiego wniosku można dojść obserwując najprostsze przykłady programów. Spójrzmy chociażby na, prezentowany już wcześniej, program mrugający diodą podłączoną do wyjścia numer 13. Dla łatwiejszych dalszych rozważań został on jeszcze trochę uproszczony:

#define LED1 13

void setup() {                
  pinMode(LED1, OUTPUT); // ustawiamy pin 13 jako wyjście
}

int led1_state=0; // na początku zmienna będzie 0 (nie świeci)

void loop() {
  digitalWrite(LED1, led1_state); // ustawiamy stan wyjścia diody zgodnie 
                                  // z wartością zmiennej led1_state: 
                                  // 1 - świeci, 0 - nie
  delay(1000);             // czekamy sekundę
  led1_state=1-led1_state; // zmieniamy stan z 0 na 1 lub z 1 na 0
}

Nie ma w nim oczywiście nic wyszukanego - co sekundę zmieniamy stan wyjścia, a co za tym idzie diody świecącej. Przypominam, że 13 została wybrana nieprzypadkowo, ponieważ do tego wyjścia podłączona jest na stałe dioda znajdująca się na płytce Arduino.

Łączenie Arduino z OpenWrt

Od jakiegoś czasu “bawię się” Arduino, a swoje doświadczenia staram się tu opisywać. Pisałem też kiedyś o mojej koncepcji inteligentnego domu (lub jak kto woli domowej automatyki) w oparciu o OpenWRT. Do rozpoczęcia przygody z Arduino skłoniła mnie właśnie chęć rozbudowy tego systemu.

OpenWRT zainstalowany w routerze jest świetny, elastyczny, linuksowy, jednak trochę brakuje mu możliwości z realnym światem. Problem w dużej części rozwiązał zakup karty przekaźnikowej wyposażonej dodatkowo w wejścia, jednak cały czas mi czegoś brakowało.

Arduino - zdalne sterowanie urządzeniami elektrycznymi

Pisałem ostatnio o tanim zestawie do zdalnego sterowania gniazkami z Biedronki. Planowałem podłączyć przyciski pilota do Arduino przez jakiś moduł przekaźnikowy (jak Relay Shield ) i nawet dla tego zastosowania przylutowałem byłem już kabelki do mikrostyków. Po pewnym czasie jednak stwierdziłem, że można poszukać tańszego rozwiązania. Na początku zmierzyłem napięcia między stykami przycisków - nieco ponad 12V (tyle co napięcie baterii). Przy okazji oznaczyłem te styki, na których jest napięcie. Później zrobiłem eksperyment i zasiliłem pilota napięciem 5V wprost z Arduino (w końcu bateria ma to do siebie, że jej napięcie z czasem spada, więc projektanci musieli to przewidzieć). Z niższym napięciem też zadziałało. Co więcej, nadal nie było problemów z zasięgiem. Uznałem więc, że trzeba sprawdzić co będzie, gdy do styku przycisku, na którym nie było wcześniej napięcia przyłożę je wprost z Arduino (na wszelki wypadek przez rezystor, zapewne niepotrzebnie). Bingo, zadziałało.

Arduino - środowisko programistyczne

O tym, co to jest Arduino i dlaczego mi się podoba, pisałem w poprzednim poście . Teraz przyszła kolej, żeby wspomnieć o sednie całej zabawy - środowisku programistycznym. Wszak to między innymi dzięki łatwości programowania Arduino jest tak interesujące dla “przeciętnego człowieka”.

Programy dla Arduino tworzy się w języku opartym na platformie Wiring i przypomina bardzo uproszczone narzecze C/C++. Jakkolwiek mało przyjaźnie by to mogło zabrzmieć, oznacza ni mniej, ni więcej, że każda osoba mająca jakieś, choćby minimalne doświadczenie w języku C (a tak naprawdę jakimkolwiek języku programowania), po przeczytaniu krótkiego poradnika, szybko zacznie pisać proste programy. Ich konstrukcja jest wszak bardzo prosta, a masa przykładów, które można znaleźć w sieci, pozwoli szybko rozwiać ewentualne wątpliwości, lub nawet pisać oprogramowanie metodą “kopiuj/wklej”. Już samo środowisko programistyczne zawiera mnóstwo przykładów o różnym stopniu złożoności, napisanych tak, żeby łatwo je było zrozumieć. Bardzo dobrym punktem startu do nauki programowania będzie tutoral ze strony projektu Arduino.

Arduino - co to takiego?

Jakiś czas temu zacząłem zastanawiać się nad wejściem w świat elektroniki i mikrokontrolerów. Zawsze była jednak jakaś bariera, a potrzeby nie były wystarczająco silne. Do domowej automatyki wykorzystuję routery OpenWRT oraz karty przekaźnikowe i to w zasadzie wystarcza. Jednak do niektórych rozwiązań aż się prosi o zastosowanie jakiegoś dedykowanego, stabilnego i niezawodnego układu elektronicznego. Przykłady? Nadzór kotła c.o., aby był niezależny od restartów routera. Podobnie z monitorowaniem otwarcia drzwi (tym się zajmie w przyszłości centrala alarmowa). Czasem też przychodzi chęć podłączenia jakiegoś czujnika, którego stany są nieco bardziej złożone niż włącz/wyłącz.

Przez jakiś zastanawiałem się nad zakupem jakiegoś zestawu uruchomieniowego opartego o kontroler Atmega. Takie zestawy jednak trochę kosztują, potrzebują programatora, a po wykonaniu prototypu na płytce testowej, właściwie najlepiej byłoby przenieść projekt na dedykowaną płytkę. Jak na początek dość skomplikowane, dla kogoś, kto z elektroniką nie miał wcześniej nic wspólnego.

Sterowanie bramą Somfy przez telefon z Androidem

Po co sterować bramą wjazdową inaczej niż standardowym pilotem? Powodów jest kilka. Po pierwsze można otworzyć bramę jadąc do domu, kilkaset metrów wcześniej, żeby nie czekać aż się otworzy. Po drugie gdy trzeba zamknąć bramę (a nie zrobiło się tego będąc w samochodzie), to nie trzeba szukać drugiego pilota, który leży gdzieś w domu. Po trzecie, będąc na nartach nie trzeba prosić nikogo, żeby w dzień zabierania śmieci podjechał z kluczem uchylić furtkę, żeby śmieciarze opróżnili kosz (bo jak nie opróżnią to przez kolejny tydzień nie będzie gdzie wyrzucać śmieci i popiołu z pieca). Można zamiast tego rano otworzyć bramę przez Internet (o furtce też można pomyśleć, ale to kiedy indziej). Oczywiście ostatni przypadek może wydać się wyimaginowany, bo przecież można zrobić osobną furtkę tylko do koszy. Oczywiście, tylko trzeba ją mieć. A jak się nie ma, to można w 15 minut zrobić zdalne otwieranie bramy (z programowaniem w trochę ponad pół godziny).