Sterowanie oświetleniem za pomocą Arduino i www
Witam wszystkich majsterkowiczów. Chciałem się podzielić z Wami projektem, który realizuje od jakiegoś czasu. Zainteresowany tematyką inteligentnych budynków, postanowiłem zbudować własną stację kontrolno-pomiarową w oparciu właśnie o platformę Arduino. Nie nazwę tego systemem inteligentnego budynku ponieważ nie jest to system tak bardzo skomplikowany i autonomiczny. W wielkim skrócie układ ma realizować następujące założenia:
- monitorowanie temperatury pomieszczeń
- wykrywanie ruchu w pomieszczeniach
- wykrywanie dymu i gazów łatwopalnych
- sterowanie oświetleniem w pomieszczeniach
- powiadomienia sms/e-mail o zdarzeniach
W dzisiejszym wpisie chciałem opisać moduł, który umożliwi sterowanie oświetleniem i urządzeniami wysokiego napięcia przez Internet. Dodatkowo przedstawię prostą aplikację opartą o PHP, która będzie umożliwiała interakcję z użytkownikiem. Moduł sterowania będzie wykorzystywał popularne przekaźniki elektromagnetyczne, które są tanie i bardzo proste w użyciu.
Podczas łączenia obwodu proszę zachować ostrożność i uwagę, gdyż w tym wypadku pracujemy z napięciem 230V, które stanowi niebezpieczeństwo dla życia i zdrowia.
Co nam będzie potrzebne?
- Arduino UNO
- Ethertnet Shield
- Przekaźnik elektromagnetyczny
- 2x LED, rezystory 220Ω
- kabel sieciowy z wtykami RJ-45
- router z dostępem do internetu
- dowolny hosting www z obsługą Apache
- dowolna żarówka 230V wraz z gniazdem
- zasilanie 230V
Zasada działania, opis aplikacji
Zasada działania jest bardzo prosta, wysyłamy na wybrany pin cyfrowy podłączony do przekaźnika stan wysoki i w tym momencie przekaźnik zamyka obwód a prąd zaczyna płynąć. Aplikacja ma umożliwiać sterowanie wybranymi przekaźnikami oraz informować o ich aktualnym stanie. Poniżej przedstawiam schemat połączeniowy wykonany w Fritzing:
I jeszcze widok z okna aplikacji umożliwiającej sterowanie przekaźnikiem oraz diodami:
Od czego zacząć?
Jest wiele projektów umożliwiających sterowanie naszym Arduino za pomocą Internetu. Ja wybrałem Teleduino. Jest to darmowa usługa stworzona przez Nathana Kennedy’ego. Usługa nie wymaga żadnej specjalnej wiedzy — aby sterować układem Arduino, wystarczy wgrać odpowiedni szkic, wprowadzić swoje ustawienia a następnie wywołać specjalny adres URL w przeglądarce internetowej.
Pierwszym krokiem jest rejestracja i utworzenie unikalnego klucza identyfikującego. Robimy to wypełniając odpowiednie pola na stronie projektu. Po chwili na naszą skrzynkę e-mail trafi nasz unikatowy klucz który będzie miał następującą postać:
178544321Z9AEFF952ABCDEF8534B2BBF
Otrzymany klucz należy następnie przekonwertować na zmienną tablicową za pomocą narzędzia Arduino Sketch Key. Po poprawnym wygenerowaniu tablicy powinniśmy otrzymać coś takiego:
Każdy klucz jest unikatowy i przypisany do jednej płytki Arduino więc niema obawy, że wygenerujemy kod którym będziemy sterować inną płytką niż swoją. Również mamy pewność, że nikt nie przejmie kontroli nad naszą płytką. Chyba że udostępnimy komuś API KEY.
Kolejnym krokiem jest pobranie biblioteki Teleduino i skopiowanie jej do katalogu gdzie znajduje się IDE ARDUINO. W moim wypadku jest to ścieżka:
C:\Program Files (x86)\Arduino\libraries
Uruchamiamy ponownie środowisko Arduino IDE i z menu PLIK->PRZYKŁADY wybieramy TELEDUINO328->Teleduino328/TeleduinoEthernetClientProxy.
W środowisku IDE zostanie wyświetlony szkic Teleduino. Przed wysłaniem tego szkicu na płytkę Arduino należy zastąpić domyślny klucz wygenerowaną wcześniej tablicą.
Po zastąpieniu tej zmiennej należy zapisać i wysłać szkic na płytkę Arduino.
Możemy teraz połączyć platformę Arduino z siecią i obserwować diodę LED. Po około 30 sekundach dioda powinna kilka razy zamigać i zgasnąć. Po prawidłowym nawiązaniu połączenia dioda LED powinna migać raz na około 5 sekund. Ponieważ dioda LED stanu połączenia jest sterowana przez pin cyfrowy nr 8, podczas stosowania usługi Teleduino nie możemy wykorzystać tego pinu do żadnych innych celów.
Jak sterować pinami za pomocą adresu URL?
Sprawa jest banalnie prosta. Wpisujemy w adres dowolnej przeglądarki następujący ciąg:
http://us01.proxy.teleduino.org/api/1.0/328.php?k={KLUCZ}=setDigitalOutput&pin={X}&output={Y}
W miejsce {KLUCZ} wpisujemy oczywiście swój indywidualny klucz, który otrzymaliśmy pocztą elektroniczną. W pole {X} oraz {Y} wpisujemy odpowiednio numer pinu którym chcemy sterować oraz wartość 1 (stan wysoki) lub 0 (stan niski).
Przykład: chcemy aby na pinie numer 5 uzyskać stan wysoki. Wpisujemy następujący adres URL w pasku przęglądarki:
http://us01.proxy.teleduino.org/api/1.0/328.php?k=F33B9E28FFB3223321A7FIII21DC83369&r=setDigitalOutput&pin=5&output=1
Aplikacja do interakcji z użytkownikiem
Sterowanie poprzez adresy URL pozwala na napisanie prostej aplikacji opartej o formularze html do interakcji z użytkownikiem. Biblioteka Teleduino posiada nie tylko metody sterowania pinami. Ostatnio w dokumentacji znalazłem metodę, która zwraca nam stany wszystkich pinów. I w tym momencie rozwiązałem problem informowania użytkownika o stanie zasilania danego urządzenia. Po użyciu metody getAllInputs zostaje nam zwrócona informacja z danymi na temat wszystkich pinów:
{“status”:200,”message”:”OK”,”response”:{“result”:1,”time”:0.45036482810974,”values”:[1,1,0,0,0,1,0,1,0,0,1,1,1,0,1023,1023,658,545,341,399,373,354]}}
Poszczególne liczby po „values” są to stany pinów, zaczynając od A0 do A13, sześć ostatnich to piny analogowe. Informacja zwracana jest jako tablica wielowymiarowa za pomocą JSON, co umożliwia nam szybką obróbkę otrzymanych danych. Aplikacja kliencka oparta jest o PHP więc potrzebowałem funkcji, która odwoła się do danych w tej tablicy. Jak odczytywać dane znalazłem tutaj oraz w oficjalnej dokumentacji php. Nie będziemy zajmować się pisaniem kodu PHP, gdyż jest to inna tematyka. Kod źródłowy umieszczony jest na końcu wpisu.
Ogólna zasada działania aplikacji:
- Wyświetlenie listy dostępnych pokoi gdzie zainstalowane są przekaźniki.
- Sprawdzenie stanów konkretnych pinów (metoda GetAllInputs).
- Wyświetlenie stanu pinu w formie obrazka.
- Wyświetlenie przycisku akcji w zależności od stanu pinu (wyłącz/włącz).
- Informacja zwrotna po wciśnięciu konkretnego przycisku.
Podgląd aplikacji można zobaczyć pod adresem: http://jacekpie.vot.pl/demo/demo2.php , oczywiście nie ma połączenia z kluczem i Arduino ale można zobaczyć jak wygląda sama aplikacja.
Kod źródłowy aplikacji demo dostępny jest tutaj: kod źródłowy.
Bardzo chętnie pomogę i wyjaśnię wszelkie wątpliwości i w miarę możliwości odpowiem na każde pytanie.
Miłej zabawy!
Wszystko fajnie, ale kilka “ale”:
Merytorycznie mogło być troszkę lepiej dlatego 4-/5, nie mniej czekam na następne wpisy
poliakustyczny – moduł przekaźnika podłączony jest pod NO. Jeżeli chodzi właśnie o zwykły włącznik to próbuje znaleźć rozwiązanie które umożliwi wpięcie się w zwykły włącznik i “klasyczne sterowanie” bez użycia arduino.
Co do sterowania za pomocą włącznika to proponuje użyć łącznika dzwonkowego i biblioteki “ClickButton.h”. Tak po za tym to bardzo fajny projekt daje zasłużoną 5. Pozdrawiam :)
Ja widzę dwie możliwości i w obu coś mi się nie podoba:
ogólnie to jest zmora automatyków – sterowanie automatyczne + ręczne
Można wykorzystać przekaźniki stałe, które nie potrzebują zasilania do podtrzymania stanu (a jedynie impuls)
Co do reboot’a w środku nocy to co za problem napisać tak program, by zapamiętywał stan przekaźnika i po np awarii prądu ustawił tak samo, albo wymuszał wyłączenie?
wersja 2:
Tutaj już kwestia gustu, ale i tak to jest pewna automatyka – wtedy przyciskiem i tak nie załączasz bezpośrednio obwodu – jak padnie taki przekaźnik, to nie ma ani sterowania automatycznego, ani ręcznego
Niestety, obecnie większość obecnych automatyk domowych opiera się na idei włączników dzwonkowych, lub dotykowych
Projekt ciekawy ale:
a co do tego włącznika zwykłego, to takie coś stosuje Fibaro, że wpinasz włącznik do ich modułu i pewnie na niskim napięciu jest czytany jego, i w zależności czy się zmieni to światło się gasi/ zapala :D
“W wielkim skrócie układ ma realizować następujące założenia:
monitorowanie temperatury pomieszczeń
wykrywanie ruchu w pomieszczeniach
wykrywanie dymu i gazów łatwopalnych
sterowanie oświetleniem w pomieszczeniach
powiadomienia sms/e-mail o zdarzeniach”
no i… gdzie wyjaśnione te założenia? Bo ja widzę tylko “reklamę” cudzego projektu i jeden obrazeczek z przekaźnikiem.
Gdzie czujki ruchu? Gdzie czujki gazów? Gdzie sterowanie SMS? Gdzie wysyłanie maili?
Przekaźnikiem chyba nie będziesz ich pisał czy też wykrywał gazów… :/
“Jeżeli chodzi właśnie o zwykły włącznik to próbuje znaleźć rozwiązanie które umożliwi wpięcie się w zwykły włącznik i “klasyczne sterowanie” bez użycia arduino.”
to jest “zmora” wszystkich automatyków – dla mnie najlepszym (i najsensowniejszym) jest opcja: wyłączniki schodowe i równolegle z załączanym układem dać jakiś transoptor/dioda i fotorezystor lub fototranzystor i w ten sposób sprawdzać czy jest obwód załączony
“Co do sterowania za pomocą włącznika to proponuje użyć łącznika dzwonkowego i biblioteki “ClickButton.h””
z tym nic nie zrobisz – chodzi o klasyczne załączanie całego obwodu poprzez zwykły naścienny wyłącznik – czyli większe prądy, większe napięcia itd
“Minusem jest to że w połowie przypadków przekaźnik stale działa, a w przypadku wyłączenia arduino stan oświetlenia zmienia się na przeciwny (wyobraź sobie reboot w środku nocy i zapalone światło).”
No to trzeba porządnie napisać softa, by zapamiętał stan – wtedy conajwyżej “mrygnie” światłem przy awarii prądu
“tylko tu nie podoba mi się idea włączników dzwonkowych w całym mieszkaniu…”
a co w nich złego?
“a co do tego włącznika zwykłego, to takie coś stosuje Fibaro, że wpinasz włącznik do ich modułu i pewnie na niskim napięciu jest czytany jego, i w zależności czy się zmieni to światło się gasi/ zapala :D”
no tak, ALE – albo rozmawiamy o tradycyjnym uruchamianiu (wyłącznik załącza obwód prądowy) albo o jakimś “sterowanym” – jak Ci taki moduł siądzie to “tradycyjnie” nie zapalisz światła i tak
Napisałem komentarz i się nie chce wyświetlić
Cenzura na brzydkie slowa ;p
Chyba za długi komentarz ;)
bo wersja skrócona w końcu się pojawiła :)
“W wielkim skrócie układ ma realizować następujące założenia:
monitorowanie temperatury pomieszczeń
wykrywanie ruchu w pomieszczeniach
wykrywanie dymu i gazów łatwopalnych
sterowanie oświetleniem w pomieszczeniach
powiadomienia sms/e-mail o zdarzeniach”
no i… gdzie wyjaśnione te założenia? Bo ja widzę tylko “reklamę” cudzego projektu i jeden obrazeczek z przekaźnikiem.
Gdzie czujki ruchu? Gdzie czujki gazów? Gdzie sterowanie SMS? Gdzie wysyłanie maili?
Przekaźnikiem chyba nie będziesz ich pisał czy też wykrywał gazów… :/
(treść skrócona)
Całość projektu ma realizować wspomniane założenia, w tym wpisie opisałem jeden z modułów który odpowiada za sterowanie oświetleniem przez www. sukcesywnie będę opisywał resztę układu.
To z miłą chęcią poczekam na resztę, bo tutaj już były takie projekty na zasadzie “ciąg dalszy nastąpi” i… nie nastąpił ;)
no i gdzie są te kolejne sukcesywne dodawane opisy?
Własnie o tym mówiłem… :/
Projekt jest cały czas opisywany na blogu. Staram się, aby przynajmniej dwa razy w miesiącu pojawił się artykuł. W wolnej chwili, postaram się wrzucić najchętniej czytane artykuły w postaci poradnika.
Jak wyglada tutaj sprawa z ekspanderami wyjsc/wejsc??
zwykłym włącznikiem będzie mozna sterować dalej. Wystarczy zastosować bramkę xor. Albo xnor już nie pamietam
Możesz powiedzieć dokładniej co masz na myśli?
nie wiem, czy dobrze widzę, ale chyba zastosowany został drogi moduł ethernet, z układem w5100, podobne funkcje można zrealizować za pomocą układu enc28j60, przykładu z majsterkowa “lampka sterowana przez internet” oraz biblioteki UIPEthernet. Wychodzi taniej, i bez zewnętrznego serwera, wystarczy przekierować porty na swoim routerze.
Piotrze, ethernet shield został użyty w związku z tym, że projekt będzie rozbudowywany o kolejne moduły i użycie enc28j60 zabrało by 4 dodatkowe piny. Serwer zewnętrzny jest potrzebny do aplikacji webowej i bazy danych, która będzie przechowywać pomiary temperatur czy dane z czujnika ruchu.
enc28j60 to też układ/shield do łączenia z siecią, dla prostego czujnika jest ok, natomiast zgadzam się, że przy większej ilości czujników lepiej zastosować ethernet shield na układzie w5100
podałem to jako przykład do tańszego rozwiązania, w wypadku kiedy mamy do rozłożenia kilkanaście urządzeń koszty się liczą
Jeden i drugi używa magistrali SPI czyli 4 piny – 3 wspólne MISO,MOSI,SCK i jeden do sterowania SS (wspólne tzn. można je wykorzystać do innych modułów pracujący po SPI).
Za enc28j60 – przemawia możliwość wyboru pinu SS (w5100 ma na stałe przypisany 10 w bibliotece Ethernet )
Za w5100 – ma wbudowane stosy TCP/IP i potrzebuje mniej cenej pamięci do obsługi.
Koledzy, a co jeżeli nie chciałbym podłączać kabla i podłączyć do sieci przez WIFI?
(coś tańszego od arduino YUN)
Trochę czytałem o module WiFi ESP8266 – 802.11 b/g/n 2,4GHz (25zł) ale nigdy nie testowałem w praktyce.
Dzięki, a do czego jest potrzebny ten przekaźnik elektromagnetyczny? I jaki potrzebuje?
Przekaźnik potrzebny jest do tego, aby umożliwiać przepływ prądu 230V. Działa na zasadzie włącznika światła w każdym domu. Przekaźniki dostępne są na allegro: http://allegro.pl/listing/listing.php?order=m&string=przeka%C5%BAnik+arduino&bmatch=seng-ps-p-sm-isqm-3-e-0402
Jecek, może być taki: http://botland.com.pl/przekazniki/2723-modul-przekaznika-rm0-5v-10a125vac.html ?
i Dzięki za odpowiedzi
oczywiście, jak najbardziej
A czy płytka powinna mieć dostarczone oddzielne zasilanie?
wystarczy zasilanie z USB i oczywiście oddzielnie 230V z sieci do modułu przekaźnika
A czarny przewód z modułu przekaźnika idzie na płytce do gnd, a nie łączy się z czerwonym? Dobrze myślę?
Tak, jest to połączenie z gnd i absolutnie nie łączy się z przewodem czerwonym, który jest pod wysokim napęciem
Mam pytanie do autora: w jakim programie zrobiłeś połączenie elementów przedstawione na 1. rysunku?
Jest to darmowy program fritzing dostępny pod adresem: http://fritzing.org/home/
Jak doprowadzić zasilanie do arduino? Nie zewnętrznie.
Witam, a mam pewien problem, ponieważ nie posiadam Ethernet Shield tylko ENJ28j60 to nie wiem do których pinów mam go podłączyć ? Z góry dziękuję za pomoc
Przy module ENC28j60 należy wybrać inne biblioteki, choć moduł ten tez korzysta z łącza SPI czyli MOSI SCK MISO. Warto podpiąć też pin reset do pinu reset kontrolera bo moduł ten lubi się zawiesić.
Aplikacja wywala taki cos co z tym mozna zrobic.
Informacja Oświetlenie w sypialni zostało włączone.
Notice: Use of undefined constant response – assumed ‘response’ in C:\xampp\htdocs\dashboard\demo2.php on line 160
Notice: Use of undefined constant values – assumed ‘values’ in C:\xampp\htdocs\dashboard\demo2.php on line 160
Notice: Use of undefined constant response – assumed ‘response’ in C:\xampp\htdocs\dashboard\demo2.php on line 161
Notice: Use of undefined constant values – assumed ‘values’ in C:\xampp\htdocs\dashboard\demo2.php on line 161
Notice: Use of undefined constant response – assumed ‘response’ in C:\xampp\htdocs\dashboard\demo2.php on line 162
Notice: Use of undefined constant values – assumed ‘values’ in C:\xampp\htdocs\dashboard\demo2.php on line 162
Witam,
nie wiem czemu ale dziala tylko na 2 pinie, na pozostalych nie ma zadnej reakcji.
Gdzie moze byc problem?
Witam;) Posiadam arduino uno oraz shield ethernet więc zacząłem się trochę bawić z powyższym projektem. Niestety napotkałem problem . Zrobiłem wszystko jak było wyżej opisane. Ściągnąłem biblioteki , wygenerowałem kod i podmieniłem w programie, podpiłem kabel rj45 do modułu , wgrałem program na płytkę. i do tego momentu jest ok dioda kontrolna się świeci tak jak to wyżej jest opisane , lecz gdy wpisuje w przeglądarkę adres z zmienionym kodem i portem którym chce sterować , brak reakcji. W przeglądarce wyskakuje mi
{“status”:400,”message” []}
na wyjściu zastosowałem zwykłą diodę . Nie wiem co może być przyczyną. Proszę o pomoc;)
Witam,dostaję tą samą informację robię wszystko jak napisane i wywala mi {„status”:400,”message”:”Invalid request syntax. Visit http:\/\/www.teleduino.org for protocol reference.”,”response”:[]}
o co chodzi??czy coś jest nie tak?
Podpinam się do komentarzy kolegów wyżej, mam ten sam problem, wszystko wg instrukcji a wywala
{„status”:400,”message”:”Invalid request syntax. Visit http:\/\/www.teleduino.org for protocol reference.”,”response”:[]}
Pozdrawiam
Zerknij proszę do dokumentacji i spróbuj odpalić akcję bezpośrednio z URL. Pamiętaj o swoich unikalnym ID w miejsce {KEY}
Wszystko robię zgodnie z instrukcją, nawet wejście w request key w dokumentacji wywala ten sam komunikat… Podejrzewam, że może być to coś z ip w kodzie czy coś, ale nie wiem jak to ugryźć .. Ethernet Shield jest w porządku, bo sprawdzałem go za pomocą aplikacji Blynk i na niej śmiga wszystko, jednak wolałbym pracę na teleduino.
Proszę o pomoc!
Poszukuje pomocy: Jak przygotować aplikacje w App Inventor aby pokazywała stan pinów?
Pozdrawiam
Nie napisałem, że dobrze jeśli będzie czytał stan pinów z teleduino z metody getAllInputs
Proszę o pomoc
Witam zrobiłem tak jak opisałeś podłączyłem pod pin 5 diodę i po podaniu adresu, oczywiście zmieniłem klucz dioda się nie zapala dodam że masa też jest doprowadzona
Czy idzie w ten sposób sterowac z dowolnego miejsca na świecie z dostępem do internetu
Witam czy temat jeszcze aktualny ? Sprawiłem sobie taki układ i nie bardzo to działa, po wysłaniu komendy http://us01.proxy.teleduino.org/api/1.0/328.php?k=F33B9E28FFB3223321A7FIII21DC83369&r=setDigitalOutput&pin=5&output=1
wyświetla mi się coś takiego i brak reakcji na wyjściu , oczywiście klucz zmieniony i wsad również podmieniony.
Arduino UNO , HR911105A