Lampka zapalana przez Internet

Lampka zapalana przez Internet

W swoim ostatnim wpisie pokazywałem jak zrobić Internetowy termometr – na tej samej płytce zawarte mam jednak jeszcze coś – włącznik światła, taki Internetowy. Przez dowolną przeglądarkę mogę odpytać odpowiedni URL i… zapali się światło. Właściwie to nie tylko światło, można tak uruchomić dowolny sprzęt, gdyż układ domyka zwyczajnie obwód :)

Potrzebne elementy

Potrzebne biblioteki

Biblioteki należy umieścić w folderze libraries naszego Arduino IDE. Oczywiście umieszczamy je w folderach takich w jakich są, nie luzem.
UWAGA! Biblioteka ENC28J60 pokrywa się z funkcjami biblioteki Ethernet Shield, dlatego musimy ją najpierw usunąć z katalogu libraries!

Schemat podłączeń

Posiadamy już wszystkie potrzebne biblioteki oraz części, pora przejść do ich podłączenia. Tradycyjnie już, zaczniemy od projektu przygotowanego na Arduino a skończymy na samodzielnie działającym układzie.

lampka_bb

(układ oznaczony jako FET to triak BT138 – taka mała niedoskonałość oprogramowania od schematów)

Moduł ENCJ28J60 którego użyłem podłączyłem do zasilania 5V. Uczyniłem to dlatego, że model jaki posiadam toleruje takie napięcie i upraszcza to dalszą część czyli przenoszenie kodu na ATmegę, jednak według dokumentacji moduł ten powinno zasilać się napięciem 3,3V!

W początkowej fazie testów najlepiej nie podłączać żadnego zasilania do triaka – lepiej podłączyć miernik ustawiony na sprawdzanie ciągłości obwodu do nóżek 1 i 2 aby sprawdzić czy układ poprawnie domyka obwód. W finalnej fazie układ może pracować na bezpieczniejszym napięciu – moja lampka jest na 12V i wszystko działa sprawnie :)

Kod dla mikroprocesora

Krótkie objaśnienie: w liniach 4 i 5 ustalamy pod którymi pinami podłączony jest triak oraz… przycisk. Przycisku obecnie na schemacie nie ma, dorobimy go w późniejszej fazie – w końcu nie samym Internetem lampka ma żyć, przyda jej się również jakiś manualny włącznik/wyłącznik. W linijce 9 możemy zmienić adres IP, w linijce 8 adres MAC – nie trzeba go zmieniać o ile nie powtarza się w Waszej sieci. Linie 14-24 to standardowa procedura która musi się wykonać po uruchomieniu układu. Pętla zawiera odczyt otrzymanego adresu URL od użytkownika – w zależności od niego wykonywana jest stosowna akcja. Przycisk ma za zadanie przełączyć lampkę w stan przeciwny – włączoną wyłączyć, a wyłączoną włączyć.

Rozkład adresów URL

  • Domyślnie, wyświetlony zostanie niewinny napis “Hello, World!”
  • /lampka – zmieni stan lampki na przeciwną, gdy włączona to zostanie wyłączona, gdy wyłączona – odwrotnie
  • /lampka_off – wyłączy lampkę bez względu na jej aktualny stan, gdy chcemy mieć pewność, że zostanie wyłączona
  • /lampka_on – analogicznie jak wyżej, lecz włączenie
  • /lampka_status – do sprawdzenia aktualnego stanu lampki (1 – włączona, 0 – wyłączona)

Na tym etapie układ powinien już działać i miernikiem powinniśmy widzieć zmiany w domknięciu obwodu po wykonaniu wymienionych akcji. Jeżeli wszystko działa, możemy przejść dalej. Nim jednak przystąpimy do dalszej części, mała zajawka :)

Mniej więcej w ten sposób tak to u mnie działa – na filmie widoczna jest aplikacja na Androida ale o niej nieco później.

Finalizacja projektu

Jak to na koniec realizowania projektu przystało, pora teraz przenieść się z Arduino na czystą ATmegę, tak aby Arduino mieć do kolejnych zabaw. Programujemy mikroprocesor oraz zmieniamy podłączenia kabelków na następujące:

lampka_atm_bb

Na sam koniec…

Fajne zapalanie światła, zdalnie przez Internet lub telefon to tylko jedno z możliwych zastosowań. W połączeniu z crontabem i kilkoma prostymi skryptami PHP lub Bash możemy stworzyć coś nieco bardziej automatycznego – zapalać/gasić światło o określonych godzinach i tak dalej. Światło to w sumie też tylko jeden z przykładów – może być dowolne inne urządzenie.

Bonus

Kończąc wpis jako bonus mam dla Was aplikację na Androida, nie zupełnie tą którą używam na filmie (bo tamta ma na sztywno wpisany link) – lecz nieco bardziej konfigurowalną. Dzięki niej będziecie mogli wykonywać operację /lampka bez uruchamiania przeglądarki Internetowej – zwykłym dotknięciem przycisku

Screenshot_2013-06-25-20-23-13 Screenshot_2013-06-25-20-23-31

play

(kliknij aby pobrać)

Ocena: 4.32/5 (głosów: 72)

Podobne posty

86 komentarzy do “Lampka zapalana przez Internet

  • Fajna zabawka :-)

    Jak już masz taką aplikację, to może pomyślałbyś nad inną – wywołującą zadany URL (konfigurowalny) z automatu zaraz po uruchomieniu i po chwili kończącą działanie. Do lampki też by się nadało, a może większej liczbie osób by się przydało.

    Odpowiedz
    • Jest to wykonalne – aczkolwiek ta zaprezentowana działa podobnie. To co robi to nic innego jak GET pod określony URL. Można dodać, aby robiła pierwszy GET tuż po uruchomieniu lub przywróceniu jej okna :)

      Odpowiedz
      • No właśnie, jak masz już prototyp, skonfigurowane środowisko programistyczne i konto w google z możliwością umieszczania aplikacji w sklepie, to pewnie dla Ciebie to drobiazg, a aplikacja mogłaby się cieszyć powodzeniem. Może też być coś w rodzaju pilota z konfigurowalnymi przyciskami robiącymi zapytania po http. Taki “Universal http remote controler”. Miałoby szanse powodzenia.

        Odpowiedz
  • Projekt prosty, ale genialny. Można go wykorzystać jako bazę do szerokopojętej komunikacji z urządzeniami przez sieć… Gdybyś mógł to dorzuć jeszcze zdjęcie płytki – jak to wygląda po podłączeniu :)

    Odpowiedz
  • Gościu, wielkie dzięki ci, jakieś 10 dni temu zamówiłem moduł enc28j60 z ebaya i szukałem poradnika, i teraz mam jakiś :>
    Zrób jeszcze jeden poradnik od ogólnego sterowania ethernetem, np, jak stworzyc stronę, i inne rzeczy z dokładnym objaśnieniem, to postawię ci browara :>
    Wielkie dzięki!

    Odpowiedz
  • Kiedyś miałem coś takiego zrobione za pomocą routera z OpenWrt i podłaczonego Arduino, mogłem przez telnet właczać np. chłodzenie routera, dysk czy oświetlenie, cokolwiek co dało się podłączyć.
    Pomysł bardzo ciekawy, niedługo sobie coś takiego zmontuję :)

    Odpowiedz
  • Czy mógłbyś udostępnić kod aplikacji bo od dłuższego czasu ma domową automatykę z funkcjami – parę przekaźników temperatura i rolety bym sobie przerobił tę aplikacje pod swoje potrzeby.

    Odpowiedz
  • Fajne. Proste. Dla ludzi. A masz pomysł jak tu sterować pinem spoza lokalnej sieci? Wtedy gdy chałupa stoi na internecie bezprzewodowym, gdzie 99% operatorów blokuje ruch z zewnątrz? Myślałem o kodzie, który raz na jakiś czas łączy się z jakąś stroną i sprawdza jej stan, ale nie mam pojęcia o PHP, a nic podobnego gotowego nie znalazłem…

    Odpowiedz
    • Da się to zrobić w drugą stronę ale to już wyjdzie opóźnienie w komunikacji. Spróbuj może zapytać dostawcę o przekierowanie kilku portów – najczęściej zgadzają się na to, rozwiąże to problem

      Odpowiedz
  • Ostatnio byłem na prezentacji jednej z firm zajmującej się inteligentnymi domami. Na pewno jest to dużo droższe niż zrobienie tego samemu w domu choć odchodzi pisanie własnego softu. Fajną sprawą oprócz zabawy oświetleniem, roletami itd była możliwość podłączenia przejściówki na kontakt. Dzięki niej można było liczyć ile dane urządzenie podłączone pod dany kontakt pobiera prądu. Wynik był podawany w WATach ale także w ZŁOTÓWKACH. Dodatkowo system informowała o spadku i wzrośnie moc, która istniej w momencie gdy na przykład lodówka zaczyna szwankować. Fajna sprawa

    Odpowiedz
  • Czy masz jakiś patent na wprowadzenie analogowej wartości do arduino za pomocą ENC28J60 ? Twój poprzedni wpis zainspirował mnie do zabawy z siecią , polecam każdemu :-)

    Odpowiedz
  • hmm a u mnie włącza diodę przyciskiem ale już nie chce wyłączyć a przez internet ani nie włącza ani nie wyłącza a niby wszystko wg schematu :( może mieć wpływ to że napięciem zasilającym diodę jest 5V a gniazda arduino a układ ethernetowy 3,3V ??

    Odpowiedz
  • Witam.
    W sieci lokalnej wszystko działa OK. Jeżeli próbuję połączyć się z modułem przez internet to wszystko się blokuje i przestaje działać nawet w sieci lokalnej. Po restarcie programu znowu działa w sieci lokalnej ale nie przez internet itd. Poradźcie proszę co zrobić żeby uruchomić sterowanie przez internet.

    Odpowiedz
  • Witam wszystkich.
    Czy mógł by mi pomóc z tym projektem. Bardzo mi się to spodobało ale niestety mimo dość dokładnego opisu nie mogę sobie poradzić. Na początku podłączyłem układ jak na rysunku dałem zasilanie 12V i podłączyłem brzęczyk. wpisałem zgodnie z przykładem w przeglądarkę http://192.168.1.15/lampka jednak brzęczyk się nie włączył. Czy trzeba ustawiać przekierowanie na routerze?

    Odpowiedz
  • Już sobie poradziłem. Nie wiem teraz jak się programuje ATmegę, poprzez Arduino. W Arduino też mam Atmegę jednak przy podmienieniu nie mogę wgrać bootloader i reszty kodu dla mikroprocesora. Mógł by ktoś mi to wytłumaczyć bo na przykładzie ATTINY2313 podanym w majsterkowo nie mogłem tego zrobić na atmage

    Odpowiedz
  • Witam,

    nie wiem dlaczego ani co może być przyczyną zę traik bt130 odpuszcza dopiero po ręcznym odłączeniu zasilania urzędzia lub samego urzadzenia i nieważne czy jest to wpięta lampka 12V czy przekaźnik z cewką 12V. Ma może ktoś jakiś pomysł ?

    Odpowiedz
      • A to dla tego, że triaki i tyrystory załaczają się impulsem z bramki ale wyłaczją się tylko przy przejściu napięcia sterowanego przez zero. Zanik napięcia na bramce nie odłacza zasilania żarówki 12V zasilanej napięciem stałym.

        Odpowiedz
    • Triak wyłącza się w momencie przejścia napięcia (sinusoidy napięcia)przez zero, czyli musi być napięcie ZMIENNE!!!. Przy napięciu stałym trak się załączy ale już się nie wyłączy!

      Odpowiedz
  • Witam mógł by ktoś pomóc. Nie wiem jak podłączyć Atmega do Arduino żeby wrzucić na niego program i usamodzielnić od Arduino. Kiedy jest podłączony do Arduino działa jak trzeba teraz zostało tylko wrzucić na Atmega 328P-UP i nie wiem jak to zrobić

    Odpowiedz
  • Witam

    Mam krytyczny problem: w żaden sposób nie mogę zestawić połączenia komputer moduł ethernet podłączony do Arduino. Pingi wysyłane na adres IP modułu nie wracają (a chyba powinny). Jedyny fakt świadczący o podłączeniu modułu to to, że w połączeniach sieciowych mam aktywne połączenie sieciowe (Win 7 twierdzi, że sieć jest niezidentyfikowana, ale to akurat nie powinno być problemem).

    Podejrzewałem, że problem wynika z zastosowania kabla prostego zamiast skrosowanego, ale to też wyeliminowałem.

    Winiłem zasilanie 5V z Arduino – myślałem, że mój moduł akurat nie potrafi takiego znieść. I faktycznie jeden nie zniósł – najwyraźniej się uszkodził, bo nawet dioda sygnalizująca zasilanie nie świeci.
    Zestawiłem więc prosty układ ze stabilizatorem 3.3V, ale wciąż nie działało. Poczytałem w specyfikacji układu ENC28J60, że układ może wymagać ponad 100mA zasilania. Arduino dostarczy bodajże 100mA na pinie 5V a uwzględniając jeszcze jakieś rozproszenie mocy na stabilizatorze 3.3V zakładałem, że mam za słabe zasilanie (zasilania z pinu 3.3V w Arduino też próbowałem). Podłączyłem więc stabilizator 3.3V do zasilacza impulsowego – wciąż bez efektu.
    Wyeliminowałem też możliwość uszkodzenia kolejnego układu – kupiłem dodatkowe 2 i już nie eksperymentowałem na nich z napięciem 5V.
    Połączenia sprawdzałem kilkakrotnie, mierzyłem napięcia zasilania multimetrem, sprawdzałem mój kod źródłowy pod kątem jakichś głupich błędów (skompilowałem nawet dokładnie ten sam kod co zamieszczony w tym wpisie) – wszystko wygląda na podłączone właściwie, a mimo wszystko nie działa…

    Od kilku dni zachodzę w głowę i nie mogę znaleźć rozwiązania. Czy ktoś spotkał się z tego typu problemami ?

    Odpowiedz
  • Próbuję zrobić coś takiego: Zewnętrzny czujnik temp. przesyła bezprzewodowo (przez moduł RF 433 ) do atmegi328. Atmega jest podłączona do do routera przez moduł ETHER_28J60.
    Chciałbym przy pomocy tego odczytywać dane o temp. zewnętrznej przez internet. Obydwa projekty oddzielnie działają tzn dobrze czujnik przesyła dane, atmega je odbiera oraz mogę połączyć się przez internet i odczytać dane z atmegi. Ale jeżeli połączę te projekty w całość atmega przestaje odbierać dane z czujnika. Przypuszczam że jest jakiś konflikt związany z bibliotekimi (używam jednocześnie – “etherShield.h” , “ETHER_28J60.h”, “VirtualWire.h”.

    Myślę że polecenie e.serviceRequest()) blokuje odbiór danych przez moduł RF. Z tego co wiem funkcja ta “musi” cały czas działać żeby nie blokować połączenia internetowego.

    Pytanie moje jest takie : czy da się jakimś poleceniem przerwać (na krótki czas np 20s, tak żeby odebrać w tym czasie dane z czujnika) działanie funkcji związanych z bibliotekami “etherShield.h” oraz “ETHER_28J60.h” po czym odebrać dane z czujnika zewnętrznego i potem znowu uruchomić działanie wcześniej przerwanych funkcji na przykład na 10 min. i tak dalej. Czytałem coś o przerwaniach ale jakoś nie mogę sobie z tym poradzić. Może ktoś może pomóc?

    Odpowiedz
  • Hej ludzie.
    Powiedzcie mi, bo jestem totalnym laikiem, czy ten sposób można wykorzystać do kontroli oświetlenia w mieszkaniu poprzez instalację i podłączenie tych modułów do skrzynki elektrycznej??

    Odpowiedz
  • Mam pytanie o ENC28J60 – skąd wiadomo które piny z modułu z którymi z Arduino należy podłączyć (jeśli nie mam oczywiście rysunku z tego artykułu :) )?

    Odpowiedz
  • Witam.

    A ja mam problem najwyraźniej jakiś z bibliotekami.

    Podczas kompilacji wywala mi błędy:

    In file included from main.c:1:
    etherShield.h:29: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute‘ before ‘EtherShield’
    In file included from main.c:2:
    ETHER_28J60.h:25: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute‘ before ‘ETHER_28J60’
    main.c:12: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute‘ before ‘e’
    main.c:15: warning: function declaration isn’t a prototype

    Może mi ktoś pomóc?

    Odpowiedz
    • Witam po raz kolejny. Doszedłem do tego, że mam zły plik makefile.
      Ten kod chce wgrać bezpośrednio na Atmega328p, bez arduino.
      Mógłby mi ktoś pomóc?

      Odpowiedz
  • Witam,
    Dla pewności przed podłączeniem całości do kupy chciałbym zapytać kogoś czy dobrze zrozumiałem do jakich pinów trzeba podłaczyć ENCJ28J60 . Dzieki z góry za pomoc.
    p.s zdjecie poniżej

    Odpowiedz
  • Proszę o pomoc:

    sketch_may25a.ino: In function ‘void loop () ‘ :

    sketch_may25a:58: error: ‘button’ was not declared in this scope

    Odpowiedz
  • Witam mały problem, ponieważ jak podłączę do układu zamiast diody (użytej do sprawdzenia czy układ działa) shield z przekaźnikiem (przekaźnikami) to układ się zawiesza, i pomaga tylko reset, co może byćprzyczyną?

    ok okszało się że przyczyną było słabe usb, przy załączeniu był mały spadek napięcia, i moduł się zawieszał, zauważyłem to dopiero puźniej. w przypadku arduino lepiej jest stosować zasilanie 3,3niż 5V przez regulator w module

    Odpowiedz
  • A wie może ktoś jak przekazać do arduino jakieś dane za pomocą ” parametry wywołania strony” znalazłem na elektrodzie bardzo fajny projekt restartera ethernetowego, niestety do jego wykonania, i konfiguracji wymagane jest zapoznanie się z tematem przekazywania parametrów, niestety nie znalazłem jak to zrobić.

    Odpowiedz
  • Jakubie czy mógłbym dostać screena kodu aplikacji, chodzi mi głównie o akcje przycisku opcji w telefonie u mnie jest tylko “o aplikacji” i “zatrzymaj aplikacje” pomocy u ciebie tak nie ma :C

    Odpowiedz
    • Rozwiązałem ;) Jest jedno ale: nie jestem w stanie Ci dokładnie
      powiedzieć co zadziałało, bo po desperackich próbach zmontowania układu na stykówce poddałem się i przysiadłem do prób ponowie dopiero po jakimś czasie. Około 2 tygodnie temu zaprojektowałem płytkę, wytrawiłem i wszystko działa jak należy.

      Podejrzewam, że 2 układy uszkodziły się albo przez napięcie 5V z Arduino albo przez niewłaściwe zastosowanie stabilizatora 3.3V. Podłączałem go zgodnie z polecanym schematem: http://electropark.pl/img/cms/stabilizatory/lm1117_przyklad.jpg. Przy takim podłączeniu nie otrzymywałem 3.3V na wyjściu a układ nie chciał prawidłowo pracować.

      Co więc zrobiłem i co na pewno się sprawdziło:

      1) Zrezygnowałem z Arduino, prototypowałem bezpośrednio na stykówce z ATmega 8A-PU.

      2) Najlepiej będzie jeśli podłączysz mikrokontroler kierując się zasadami opisanymi tutaj: http://mikrokontrolery.blogspot.com/2011/04/minimalne-podlaczanie-pinow.html (wersja 2 zalecana + obowiązkowo reset do +5V przez rezystor 10kOhm).

      3) W moim przypadku zastosowałem zasilanie całego układu z zasilacza 12V (12V potrzebowałem aby zasilić inny poboczny układ wykorzystywany w projekcie). Napięcie 5V do zasilania mikrokontrolera otrzymałem przez zastosowanie stabilizatora 5V a napięcie do zasilania modułu ethernet otrzymałem przez zastosowanie stabilizatora 3.3V (dokładnie takiego: http://electropark.pl/stabilizatory-napiecia-liniowe-jednonapieciowe/1392-lm1117s-3-3v-1a-stabilizator-napiecia-ldo-sot223-5901001392001.html). Na wejście stabilizatora 3.3V dałem 5V pochodzące z pierwszego stabilizatora. Ważna sprawa to oczywiście kondensatory filtrujące napięcie wejściowe i wyjściowe stabilizatorów. W moim przypadku stabilizator 3.3V dostał 100nF między wejście a masę (powinien dostać też między wyjście a masę, ale jakoś o tym zapomniałem, a układ działa). Inna ważna sprawa odnośnie zasilania 3.3V: nie dawałem żadnego rezystora na wyjściu stabilizatora tylko podłączyłem bezpośrednio do modułu ethernet.

      4) Programowanie układu (oczywiście na czas programowania odpinałem zasilanie 12V): z zastosowaniem Arduino jako programatora lub programatorem USBasp. Moja ATMega 8A-PU ma wgrany bootloader Arduino i jest taktowana wewnętrznym oscylatorem 8MHz.

      5) Na koniec bardzo istotna sprawa: jeżeli wykorzystujesz jakieś dodatkowe biblioteki poza tymi do obsługi modułu ethernet to KONIECZNIE zwróć uwagę czy w ich kodzie domyślnie nie są inicjalizowane piny, które wykorzystujesz do komunikacji z ethernet.
      Np. w moim przypadku moduł ethernet śmigał sobie dobrze do momentu gdy dołączyłem bibliotekę VirtualWire.h (do obsługi bezprzewodowego nadajnika i odbiornika 433MHz). Mimo, że zmieniłem domyślny port wykorzystywany do nadawania sygnału, to biblioteka wciąż inicjalizowała domyślne porty do odbioru danych (mimo, że ten mikrokontroler nie służył do obsługi odbiornika a jedynie nadajnika). Zmieniłem więc domyślne piny do obsługi pozostałych funkcji biblioteki i zaczęło śmigać.
      Na początek więc proponuję wykorzystać sam moduł Ethernet, a dopiero gdy stwierdzisz, że działa, próbuj dołączać pozostałe niezbędne biblioteki.

      To chyba tyle z problemów, które teraz przychodzą mi do głowy, a na które przy pierwszym podejściu nie zwracałem uwagi.

      Gdybyś wciąż miał jakieś pytania / problemy, to mogę Ci również udostępnić pliki Eagle’a z gotowym projektem, który sprawdza się u mnie na wytrawionej płytce PCB. Mogę też podzielić się działającym kodem źródłowym (nie jest skomplikowany, ale być może Cię na coś naprowadzi).

      Pamiętam jakie to było dla mnie frustrujące więc chętnie pomogę ;)

      Daj znać czy udało Ci się ruszyć do przodu. Pozdrawiam

      Odpowiedz
  • Witam.
    Jestem totalnym laikiem, udało wgrać mi się ten kod ale mógły go ktos zmodyfikować kod aby szło sterować kilkoma pinami ?

    Odpowiedz
  • Witam,
    bardzo zaciekawił mnie ten post lecz chciałbym zapytać jak podłączyć to wszystko używając ethernet shielda? Z góry dziękuje, Igor

    Odpowiedz

Odpowiedz

anuluj

Masz uwagi?