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.

Zdalne sterowanie urządzeniami elektrycznymi

Jakiś czas temu pisałem o szybkim wykonaniu sterownia bramą . Ponieważ patent się sprawdził, postanowiłem pójść nieco dalej i zrobić zdalne sterowanie urządzeniami elektrycznymi. Mając sprawdzoną kartę przekaźnikową nie jest to problem. Wystarczy do jednego z przekaźników podłączyć napięcie 230V i przeciągnąć kabel do gniazka, które ma być sterowane z routera lub komputera. Problem polega jedynie na tym, że trzeba przeciągać kable, a do tego jest to rozwiązanie mało mobilne. Tak się jednak złożyło, że w jednym z dyskontów (w Biedronce konkretnie) pojawiły się zdalnie sterowane gniazka (w niewygórowanej cenie 30 zł za 3 gniazdka z pilotem).

Janosik pomaga mi unikać zbójów przydrożnych

Jeżdżę ostrożnie i wolno. Ba, nawet przepisowo, szczególnie w mieście. Wbrew pozorom da się, kwestia przyzwyczajenia. W pewnym momencie człowiek dorasta i zdaje sobie sprawę, że pośpiech się nie opłaca i to w różnych kontekstach. Do pracy jadę przepisowo 10 minut, a jak się bardzo spieszę to 8-9. Jako, że najczęściej jeżdżę do pracy (tak, to smutne), te obliczenia skłoniły mnie do przemyśleń i zmiany stylu jazdy. Tym bardziej, że w połowie przypadków po dordze mijam straż miejską z fotoradarem (w końcu jadę odcinkiem nowej 2-pasmowej drogi, z ograniczeniem prędkości). Często też zaczaja się jakiś patrol w którymś z innych miejsc. Co tu dużo pisać - prawie każdy wie, jak to wygląda.

Rząd zaplanował na ten rok w budżecie wpływy z mandatów na poziomie miliarda dwustu milionów złotych (1200000000 PLN) i aby go zrealizować kupuje masę nowych fotoradarów. Na pewno też będzie się można spodziewać w związku z tym wzmożonej aktywności panów z suszarkami w dochodowych miejscach (tak, tak, niebezpiecznych, bo przecież o nasze bezpieczeństwo chodzi). A pewnie i gminy przy pomocy swoich służb będą chciały podratować trochę budżety, tym bardziej, że minister Rostowski zapowiedział, że zadłużanie bez pamięci musi się skończyć.

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.

Rejestrator monitoringu na bazie routera i pendrive

Jakiś czas temu opisywałem prosty system monitoringu oparty o kamerę Edimax IC3030 . Do tej pory zapisywałem (i wysyłałem dalej) obraz z kamery wyłącznie po wykryciu ruchu. Z czasem zacząłem się zastanawiać, czy nie rozszerzyć monitoringu o ciągłą rejestrację. Założyłem, że dobrze byłoby zapisywać obrazy z kamery co kilka sekund i gromadzić je na ukrytym nośniku w domu (oczywiście obsługiwanym przez router z OpenWRT). Tutaj w szczegóły nie będę się wdawał z wiadomych względów.

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).