W dzisiejszym wpisie zaprezentuje prosty sposób, na podłączenie paska wyposażonego w diody RGB ws2812b. Dodatkowo do układu podłączymy trzy potencjometry, aby móc uzyskać dowolną barwę z palety RGB. Zbudowany układ można zastosować do budowy ciekawego podświetlenia pokoju czy jako element dekoracyjny. Nic nie stoi na przeszkodzie, aby sterować takim paskiem za pomocą pilota czy internetu. Producent zaznacza, że przy korzystaniu z więcej niż 500 diod, może nie wystarczyć pamięci RAM w układzie Arduino Uno. Oczywiście aby podłączyć taką ilość diod, należy pamiętać o odpowiednim zasilaniu. Pobór prądu dla jednej diody to około 18 mA.
Listwa Arduino NEOPIXEL WS2812B to moduł 8×1 znaków zgodny z bibliotekami Adafriut NEOPIXEL. Każda dioda RGB na module może zostać włączona indywidualnie na dowolny kolor. Jedna dioda posiada 3X PWM 8bit.
Specyfikacja:
- zasilanie 5V VCC
- LED WS2812B
- sterowanie tylko jednym przewodem
- temperatura pracy 0*C – +60*C
- wymiary 8x68x3,3mm
Urządzenie posiada cztery wyprowadzenia:
- GND – masa modułu
- 5 V – napięcie zasilania, 18 mA prądu na jedną diodę
- Data IN – cyfrowy sygnał sterujący z mikrokontrolera
- Data OUT – wyjście do podłączenia następnego modułu
Listwę można zakupić w serwisie allegro oraz w sklepie botland.com.pl Ceny zaczynają się od 13zł za pasek.
Aby wykonać projekt potrzebujemy:
- arduino UNO
- pasek LED RGB WS2812B
- płytka stykowa, przewody
- trzy potencjometry
Schemat podłączenia:
Podłączenie jest bardzo proste. Każdy z potencjometrów posiada trzy nóżki. Środkowe nóżki podpinamy do pinów analogowych w Arduino. Brzegowe odpowiednio do 5V oraz GND.
Pasek posiada trzy wyprowadzenia: 5v, GND, oraz sterowanie. Sterowanie podpinamy pod wyjście cyfrowe np.:6.
Kod źródłowy wraz z komentarzem:
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 |
#include <Adafruit_NeoPixel.h> #define PIN 6 // numer portu do ktorego podlaczony jest pasek #define ILOSCDIOD 8 // ilosc diod w pasku Adafruit_NeoPixel pixels = Adafruit_NeoPixel(LICZBADIOD, PIN, NEO_GRB + NEO_KHZ800); int potPin1 = 0; // wejscie analogowe potencjometru nr1 skladowa RED int potPin2 = 1; // wejscie analogowe potencjometru nr1 skladowa GREEN int potPin3 = 2; // wejscie analogowe potencjometru nr1 skladowa BLUE int pot1; int pot2; int pot3; int pot1map; int pot2map; int pot3map; void setup() { Serial.begin(9600); pixels.begin(); // Inicjalizacja biblioteki } void loop() { pot1 = analogRead(potPin1); // odczyt danych z potencjometru 1 pot2 = analogRead(potPin2); // odczyt danych z potencjometru 2 pot3 = analogRead(potPin3); // odczyt danych z potencjometru 3 pot1map = map(pot1, 0, 1023, 0, 255); // zamiana wartosci 0-1023 na 0-255 pot2map = map(pot2, 0, 1023, 0, 255); // zamiana wartosci 0-1023 na 0-255 pot3map = map(pot3, 0, 1023, 0, 255); // zamiana wartosci 0-1023 na 0-255 Serial.print("r= "); // wartosc skladowej RED Serial.println(pot1p); Serial.print("g= "); // wartosc skladowej GREEN Serial.println(pot2p); Serial.print("b= "); // wartosc skladowej BLUE Serial.println(pot3p); for(int i=0; i<ILOSCDIOD; i++) { pixels.setPixelColor(i, pot1p, pot2p, pot3p); // Dioda "i" oraz odpowiednie skladowe RGB pixels.show(); // Wysylanie danych do lancucha } } |
Efekt końcowy: