Blog (30)
Komentarze (5.6k)
Recenzje (0)

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

@mikolaj_sZrób sobie sam świąteczną gwiazdę z Arduino26.12.2014 00:07

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.)

Schemat podłączenia Arduino Mega jako programatora
Schemat podłączenia Arduino Mega jako programatora

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.

Wybrane dla Ciebie
Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.