Projeków gdzie Arduino zaprzęgnięty jest do “mrugania” kolorowymi LED’ami w sieci jest tysiąc.
Pomysł więc nie jest wcale świeży. Narodził się, gdy chciałem spróbować napisać jakąś aplikację na platformę Android - dla zabawy i aby się przekonać czy jest to trudne.
Główne założenie projektu jakie sobie postawiłem:
- sterowana zdalnie (przez Bluetooth) lampką gdzie będzie można zmieniać kolor jej świecenia (diody RGB LED)
- “awaryjne” sterowanie lampką poprzez 4 przyciski (R-czerwony, G-zielony, B-niebieski, M-tryb)
Software:
Program został stworzony w środowisku Eclipse przy użyciu Javy. Jest to mój pierwszy projekt na Androida więc w rzeczy samej nie mogłem się ustrzec błędów. Mam nadzieję, że nie ma ich zbyt wiele.
Jako że z założenia miał to być program tylko dla mnie napisałem go dla wersji androida 4.0.3.
Ma też w kodzie wpisany adres MAC mojego modułu bluetooth, więc gdyby ktoś chciał go użyć musi pamiętać o wpisaniu poprawnych wartości.
Program na komórkę w wersji pierwszej miał tylko 3 suwaki, do każdego koloru oddzielnie.
Następnie rozbudowałem go o “color picker”, 10 dodatkowych ulubionych kolorów oraz wybór czasu po jakim lampka się wyłączy. Dodatkowo umieściłem dwa przyciski do włączania i wyłączania lampki oraz aktywowania trybu tęczy.
Wartości poszczególnych kolorów są zachowywane przy każdej zmianie, tak więc podczas ponownego uruchomienia aplikacji wszystko jest jak byśmy jej nigdy nie opuszczali.
Wyjątek jest tutaj timer, którego wartości nie zapisuję.
Tak wygląda aplikacja (główny ekran i wybór koloru poprzez "picker")
Hardware:
Mając pod reką parę Arduino wybór był oczywisty. Łatwe i przyjazne podejście do programowania tej platformy przemawiał tylko na jej korzyść. Dodatkowo jakoś należalo zacząć. Nic więc prostszego niż poskładanie wszystkiego na płytce uniwersalnej.
Oczywiście zacząłem od trzech jedno kolorowych diod. W wersji finalnej użyłem 31 RGB diod. Są one połączone równolegle. Jako, że obciążenie prądowe jest całkiem spore i Arduino mógłby nie przeżyć włączenia jednocześnie 31 diod, każdy kolor oddzielnie jest włączany tranzystorem (BD139).
Moduł bluetooth który kupiłem niestety działa w logice 3.3V - niezbędny się więc okazał regulator napięcia oraz MAX3232. Jak by problemów było mało - sygnał z niego (modułu BT) jest odwrócony. Więc musiałem też wrzucić do układu inverter. (użyłem bramek NAND bo akurat 7400 był pod ręką).
Szkielet do montażu diod zrobiłem z pustej butelki po napoju gazowanym. Wyciąłem 3 pierścienie w których zrobiłem otwory na diody. Wszystko zlutowałem razem tak, że tworzy sztywną konstrukcję.
Na początku nie miałem pomysłu na obudowę. Chciałem po prostu schować diody po jakimś kloszem, ale będąc ostatnio w Ikei zobaczyłem idealnie nadającą się do mojego projektu lampkę.
Kupiłem ją i jest “prawie” dobrze. Prawie, gdyż konstrukcja (płytka układu i LED’y) jest nieco za wysoka. Światło nie rozchodzi się jednolicie i widac na lampce ciemniejszy okrąg gdzie jest gorsze doświetlenie. Być może dodam jeszcze jeden, poziomy tym razem, pierścień z diodami aby doświetlić ciemniejszy obszar.
Taśma klejąca widoczna na zdjęciach służy blokowaniu światła małych LED'ów z Arduino i modułu BT.
No i dodatkowo film. Słychać klikanie gdy przełączam tryby świecenia lampki.
Udało się zrobić film starym aparatem. Oto i on:
Na chwilę obecną wszystko wciąż jest jeszcze na płytkach uniwersalnych. W planach jest zrobienie bardziej profesjonalnych płytek - o ile czas pozwoli.
Update W weekend zrobiłem nieco lepsze płytki. Zamiast arduino zastosowałem mega8. Program został bez zmian.
Parę fotek przedstawiających nową płytkę:
Firmware
Program na Arduino zacząłem pisać od obsługi bluetootha. Gdy to działało dodawałem po kolei poszczególne funkcje. Jak widać jest on bardzo prosty i nie ma w nim nic odkrywczego. Jedna rzecz mogąca budzić niepokój to przerwania. Problemem był tryb “tęczy”, z którego pętli nie łatwo było wyjść. Użyłem przerwań, bo nie potrafiłem wpaść na nic bardziej pomysłowego niż to. Tak więc każda transmisja po RS’ie czy naciśnięcie przycisku Mode wywołuje przerwanie gdzie flaga “tęczy” jest zerowana.
Spis elementów:
Arduino nano - 16$
BTM5 - moduł bluetooth - 9$
31 diod RGB - 15$ (za 50 diod)
63 rezystorów do diod (150 - 220R) - dobrać do porządanego prądu diod - 3$
7400 bramki nand pracujące jako invertery - 0.5$
MAX3232 - konwerter TTL - RS232 (działa przy 3.3V) - 0.5$
regulator 3.3V - 0.5$
3x BD139 - 3$
8x 100nF - 1$
4x wlączniki - 1$
4x 10k rezystory
2x jumper (do rozłączania linii RX TX aby można programować arduino w układzie)
zasilacz 5V/2A - 5$
lampa Jonisk Ikea - 200PLN
W załączniku:
Płytka i schemat - Eagle
Arduino wsad
Eclipse projekt
Re: YAALL - czyli jeszcze jedna LED'owa lampa Arduino
Ciekawi mnie protokół jaki został zastosowany w transmisji bluetooth.
Jest to jakoś opakowane czy po prostu surowe bity są wysyłane? Nie ma problemu z przekłamaniami?
Re: YAALL - czyli jeszcze jedna LED'owa lampa Arduino
Możesz dodać powiadomienie systemowe w androidzie by było wiadomo, że jest się w zasięgu lampki :) Na tym powiadomieniu możesz też wyświetlić aktualny kolor (taki gadżet ale może okazać się przydatny jak się jest na innym piętrze a chce się ustawić odpowiedni kolor do nastroju).
Re: YAALL - czyli jeszcze jedna LED'owa lampa Arduino
Strasznie drogo to wyszło. Płytka też wielka (wydaje mi się, że nawet na uniwersalnej dało się ciaśniej). W aplikacji powinno być wyszukiwanie urządzenia i PIN do połączenia (nie patrzyłem w kod czy tak jest), lub przycisk na lampie umożliwiający parowanie. Ja u siebie z innym napięciem logiki załatwiłem sprawę zenerkiem i opornikiem. My articles: (Add) 02 April 2013 Sudoku - AVR + drukarka termiczna 31 March 2013 Mini termometr na AVR v3
Re: YAALL - czyli jeszcze jedna LED'owa lampa Arduino
@LnxTx
Pytasz o to jak realizowany jest protokół BT?
Oj, to muszę cię rozczarować - przeceniasz moje umiejętności. Nie mam bladego pojęcia!
Ja po prostu podłączam się przez łącze szeregowe. Wysyłam ciąg znaków i je odbieram, przy okazji dekodując i odpowiednio włączam diody.
W obecnej konfiguracji nie ma żadnych przekłamań - a przynajmniej nie zauważyłem.
No nie, to nie tak :)
Gdy wychodzę z aplikacji (lub gdy wyłączam komórkę), wtedy łącze jest przerywane. Nie widzę potrzeby aby być bez przerwy podpiętym do lampki. Dane są tylko wysyłane do niej gdy zmieniam kolor czy ustawiam timer.
Natomiast jeśli chodzi o obecny kolor, to sprawę załatwia przycisk "color picker'a". Zmienia on barwę w zależności od ustawionego koloru. Oczywiście zawsze istnieje możliwość, że ktoś zmienił kolor przyciskami, ale w momencie podłączenia się do lampki, wysyłam paczkę danych z moimi ostatnimi ustawieniami - więc kolor będzie się zgadzał.
Powiadomienie o tym czy jestem podłączony czy też nie wyświetlam w momencie uruchamiania aplikacji.
Na screen-shot'cie zaznaczyłem przycisk wyboru koloru oraz wyświetlone powiadomienie o nawiązanym połączeniu:
@raffiki
Powiem tak, cena to rzecz względna. Dla jednych drogo dla innych tanio ;)
Zgadzam się - płytka jest wielka. Jest to wersja testowa i nie chodziło mi tu o jak najlepsze zagospodarowanie miejsca, lecz raczej o wygodę w trakcie łączenia pinów.
Nie zgadzam się z twoim stwierdzeniem co powinno być w aplikacji a czego nie. (traktuję je w ten sposób, że gdybyś Ty pisał tą aplikację te funkcje byś dodał)
Masz kody źródłowe - potrzebujesz tego - be my guest!
Aplikację pisałem dla siebie - nie dla kogoś, nie na sprzedaż, nie na zamówienie.
Gdyby tak było - owszem miał byś rację.
W moim projekcie to niepotrzebne dodatkowe zwiększenie objętości aplikacji i obciążenie jej funkcjami które będą wykorzystane jeden jedyny raz.
Dlatego parowanie BT załatwiam przez system a MAC adres modułu BT jest na stałe w kodzie.
Cieszę się, że mogłeś załatwić sprawę jedną zenerką. Niestety w moim przypadku to nie działało. Problemem nie było obniżanie napięcia ale jego podnoszenie. Wysoki poziom (logiczne "1") z modułu BT bez obciążenia Arduino wyglądał na oscyloskopie świetnie. Niestety, po obciążeniu już nie tak fajnie co powodowało straszne przekłamania lub nawet w ogóle nie można było zdekodować odebranej paczki. Próbowałem układu z dwoma tranzystorami - było lepiej, ale wciąż nie 100% OK. Próbowałem układu z tranzystorem FET - tutaj pełna porażka. Dlatego wyciągnąłem z szuflady MAX'a.
Re: YAALL - czyli jeszcze jedna LED'owa lampa Arduino
projekt podoba mi sie. osobiscie jednak wybralem inna droge - WiFi.
posiadam w domku kilka lampek RGB ale sa sprzegniete magistrala RS485. od tego zaczalem przygode z RS485. pomyslalem, trzeba sprobowac. i tak zaczelo toto ladnie dzialac. urzadzenia slave to uklady max487 i Atmelowa M8ka. master to domowy serwer mediow na Linuksie. klientem sterujacym wybrana lampka jest przegladarka webowa - zatem dosc elastycznie jest, gdyz moge klikac i z komputera siedzac przy biurku oraz z komorki bedac np w sypialni. a wystarczy, ze bede w zasiegu ktoregos z moich APkow. postawilem na jak najprostszy sprzet, a calosc inteligencji w oprogramowaniu po stronie komputra.
pozdrawiam,
m.
Re: YAALL - czyli jeszcze jedna LED'owa lampa Arduino
@maxi128
Zgadzam się w 100%! WiFi to jest właściwe podejście do tematu.
Jednak ten mały projekt elektroniczny powstał jako dodatek do czegoś na czym mi przede wszystkim zależało - próby sił w programowaniu na platformę Android.
Gdybym wybrał opcje WiFi - nie zostało by wiele do "programowania" na komórkę.
Re: YAALL - czyli jeszcze jedna LED'owa lampa Arduino
Jest pewien problem przy obracaniu ekranu. Raz że dziwnie długo to trwa, a dwa, że nie da się przesunąć ekranu przy obróconym ;)
I chodziło mi o powiadomienie systemowe a nie toast..
Re: YAALL - czyli jeszcze jedna LED'owa lampa Arduino
Co do czasu obracania to odpowiedź jest prosta - onCreate jest wywoływane za każdym razem gdy obracasz telefon - więc program próbuje się łączyć z modułem BT - jak go nie masz - będzie trwało długo.
Natomiast druga część jest dla mnie zagadką (za mało wiem o programowaniu androida jeszcze). Szczerze mówiąc nawet do głowy mi nie przyszło aby używać aplikacji w ten sposób. Jedynie kilka programów używam w trybie landscape (przeglądarka internetowa na przykład) i mam w ogóle wyłączone obracanie wyświetlacza.
Natomiast zainspirowałeś mnie - muszę zobaczyć jak zrobić to przewijanie ekranu w trybie poziomym - to się na pewno przyda kiedyś :) - dzięki !
Możesz wówczas reagować na zmiany orientacji. ScreenSize jest połączony z Orientation i żeby było aktywne muszą być oba podane.
Po wpisaniu tego u mnie nie przechodzi przez pause, stop, destroy, create, start, resume - "ścieżkę płaczu" ;) Nie wiem na ile jest to prawidłowy sposób ale przy tej aplikacji nie ma chyba większego znaczenia sprawdzanie konfiguracji, bo sama aplikacja nie jest mocno rozbudowana.
Co do przesuwania w trybie "landscape" to można to jeszcze inaczej zrobić. Po co przesuwać ;). Możesz zrobić drugi layout ale tym razem dla "landscape", ale tu musi być destroy i create..
Re: YAALL - czyli jeszcze jedna LED'owa lampa Arduino
Witam!
Ja mam taki mały OT - pisałeś to w Eclipse, używałeś AVD (emulatora)? Jeżeli tak to jak można dodać obsługę Bluetooth-a do niego i debugować program w Eclipse??
Grzegorz
Re: YAALL - czyli jeszcze jedna LED'owa lampa Arduino
Kolego.
Kolory nie pokrywają się w 100%.
Myślę że w dużej mierze wina jest po stronie LED'ów.
Natomiast zdjęcie przedstawia przykładowy screen shot z aplikacji, kiedy lampka była ustawiona na max niebieski kolor.
Właśnie udało mi się (mam nadzieję) załadować na serwer elektrody film i jak tylko zmiany w poście zostaną zaakceptowane przez moderatora sam zobaczysz jak to wygląda.
Re: YAALL - czyli jeszcze jedna LED'owa lampa Arduino
cikol wrote:
Znalazłem podobny(komercyjny) projekt : http://smart-rgb.com/ . Tu jeszcze zastosowano sterowanie z poziomu aplikacji windowsa.
Niestety aplikacja na androida tam dostępna to na żywca ściągnięty od Google przykład obsługi Bluetooth (BluetoothChat). Autor nawet nie pokusił się o zmianę nazwy programu w komunikatach w kilku miejscach i dodatkowo aplikacja posiada wszystkie błędy, które są w wyżej wymienionym przykładzie.. Co o tym sądzić? Sami oceńcie ;)
Re: YAALL - czyli jeszcze jedna LED'owa lampa Arduino
remick.no, would you be willing to help me with my own android program to control similar hardware? I will be doing a kickstarter soon, and would be able to pay you out of those funds...
Re: YAALL - czyli jeszcze jedna LED'owa lampa Arduino
Bad timing mate :(
I'm busy at work at the moment and on top of that my long awaited holidays will start soon.
You need to realize one more thing. I'm not android programming expert. RGB Lamp was my first project. Probably it has many bugs. You should rather try to contact someone who is more experienced in making android apps than I am.