Sterowanie oświetleniem za pomocą Arduino i www

Sterowanie oświetleniem za pomocą Arduino i www

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:

relay-1024x602

I jeszcze widok z okna aplikacji umożliwiającej sterowanie przekaźnikiem oraz diodami:

homeguard

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:

tablica

 

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.

sketch

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 phpNie 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:

  1. Wyświetlenie listy dostępnych pokoi gdzie zainstalowane są przekaźniki.
  2. Sprawdzenie stanów konkretnych pinów (metoda GetAllInputs).
  3. Wyświetlenie stanu pinu w formie obrazka.
  4. Wyświetlenie przycisku akcji w zależności od stanu pinu (wyłącz/włącz).
  5. 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!

Ocena: 4.55/5 (głosów: 65)

Podobne posty

50 komentarzy do “Sterowanie oświetleniem za pomocą Arduino i www

  • Wszystko fajnie, ale kilka “ale”:

    1. Widzę że wykorzystałeś (przynajmniej patrząc na Fritzing) moduł przekaźnikowy, a nie czysty przekaźnik. BTW, podłączałeś pod NC czy NO?
    2. “urządzeniami wysokiego napięcia przez Internet” 230V czy nawet 400V to wciąż niskie napięcie, ot taka uszczypliwość ;)
    3. NAJISTOTNIEJSZE moim zdaniem, brak przedstawionego rozwiązania działania zwykłego włącznika. Lubię automatykę i udogodnienia, ale powyższy sposób uniemożliwia sterowanie światłem zamiennie arduino/włącznik.

    Merytorycznie mogło być troszkę lepiej dlatego 4-/5, nie mniej czekam na następne wpisy

    Odpowiedz
  • 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.

    Odpowiedz
    • 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 :)

      Odpowiedz
    • Ja widzę dwie możliwości i w obu coś mi się nie podoba:

      1. schemat włącznika schodowego, w szereg wstawiasz włącznik światła, a zanim przekaźnik z odpowiednio podpiętymi wyjściami NO i NC (dla obu przypadków). 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).
      2. Drugi sposób to wstawienie jakiegoś przekaźnika bistabilnego, zamiast tradycyjnego włącznika używasz włącznika dzwonkowego, a kod arduino modyfikujesz tak by tylko przez chwilę włączał cewkę w przekaźniku (do złączenia przekaźnika bistabilnego), tylko tu nie podoba mi się idea włączników dzwonkowych w całym mieszkaniu…
      Odpowiedz
      • 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

        Odpowiedz
  • Projekt ciekawy ale:

    1. nie prąd a jak już napięcie 220V
    2. nie 220V a 230V

    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

    Odpowiedz
  • “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

    Odpowiedz
  • “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)

    Odpowiedz
    • 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.

      Odpowiedz
  • 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.

    Odpowiedz
    • 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.

      Odpowiedz
      • 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ą

        Odpowiedz
      • 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.

        Odpowiedz
  • 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

    Odpowiedz
    • 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ć.

      Odpowiedz
  • 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

    Odpowiedz
  • 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”Invalid request syntax. Visit http:\/\/www.teleduino.org for protocol reference.”,”response[]}
    na wyjściu zastosowałem zwykłą diodę . Nie wiem co może być przyczyną. Proszę o pomoc;)

    Odpowiedz
  • 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?

    Odpowiedz
  • 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

    Odpowiedz
      • 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!

        Odpowiedz
  • 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

    Odpowiedz

Odpowiedz

anuluj

Masz uwagi?