Ledy adresowane - co to takiego?
Co będzie potrzebne:
- pasek adresowany LED WS2812b,
- zasilacz 5V/10A/50W,
- Arduino UNO (może być dowolne),
- rezystor 220Ω (może być 470Ω)
- 4 przewody męsko-męskie (jeśli nie chcemy lutować),
- płytka prototypowa,
- przewód zakończony wtyczką (do podłączenia zasilacza do gniazdka),
- śrubokręt.
Po zgromadzeniu części łączymy cały układ. Poniżej zdjęcie, schemat i opis podłączenia:
Wtyczkę podłączamy do wejścia zasilacza (L- brązowy, N- niebieski i PE- żółty), a wyjście (5V i GND) podłączamy do dłuższych przewodów w ledach (czerwony- '+', biały- '-').
Z kolei trzy przewody połączone wychodzące z ledów podłączamy do Arduino (czerwony- '5V', biały- 'GND', zielony- 'DIN' (łączymy poprzez rezystor!))
Po zmontowaniu układu nie pozostało nic innego jak wgranie programu i podziwianie efektu końcowego.
Niezbędnym elementem jest też pobranie biblioteki Adafruit_Neopixel ze strony www: https://github.com/adafruit/Adafruit_NeoPixel. Tak pobraną bibliotekę umieszczamy w folderze /libraries w Arduino i możemy działać dalej!
Poniżej zamieszczam kod:
- #include <Adafruit_NeoPixel.h>
- #ifdef __AVR__
- #include <avr/power.h>
- #endif
- #define PIN 5 //tutaj podajemy numer cyfrowego pinu pod który podłaczamy ledy
- #define NUMPIXELS 150 //tutaj podajemy ilość ledów jakie chcemy obsłużyć
- Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
- intdelayval = 10; // delay na 10ms
- intdelayval2 = 25; // delay na 20ms
- voidsetup() {
- pixels.begin(); // This initializes the NeoPixel library.
- }
- voidloop() {
- //kazdy piksel ma swój indywidualny numer. Indeksowanie zaczyna się od 0 i kończy na liczbie ledów-1
- for(int i=0;i<NUMPIXELS;i++){
- // pixels.Color - tutaj podajemy wartości z zakresu 0-255 dla (G,R,B)
- pixels.setPixelColor(i, pixels.Color(0,150,0));
- pixels.show(); // To nam wykonuje instrukcje, czyli dany piksel zaczyna swiecic tak jak okreslilismy to wyżej
- delay(delayval); // opóźnienie dla uzyskania lepszego efektu
- }
- for(int i=NUMPIXELS;i>0;i--){
- // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
- pixels.setPixelColor(i, pixels.Color(0,0,150));
- pixels.show();
- delay(delayval);
- }
- for(int i=0;i<NUMPIXELS;i++){
- pixels.setPixelColor(i, pixels.Color(150,0,0));
- pixels.show();
- delay(delayval);
- }
- for(int i=NUMPIXELS;i>=0;i--){
- pixels.setPixelColor(i, pixels.Color(150,150,150));
- pixels.show();
- delay(delayval);
- }
- for(inti=NUMPIXELS;i>0;i--){
- pixels.setPixelColor(i, pixels.Color(0,0,0));
- pixels.show();
- delay(delayval);
- }
- //kilka diod
- for(inti=0;i<NUMPIXELS;i++){
- pixels.setPixelColor(i, pixels.Color(0,150,0));
- pixels.setPixelColor(i-3, pixels.Color(0,0,0));
- pixels.show();
- delay(delayval);
- }
- for(int i=NUMPIXELS;i>0;i--){
- pixels.setPixelColor(i, pixels.Color(0,0,150));
- pixels.setPixelColor(i+3, pixels.Color(0,0,0));
- pixels.show();
- delay(delayval);
- }
- for(int i=0;i<NUMPIXELS;i++){
- pixels.setPixelColor(i, pixels.Color(150,0,0));
- pixels.setPixelColor(i-3, pixels.Color(0,0,0));
- pixels.show();
- delay(delayval);
- }
- for(int i=NUMPIXELS;i>0;i--){
- pixels.setPixelColor(i, pixels.Color(150,150,150));
- pixels.setPixelColor(i+3, pixels.Color(0,0,0));
- pixels.show();
- delay(delayval);
- }
- //funkcja random(max) wybiera losowe wartości z zakresu 0 do max
- for(int i=0;i<300;i++){
- pixels.setPixelColor(random(NUMPIXELS), pixels.Color(random(255),random(255),random(255)));
- pixels.show();
- delay(delayval2);
- }
90. }
Ledy adresowane mają nieograniczone zastosowania - od wykorzystania ich jako zegar po wskaźnik temperatury otoczenia. Dodatkowo idealnie sprawdzą się jako ozdoba pokoju lub propozycja dla graczy - przyklejenie ich za monitorem. Na bank wywołacie efekt "WOW!" u każdego kto do Was przyjdzie. Próbujcie, do dzieła!
Michał Błaszak