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
- Płytka stykowa 170
- ATmega8P-PU (może być większa, np. ATmega328P-PU)
- Moduł Ethernet ENC28J60 (np. z eBaya)
- Optotriak MOC3021
- Triak BT138
- 2x Rezystor 330R
- Rezystor 220R
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.
(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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
#include "etherShield.h" #include "ETHER_28J60.h" int triak_pin = 7; int button_pin = 6; int i=0; static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; static uint8_t ip[4] = {192, 168, 1, 15}; static uint16_t port = 80; ETHER_28J60 e; void setup() { pinMode(triak_pin, OUTPUT); digitalWrite(triak_pin, LOW); pinMode(button_pin, INPUT); digitalWrite(button_pin, HIGH); delay(1000); e.setup(mac, ip, port); } void loop() { char* params; if (params = e.serviceRequest()) { if (strcmp(params, "lampka") == 0) { if(i == 0) { digitalWrite(triak_pin, HIGH); i=1; } else if(i == 1) { digitalWrite(triak_pin, LOW); i=0; } e.print("Done!"); } else if (strcmp(params, "lampka_off") == 0) { digitalWrite(triak_pin, LOW); i=0; e.print("OFF-DONE!"); } else if (strcmp(params, "lampka_on") == 0) { digitalWrite(triak_pin, HIGH); i=1; e.print("ON-DONE!"); } else if (strcmp(params, "lampka_status") == 0) { e.print(i); } else { e.print("Hello, World! :P"); } e.respond(); } if(digitalRead(button) == LOW) { if(i == 0) { digitalWrite(triak_pin, HIGH); i=1; } else if(i == 1) { digitalWrite(triak_pin, LOW); i=0; } } } |
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:
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
Nazywanie grafik z Fritzinga “schematem” jest daleko idącym nadużyciem… ;)
Czy ja wiem czy Fritzing taki zły – wszystko widać ;)
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.
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 :)
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.
Ewentualnie pomyśl też nad tekstem “własna aplikacja na Androida”. Niby temat już trochę oklepany, ale do majsterkowa pasuje a i walory edukacyjne by miało.
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 :)
Aby nie marnować płytek i nie dodawać drugiego modułu ethernet zintegrowałem to sobie w poprzednią płytkę, od projektu https://majsterkowo.pl/wlasny-internetowy-termometr/ – na tamtejszym zdjęciu widać ethernet oraz przycisk – właśnie od lampki :)
No gratuluje pomysłu!
Bardziej interesujące jest łączenie arduino z androidem.
Jak piszesz zintegrowałeś termometr, pomyśl nad programem (android) który wyświetlał na bieżąco dane z kilku czujników temperatury wraz z alarmem wysokiej/niskiej temp. (powiadomienie).
W sumie coś podobnego już stworzyłem dla swojego miasta: http://temperaturarypin.eu – co prawda 1 sensor ale aplikacja z widgetem + ostrzeżeniami o burzach ;)
Fajne to :)
Jest możliwość, abyś udostępnił źródła? :)
(Arduino+www)+android z możliwością wpisania własnego ip/portu tak jak napisał Damian S dla kilku czujników. Przypuszczam, że taką aplikację na androida pewnie byś musiał od początku napisać… :)
w linii 59 kodu jest błąd: (button) – powinno być (button_pin)
Pingback: Własny internetowy termometr » Majsterkowo.pl
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!
Inny z poradników na przykładzie temperatury jest tutaj : https://majsterkowo.pl/wlasny-internetowy-termometr/ ;)
Typowego serwera WWW raczej na takiej ilości pamięci się nie postawi, ale można sterować dowolnymi pinami i tak dalej ;)
Nie chodzi mi o stricte serwer http, tylko o omówienie jak to jest sterowane, jakie funkcje należy wywołać, aby np. wyświetlić przycisk lub wartość odczytu z pinu.
Podjąłbyś się tego?
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ę :)
A co jeśli chce się sterować większym prądem i napięciem. Jakie obciążenia wytrzyma ten triak?
W tedy za pomocą tranzystora sterujesz przekaźnikiem.
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.
Jasne – odezwę się do Ciebie na e-mail w tej sprawie :)
Jakub dorzuć tutaj nikt sie nie obrazi :)
Ja wiem ale ten kod jest kurcze na tyle słaby, że nie ma się czym chwalić. To mój któryś dzień z pisaniem na Androida – rozumiecie ;)
mógłbys podzielić się kodem ? :)
a czy ja też mógłbym prosić o kod pod androida?
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…
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
Wystawienie aplikacji w Google PLay wymaga jakichś opłat?
Coś słyszałem że liczą sobie 75zł “wpisowego” żeby cokolwiek wystawić…
Rejestracja developera wymaga opłaty – 20$, dalej już nie trzeba płacić
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
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 :-)
Stałej wartości po wywołaniu danego adresu, czy przyjmowanej z URL?
Mam na myśli wpisanie wartości z przeglądarki , czyli 2ga opcja.
Chciałbym zrobić podobny projekt, ale pod ATmega32. Czy mógłbyś udostępnić źródła tego programu na Androida?
Witam,
a możesz dodać zchemat i kod do sterowania trzema lampkami ?
oczywiście schemat :)
Fajny projekt.
Mozesz sie podzielic kodem zrodlowym na androida?
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 ??
zmień napiecie na 12v na przy nizszym tez mialem problemy
przy większym też nie chce się wyłączyć
Moze ma to wplyw że najpierw chcę wypróbować czy działa sam przycisk czyli moduł ethernetowy jest ale nie jest wpiety kabel, może głupie pytanie ale a nóż…
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.
Ustaw przekierowywanie portów na routerze :)
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?
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
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ł ?
Miałem to samo przy testach z lampką 12v. Zapalało ale nie gasiło. Zmieniłem na 230v i włącza i wyłącza.
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.
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!
Pingback: Tworzenie własnej aplikacji na androida » Majsterkowo.pl
A da się zrobić tak, żeby mieć dwie mozliwosci uruchomienia? Przez internet i przez zwykly przycisk?
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ć
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 ?
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?
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??
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 :) )?
hej bardzo fajny projekt. a mam pytanie czy da sie pod arduino podlaczyc kamerke i w podobny sposub ogladac z niej obraz przez internet?
:) raczej średnio – ale do tego świetnie nada się Raspberry Pi :) nawet tańszy model A.
A ja mam pytanie – czy wystarczy tą ATmegę wyciągnąć z Arduino i po prostu wsadzić w układ i podłączyć jak na rysunku?
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?
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?
Takie małe pytanko. A dlaczego nie użyty został zwykły przekaźnik jak choćby w projekcie listwy załączanej z usb?
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
Jeżeli podłączasz 3,3v to tak. Jak chcesz podłączyć 5v to góry lewy róg ;)
Proszę o pomoc:
sketch_may25a.ino: In function ‘void loop () ‘ :
sketch_may25a:58: error: ‘button’ was not declared in this scope
zmień na button_pin
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
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ć.
Fajne ale przydałby się kod strony internetowej.
Pingback: Sterowanie bramą przez internet. » Majsterkowo.pl
Mam takie pytanie na UNO działa, na Atmedze działa, Jak zrobić, żeby działało na LEONARDO, Potrzebne są jakieś zmiany w bibliotekach, czy może pin CS jest gdzie indziej???
Dobra kto szuka nie błądzi należy zmienić biblioteki jak w tym filmie
https://www.youtube.com/watch?v=7_JkQdUU8j4
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
Czy udało Ci sie rozwiązać problem. Jeśli tak to proszę napisz jak bo mam taki sam problem
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
Czy mógłbyś udostępnić plik HEX do wgrania na Atmege ?
Poleci ktoś jakiś najtańszy sposób na komunikację z telefonem przez wifi?
a czy to zadziała na arduino leonardo ?
Jak powinien wyglądać kod do wgrania na Atmege przy użyciu Eclipsa, bo chyba nie dokładnie tak jak przez Arduino ?
Witam.
W jaki sposób zapisałeś ustawienia użytkownika (URL) w aplikacji na android? Jaki format ma ikona programu?
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 ?
Fantastyczny post. Wielkie dzieki jeszcze raz. Naprawde Swietnie.
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
Witam. Mogę prosić o kod aplikacji na androida?
Ale lipa ja jestem w Niemczech złożyłem to działa elegancko super pomysł. Ale niestety aplikacja jest nie dostępna w tym kraju?
No niestety mi w Lipsku tez nie działa :\ chyba można pobierać tylko w PL
Jak chcesz to ci zrobię na szybko taką aplikację i podeślę na maila.