Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Zrób sobie sam świąteczną gwiazdę z Arduino

Od pewnego czasu miałem chęć zrobić sobie ozdobę świąteczną. Coś ze świecącymi diodami, których sekwencję mógłbym sam zaprogramować według gustu. W zeszłym roku kupiłem zestaw do samodzielnego montażu w kształcie gwiazdy z myślą o przerobieniu tego tak, aby sterować światełkami za pomocą Arduino. Jednak okazało się, że nie tylko musiałbym się sporo nalutować bardzo małych elemencików, to na dodatek w płytce nie było nawierceń na układy. Poza tym pozostawał problem jak to połączyć z Arduino. Zabrakło czasu, chęci i determinacji i nic z tego nie wyszło. Nic dziwnego, że gdy w październiku zobaczyłem w popularnym sklepie internetowym produkt AdaFruit NeoPixel Ring od razu pomyślałem o moim niedokończonym projekcie. Ledowe kółko bardzo upraszczało wykonanie pomysłu. Od razu więc kupiłem jedną sztukę.

Jeśli ktoś ma ochotę na bardziej wypasione efekty to może sobie kupić nieco większe kółko, kwadratową płytkę lub taśmę. NeoPixel Ring 16 składa się z 16 lampek, z których każda ma 3 diody: czerwoną, zieloną i niebieską. Pozwala więc na świecenie dowolnym kolorem, powstającym podobnie jak w monitorze LED. Kółko wymaga zasilania napięciem 5V (Power 5V i Ground), które możemy doprowadzić bezpośrednio z Arduino. Trzeci kabelek podłączamy jako sygnał sterujący z dowolnego wyjścia cyfrowego (digital - w moim przypadku nr 3).

Do projektowania i testowania kodu używałem Arduino Mega 2560. Okazało się też, że mogę go użyć również jako programatora dla docelowej płytki dla mojej świątecznej gwiazdy (tu podziękowania dla mojego brata za pomoc). Aby gwiazda była mniejsza i nie blokowała mi moje Mega, kupiłem na eBayu klona Arduino Pro Mini. Na płytce trzeba wypalić Bootloader i wgrać program napisany w ArduinoIDE. Można to zrobić za pomocą konwentera USB uart, albo właśnie z użyciem innej płytki jak w moim przypadku (opis). (Da się do tego użyć zwykłego programatora USBasp, jednak trzeba trochę pokombinować i dolutować jumperki.)

Do zasilania użyłem zwykłych akumulatorków NiMH AAA. Kupiłem dwie kołyski x2 (nie mogłem znaleźć pojedynczej x4). Do tego użyłem włącznika z odzysku, który pałętał się od jakiegoś czasu wśród reszty części. Po zlutowaniu elektronika wyglądała w następujący sposób:
Pozostało jeszcze zrobienie z tego gwiazdy. Użyłem do tego gotowej ozdoby, do której za pomocą opaski zaciskowej i nitki o kolorze gwiazdy przymocowałem elektronikę (z pomocą syna):

Oprogramowanie

Kod piszemy w ArduinoIDE. Do sterowania wyświetlaniem kółka niezbędna jest biblioteka, którą musimy pobrać z Githuba. Umieszczamy ją w katalogu z innymi bibliotekami (u siebie korzystałem ze standardowego pakietu Ubuntu, co wymagało wgrania pobranych plików [.h, .cpp] do utworzonego katalogu: /usr/share/arduino/libraries/Adafruit_NeoPixel i zrestartowania IDE). W repozytorium znajdują się przykłady kodu, który można wykorzystać i zmienić dla swoich potrzeb. Gotowy kod jaki wgrałem do płytki ma postać: #include <Adafruit_NeoPixel.h> #define PIN 3 #define NUMPIXELS 16 Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); int delayval = 500; void setup() { pixels.begin(); } void setRed(int nr, uint8_t pow) { pixels.setPixelColor(nr, pixels.Color(pow,0,0)); pixels.show(); } void setGreen(int nr, uint8_t pow) { pixels.setPixelColor(nr, pixels.Color(0,pow,0)); pixels.show(); } void setBlue(int nr, uint8_t pow) { pixels.setPixelColor(nr, pixels.Color(0,0,pow)); pixels.show(); } void setYellow(int nr, uint8_t pow) { pixels.setPixelColor(nr, pixels.Color(pow,pow,0)); pixels.show(); } void switchOff(int nr) { pixels.setPixelColor(nr, pixels.Color(0,0,0)); pixels.show(); } void lightDark() { for(uint8_t p = 1; p < 250; p+=5){ for(int i=0; i < NUMPIXELS; i++) { if (i % 4 == 0) setRed(i, p); else if(i % 4 == 1) setBlue(i, p); else if(i % 4 == 2) setGreen(i, p); else if(i % 4 == 3) setYellow(i, p); } delay(100); } } void rondo() { uint8_t p = 120; for(int b = 0; b < 32; b++){ int nr = b % NUMPIXELS; for(int i=0; i < NUMPIXELS; i++) { if (i % 4 == 0) setRed((i + nr) % NUMPIXELS, p); else if(i % 4 == 1) setBlue((i + nr) % NUMPIXELS , p); else if(i % 4 == 2) setGreen((i + nr) % NUMPIXELS, p); else if(i % 4 == 3) setYellow((i + nr) % NUMPIXELS, p); } delay(500); } } void colorLight() { uint8_t pow = 120; for(int i=0;i<NUMPIXELS;i++){ setRed(i, pow); } delay(1000); for(int i=0;i<NUMPIXELS;i++){ setGreen(i, pow); } delay(1000); for(int i=0;i<NUMPIXELS;i++){ setYellow(i, pow); } delay(1000); for(int i=0;i<NUMPIXELS;i++){ setBlue(i, pow); } delay(1000); } void off() { for(int i=0;i<NUMPIXELS;i++) { switchOff(i); } } void loop() { lightDark(); off(); delay(delayval); colorLight(); off(); delay(delayval); rondo(); colorLight(); delay(delayval); }

Ponieważ chciałem użyć czterech kolorów napisałem 4 funkcje realizujące świecenie wybranego piksela (nr - od 0 do 15) z określoną jasnością (pow - od 0 do 255). Do wyłączania świecenia służy funkcja switchOff. Sekwencja świecenia wykorzystuje trzy efekty napisane w 3 funkcjach + funkcja do wyłączania wszystkich lampek. Pierwszy efekt to kolorowanie czterema kolorami lampek i stopniowe ich rozjaśnianie i gaśnięcie. Drugi to kolejne wyświetlenie jednego koloru na wszystkich lampkach. I wreszcie trzeci to przemieszczanie się kolorów na kółku.
Pisanie i sprawdzanie programu najlepiej przeprowadzić na normalnym Arduino i dopiero gdy program będzie gotowy wgrać go na mniejszą płytkę. Po przylutowaniu kabelków z zasilaniem nie będzie możliwe, bez ich ponownego odlutowania, wgranie nowego programu (przynajmniej tak się działo przy użyciu jako programatora Arduino Mega).

Gotowy efekt na filmiku:

Całość dzięki użyciu NeoPixel nie jest zbyt skomplikowana nawet dla początkującego adepta elektroniki. Zaś efekt na żywo wygląda znacznie lepiej niż na filmiku i jest bardzo fajnym ozdobnikiem świątecznej choinki. Najlepsza zabawa polega na samodzielnym programowaniu własnych efektów świetlnych. Pozdrawiam wszystkich miłośników Arduino i życzę miłej zabawy. A wszystkim, życzę Wesołych Świąt i szczęśliwego Nowego Roku.
 

programowanie hobby

Komentarze

0 nowych
DjLeo MODERATOR BLOGA  18 #1 26.12.2014 01:01

Bardzo fajny pomysł. Taka gwiazda własnej roboty to +100 pkt. do szacunku u teściowej.

matty24   9 #2 26.12.2014 01:03

Troszkę drogo wyszła ta ozdoba, ale satysfakcja z samodzielnego wykonania i nabrane doświadczenie jest bezcenne.

  #3 26.12.2014 06:15

Mikołaj wymiatasz :!

fiesta   15 #4 26.12.2014 07:00

Widać żeś techniczny a nie artystyczny:P. Te Ledy umieścił bym z tyłu ozdoby i przymaskował pierścieniem np z bibuły lub kalki technicznej żeby rozproszyć nieco dające po oczach światło.

foreste   15 #5 26.12.2014 08:14

@mikolaj_s http://www.sklep.atnel.pl/pl/p/WS2812B-TASMA-RGB-0%2C5m/97 zawiesić na choinkę i nie trza zarówek :P Widze ze nie tylko ja grzebie elektronice :).

emil_emil   7 #6 26.12.2014 08:30

Jak by ktos szukal Arduino UNO R3 Atmega328P AVR USB to mam zbedne, wogle nie uzyte, lezy i tylko zawadza.

  #7 26.12.2014 09:39

W tytule sobie, w pierwszym zdaniu sobie, w drugim zdaniu sobie, w trzecim zdaniu sobie...

wojtekadams   18 #8 26.12.2014 09:59

Fajny wpis. Zasłużenie na głównej portalu!

czarnylas   14 #9 26.12.2014 10:17

Projekt całkiem ciekawy ja bym się pokusił i zalał to wszystko w żywicy do ledów (http://www.semicon.com.pl/permacol_zywica) wtedy możemy pokombinować nad kształtem naszej gwiazdy

mikolaj_s   14 #10 26.12.2014 10:32

@matty24: Całość kosztowała mnie jakieś 60 zł plus akumulatorki, ale je wykorzystam ponownie w innym projekcie.. Nie ma szans, aby znaleźć coś podobnego taniej co pozwoliłoby zaprogramować własną sekwencję. Natomiast gdybym próbował robić samodzielnie wszystko z diod to straciłbym czas, który jest więcej wart niż ten koszt ;)

@fiesta Jak już pisałem na żywo wygląda to lepiej niż na filmiku i przyciemnianie jest zbędne. Z tyłu ledów nie byłoby widać.

@foreste Też mi to przyszło do głowy ;)

@emil_emil Wystaw na Allegro niech się nie marnuje, albo przemyśl to jeszcze. Taki projekt jak opisany na prawdę nie jest zbyt trudny.

@wojtekadams Dzięki. :)

@czarnylas Kombinacja z wyglądem jakoś mnie nie bawi, może żona jak kupi trochę bibuły i znajdzie trochę czasu to ją upiększy ;)

emil_emil   7 #11 26.12.2014 10:58

mikolaj_s mam, 30zł to dla nie ktorych zbyt wiele za takie coś

lordjahu   20 #12 26.12.2014 11:31

Tony Stark Cię pozwie !!

TestamenT   12 #13 26.12.2014 12:26

Ale czad, świecący pentagram :]

paweo12   5 #14 26.12.2014 12:56

W Pro Mini nie trzeba wypalać Bootloadera ;)

  #15 26.12.2014 13:11

Święte słowa Mikołaju ... ,, Najlepsza zabawa polega na samodzielnym programowaniu własnych efektów świetlnych'' :)

foreste   15 #16 26.12.2014 13:41

@mikolaj_s: masz blad w blogu nie usbuart lecz usbasp

Autor edytował komentarz.
pysiu   13 #17 26.12.2014 14:21

Fajne , najważniejsze że sam zrobił a nie gotowiec :) :)

mikolaj_s   14 #18 26.12.2014 14:23

@foreste: Masz rację jest błąd, jednak chodziło mi o konwenter USB. Za pomocą programatora też się ponoć da.

ghost-001   5 #19 26.12.2014 16:53

@mikolaj_s: Fajnie Ci to wyszło, może jak będziesz miał chwilę czasu napisz jakiś poradnik jak zabrać się do tej biblioteki Adafruit, w necie jest raczej mało informacji.

foreste   15 #20 26.12.2014 17:25

@ghost-001: aa konwerter na chip ft232 to mają arduino i zestawy atb 1.0.x http://www.sklep.atnel.pl/pl/p/Zestaw-uruchomieniowy-AVR-LIBRA/2 posiadam taki :)

Savpether   6 #21 26.12.2014 18:51

@emil_emil: Ile byś sobie życzył?

  #22 26.12.2014 20:17

Projekt bardzo ciekawy, chyba pobawię się tym Arduino tylko nie wiem jak wersje kupić bo jest tego trochę na popularnym portalu aukcyjnym. To Twoje Arduino Mega to jakiś oryginał czy klon ? Jak możesz to doradź coś.

emil_emil   7 #23 26.12.2014 21:07

@Savpether: tak jak napisalem + wysylka :-) Masz na gmailu link

Chomiq   2 #24 26.12.2014 23:08

@TestamenT: Jeszcze tylko kot do tego

  #25 27.12.2014 02:46

Szczerze podziwiam Cię za chęć robienia czegoś takiego. Efekt bardzo fajny, ale ja wolałbym zapłacić za gotowca. Trzeba mieć niezłego kotka na punkcie elektroniki, żeby bawić się w takie rękodzieło. Z drugiej strony - syn pewnie jest dumny (albo będzie, jak podrośnie), że tata potrafi zrobić takie fajne COŚ - a to jest bezcenne..!

  #26 27.12.2014 08:45

Gwiazda pięcioramienna wygląda jak np. gwiazda szeryfa z westernu. Ta ozdoba to gwiazda z przekątnymi czyli pentagram -- idealna ozdoba świąteczna na choinkę Nergala :)

ghost-001   5 #27 27.12.2014 10:23

@foreste: Nie za bardzo wiem dlaczego kierujesz do mnie swój komentarz który nie ma związku z treścią mojego poprzedniego komentarza.
Co do zestawów Pana Mirosława, fajna sprawa, nawet zaczął cykl poradników na temat WS2812, ale ostatnio jakby trochę zarzucił ten temat (od dłuższego czasu nie pojawił się nowy poradnik).

foreste   15 #28 27.12.2014 10:29

@ghost-001: Miało byc do autora bloga aco do poradników teraz są o modułach atb wifi :)

  #29 27.12.2014 11:00

"Ponieważ chciałem użyć czterech kolorów napisałem 4 funkcje realizujące świecenie wybranego piksela (nr - od 0 do 16) z określoną jasnością "... jakby co, to wydaje mi się, ze powinno być od 0 do 15... (od 0 do 16 to razem 17). A poza tym to: super projektów w nadchodzącym 2015 roku.

  #30 27.12.2014 17:51

w monitorze to ledy podświetlają panel LCD i są białe , no chyba , że masz monitor OLED , ale to też nie takie diody

hopsiup   2 #31 20.02.2015 10:52

A mam pytanko, ponieważ jestem laikiem z elektroniki to też i takie pytanie. Czy da się do tej gwiazdy dolutować sam układ zaprogramowany sterujący diodami zamiast podpinając całą płytkę arduino? Nie chodzi mi o koszta tylko o miejsce.
Pozdrawiam

mikolaj_s   14 #32 20.02.2015 11:55

@hopsiup: Jak widać na zdjęciu płytka jest oddzielnie od diod, więc nie ma problemu. Jedynie ów układ nie może być znacząco większy od arduino bo nie byłoby go jak schować w gwieździe.

hopsiup   2 #33 21.02.2015 13:12

@mikolaj_s: Dzięki za zainteresowanie, a mi chodziło by właśnie o to żeby wszystko było na jednej płytce, czyli sterownik programowalny przy diodach. Po pewnych poszukiwaniach znalazłem układ ATtiny85, nie wiem ale chyba dało by się upchnąć taki scalaczek choćby na drugiej stronie płytki drukowanej łącznie z wyjściami do programowania. Pozdrawiam

mikolaj_s   14 #34 22.02.2015 20:59

@hopsiup: Diody wykorzystane tutaj są gotowym elementem. Możesz je zastąpić własnymi diodami i Atmegą na jednej płytce. Zauważ, że tak jak teraz jest to zrobione, można złączyć diody i płytkę z dwu stron jednego kawałka plastiku czy nawet kartonu i będzie tak duże jak duże jest kółko z diodami.