Arduino – sterowanie oświetleniem przez sieć!

Arduino – sterowanie oświetleniem przez sieć!

W tym artykule opiszę sposób wykonania zdalnego sterowania jednym urządzeniem wpinanym do gniazdka 230V z wykorzystaniem Arduino. Wykorzystane będzie połączenie przez USB z komputerem, który jednocześnie będzie pełnił rolę serwera WWW. przez co możliwe będzie sterowanie zarówno z tej stacji jak i dzięki WiFi przez laptop, tablet, czy telefon komórkowy.

W sieci!

Ale mało tego, dzięki temu rozwiązaniu można będzie również sterować urządzeniem z dowolnego miejsca na świecie przez internet.

Efekt końcowy będzie wyglądał tak:

Artykuł można również przeczytać tu.

W takim razie zabieramy się do pracy :)

UWAGA!

Niektóre z opisanych w tym rozdziale układów są zasilane napięciem sieciowym, które jest niebezpieczne dla życia. Jeśli nie masz doświadczenia w pracy z napięciem sieciowym, nie próbuj wykonywać samodzielnie tych układów – poproś kogoś oświadczonego lub kup zasilacz fabryczny. Nierozważne eksperymenty z napięciem sieciowym mogą zakończyć się śmiertelnym porażeniem prądem elektrycznym.

Założenia

Przyznam, że zastanawiałem się trochę nad wybraniem technologii: java, czy node.js, ajax czy sockiet.io, itp. Zdecydowałem jednak że wykorzystam socket.io i jeden z kontenerów serwletów w javie. Dzięki socket.io komunikacja będzie szybsza i dodatkowo można będzie zaktualizować status oświetlenia na wszystkich urządzeniach podłączonych do panelu.

Elementy systemu:

  1. Sprzęt
    1. Arduino, (kupiłem zestaw od Elektroprzewodnika z Arduino Leonardo na Botlandzie)
    2. Moduł z przekaźnikiem do sterowania napięciem 230v, (kupiłem taki).
      BARDZO WAŻNE!
      Najlepszym rozwiązaniem będzie zakup gotowego modułu przekaźnika. Absolutnie nie wolno podłączyć bezpośrednio zwykłego przekaźnika do Arduino, ze względu na zakłócenia generowane przez cewkę co może się wiązać z następującymi problemami:

      1. W momencie wyłączenia przekaźnika mogą pojawić się krótkotrwałe zakłócenia sięgające kilkuset wolt, które mogą nam bardzo szybko uszkodzić Arduino.
      2. Zakłócenia generowane przez styki:
        1. Łuk elektryczny.
        2. Drgania styków.
  2. Przewód 2 x 0,75mm²
  3. Gniazdo 230V
  4. Wtyczka 230V
  5. Przewody połączeniowe żeńsko-męskie do płytek stykowych
  • Serwer WWW:
    1. java: apache tomcat (może też być jetty)
    2. java: netty-socketio
    3. java: rxtx
    4. html/js: bootstrap
    5. js: socket.io

 

No to zaczynamy!

Przewód zasilający i przekaźnik

Przeciągamy przewód 2 x 0,75mm² do zabezpieczającej puszki nadtynkowej, rozcinami osłonę i jeden z dwóch przewodów (ja akurat łączyłem dwa kable, stąd ta kostka w środku) i łączymy je pomiędzy wyjście COM i jedno z wyjść sterowanych przekaźnikiem. Z drugiej strony przekaźnika podłączamy przewody połączeniowe żeńsko-męskie (IN – wyjście sterujące, GND – masa, VCC – 5V).

1429445002560

Następnie do jednego z końców przewodu montujemy wtyczkę, a do drugiego gniazdo na 230V:

gniazdo_wtyczka

Zrobiliśmy w tym momencie przedłużacz, do którego w łatwy sposób wepniemy naszą lampkę biurkową.

Wychodzące trzy przewody połączeniowe z puszki wpinamy w Arduino: (IN – wyjście sterujące, GND – masa, VCC – 5V). Ja wykorzystałem pin 13 do sterowania przekaźnikiem.

Program Arduino

Nasz program będzie włączał przekaźnik, na podstawie otrzymanej liczby z portu szeregowego. Wartość 1 będzie załączała wyjście, a każda inna wartość będzie wyłączała. Aby można było zrealizować połączenie przez np. putty czy szeregowy monitor, w linii 22 pobierany jest kolejny znak komendy. Jeśli będzie to znak zakończenia linii, dopiero wtedy stan wyjścia zostanie zaktualizowany.

Panel użytkownika serwera WWW

Ściągamy aktualną wersję bootstrapa i socket.io, i tworzymy stronę do sterowania żarówką (uwaga, poniżej przedstawiam tylko najważniejsze fragmenty, nie całość):

Tworzymy plik w katalogu js/arduino.js do obsługi interfejsu i wysyłaniu komend do serwera WWW.
Uwaga! Adres 192.168.1.12 należy zamienić na adres ip komputera na którym będzie uruchomiony serwer WWW, a docelowo go sparametryzować

Nasz panel sterowania źródłem światła wygląda następująco:

kj_arduino_remote

Kliknij tutaj aby zobaczy jak wygląda panel online!

Java – serwer WWW

Tworzymy nowy projekt Mavenowy (w Netbeans: File->New project->Maven->Web Application.

W dependencies dodajemy dwie zależności: netty-socketio 1.7.7 i org.rxtx

Ściągamy bibliotekę rxtx (w moim przypadku windows 64 bit) rozpakowujemy i plik rxtxSerial.dll kopiujemy do głównego katalogu Windowsa.

Klasa do przechowywania komend:

Klasa do odbioru i wysyłki danych z portu szeregowego. Uwaga! Numer portu “COM5” należy zamienić na numer portu pod którym wpięty jest Arduino, a docelowo go sparametryzować

 

Klasa do obsługi socket.io w celu komunikacji z javascript przeglądarek klientów. Uwaga! Adres 192.168.1.12 należy zamienić na adres ip serwera na którym będzie uruchomiony program, a docelowo go sparametryzować:

Klasa inicjująca połączenie szeregowe w momencie startu serwera:

Na sam koniec tworzymy plik web.xml w katalogu WEB-INF:

To tyle. Wystarczy podłączyć nasz przygotowany przewód do zasilania i do niego lampkę.
Aplikacja jest gotowa do builda i uruchomienia np. przez Apache Tomcat czy np. Jetty.

Uwaga! Zarówno po stronie javascript i serwera java jest sporo parametrów do sparametryzowania której obsługi powyżej nie ma:

  • adres ip serwera www
  • numer portu serwera sockiet.io
  • konfiguracja połączenia szeregowego
  • itd.

 

Uwaga!
Przedstawiony program to prototyp, który powstał w ciągu jednego wieczoru. Mimo wszystko można go wykorzystać do sterowania oświetleniem nawet całego budynku ograniczając się do ilości wyjść wykorzystywanego modelu Arduino. W tym celu należy jednak zmienić w kodzie programu pojedynczo występujące zmienne na tablice i odpowiednio je obsłużyć. Projekt ten ma na celu zaprezentowanie w najprostszy sposób możliwość szybkiego wykonania zdalnego sterowania oświetleniem przez SIEĆ.
Na bazie tego projektu powstanie w przyszłości m.in. wyświetlanie w czasie rzeczywistym wykresu zmiany temperatury w pomieszczeniach czy ciśnienia atmosferycznego.

 

Zachęcam Was wszystkich do własnych eksperymentów z wykorzystaniem ulubionych języków programowania i Arduino!

Krzysztof Jelonek


Ocena: 4.24/5 (głosów: 78)

Podobne posty

25 komentarzy do “Arduino – sterowanie oświetleniem przez sieć!

  • Nie mogłem umieścić bezpośrednio na stronie filmu z youtube i podglądu panelu do sterowania, ponieważ blokowane są chyba znaczniki iframe.
    Administrator może zaktualizować treść, aby nie wykorzystywać linków do zewnętrznych źródeł tylko wyświetlać je bezpośrednio przez znaczniki iframe.

    Odpowiedz
  • Bardzo sprytnie i proste, ale .. Dlaczego wszyscy używają tylko arduino ? To platforma do prototypowania, nie rozumiem dlaczego wszyscy są tutaj tak leniwi niczym Amerykanie i jak projekt już działa, to nie przenoszą go na osobny procek :D Przecież koszt takiej atmegi8 to 5 zł, nawet jeśli ktoś nie ma programatora ISP, można użyć arduino do wgrania programu :)

    Odpowiedz
    • I ile ty kodu wgrasz na taka atmege8? Bardziej sie oplaca kupic np nano za 7 zl, jak kupowac atmege za 8 zl i mase dupereli za 3-4 zl, nie mowiac juz o tym ile jest z tym lutowania i oczywiscie trzeba wytrawic plytke.

      Odpowiedz
  • No własnie dlatego Janku, że uczymy się i piszemy różne projekty, które następnego dnia są całkiem innymi projektami.
    Dużo osób pisze w Arduino ponieważ (tak jak ja) nie ma wiedzy do zabawy bezpośrednio z mikrokontrolerami. A właściwie czasu. Arduino skraca czas wdrażania i uruchomienia pierwszego projektu. Myślę, że to jest główny powód Janku.

    Odpowiedz
    • Oczywiście, racja. Chodziło mi o bardziej o rzeczy, które mają działać długi czas – dziś budujemy sobie inteligentny sterownik rolet na Arduino, a jutro chcemy coś innego. I co wtedy ? Nie będziemy przecież za każdym razem kupować kolejnej płytki, ani rozmontowywać innych konstrukcji :D

      Odpowiedz
      • Masz rację, ale też chyba każdy ma tego świadomość, że po przygotowaniu prototypu w Arduino trzeba będzie przejść na wersję docelową. Ten wpis to oczywiście prototyp. Mało tego, który powstał w jeden wieczór, po tygodniu zabawy z Arduino. Pozdrawiam!

        Odpowiedz
  • Jeśli jesteś zadowolony z projektu to super, ale… Skoro już sterujesz z wykorzystaniem komputera i RS232 to arduino jest zbędne. Wystarczyło by napisać aplikację która steruje sygnałami RTS i DTR ;-)

    Druga opcja to port LPT (o ile posiadasz takowy). W prosty sposób można sterować 8-bitową magistralą tego portu, co daje 8 sygnałów we/wy.

    Odpowiedz
    • Masz rację, robiłem nawet takie coś m.in. do sterowania silnikami krokowymi na pracę dyplomową w technikum :) Ten mini projekt posłuży w przyszłości również do odbierania sygnałów analogowych z czujników.

      Odpowiedz
  • Nie uważasz, że Java jest tu trochę przesadą? Owszem, język elastyczny, ale JVM ma taką tendencję, że pożera trochę pamięci i jeśli ktoś chciałby wykorzystać platformę, która posiada niewiele RAM, to jest w czarnej d…

    Projekt ten ma na celu zaprezentowanie w najprostszy sposób możliwość szybkiego wykonania zdalnego sterowania oświetleniem przez SIEĆ

    Socket.io, jeśli mnie pamięć nie myli, powstał przede wszystkim w ramach ekosystemu Node’owego i serwer w nim zaprototypowany byłby znacznie wydajniejszym rozwiązaniem.

    Odpowiedz
    • Kluczowe pytanie ile to jest niewiele RAMu. Takie Raspberry za 180 zł. ma 1GB (choć nie orientowałem się na temat dedykowanych do niego jvm). J2ME też dawało radę w telefonach komórkowych. Ale rzeczywiście, w ogóle nie analizowałem kwestii wydajności, zapotrzebowania na pamięć, itp. bo akurat w ogóle nie wziąłem sobie tego za cel.

      Na socket.io opartych jest kilka portali z wykorzystaniem netty, myślę więc, że tutaj też nie ma problemu.

      Tak czy siak, na pewno napiszę coś w node.js komunikującego się z Arduino o czym chętnie się podzielę :)

      Odpowiedz
  • Jedna uwaga – w projekcie nie ma podłączonego przekaźnika pod Arduino, tylko jest MODUŁ z przekaźnikiem. Różnica jest spora, bo ten kto ma przekaźnik solo i podłączy go pod wyprowadzenia Arduino upali port procka, a na module jest po drodze tranzystor i (zapewne) dioda zabezpieczająca.

    Odpowiedz
  • Piszesz że nie można podłączać przekaźnika pod Arduino/ATmegę. Bezpośrednio nie -zresztą prądu nie starczy, ATmega ma rekomendowane obciążenie pinu 20 mA a cewka w przekaźnikach RM85 pobiera dwa razy tyle. Ale już załączanie cewki przez tranzystor i dioda Schotthyego wpięta jako flyback ładnie załatwiają sprawę. Wyjdzie pewnie taniej niż moduł do Arduino i mamy większy wybór przekaźników

    Odpowiedz
  • Świetny projekt, brakuje mi tu ogólnego schematu (może blokowego) jak to wszystko współpracuje; arduino steruje przekaźnikiem jak arduino odbiera “sygnały” od serwera?

    Odpowiedz
    • @Anonim: Odgrzeję kotleta: z tego co widzę na filmie, serwer jest zainstalowany na lapku (lub kompie, nie wiem do czego podpięty jest kabel USB od Leonardo), i właśnie tak jest przekazywany sygnał z sieci do dalszych sterowników (a dokładniej same komendy do Leonardo).
      Pozdro.

      Odpowiedz
  • Fajne ale mega skomplikowane. Zrobiłem coś podobnego na wemos D1 mini. Wszystko działa bez włączonego kompa i jest na 4 przekaźnikach z pomiarem temperatutury. Serwer wab jest wbudowany i potrzeba mieć właczonego koma. Apkę zrobiłem w MIT appinventory. Mam podstawową znajomość programowania, a spięcie całości zajęło mi ze 3 godziny.

    Odpowiedz

Odpowiedz

anuluj

Masz uwagi?