W dzisiejszym wpisie chciałbym zaprezentować Wam jednego z głównych bohaterów kolorowej, elektronicznej układanki projektu iLED. Jest nim “inteligentny sterownik LED z wbudowanym źródłem światła” – diody LED WS2812B.

Czym dokładniej jest wspomniana dioda WS2812B?

Gdy przyjrzymy się dokładniej zobaczymy, że tak naprawdę jest to układ składający się z dwóch elementów: diody RGB 5050 oraz wbudowanego w nią sterownika WS2811.

Diody te możemy łączyć ze sobą szeregowo. Przy takim połączeniu wbudowany sterownik daje nam możliwość przesłania szeregowo do każdej z diod (osobno) informacji dotyczącej koloru czerwonego, zielonego lub niebieskiego. To znaczy, że za pomocą jednego pinu kontrolera możemy sterować np całą taśmą LED. Fajnie, prawda?

Na rynku znajduje się dość duży wybór zarówno pojedyńczych diod jak i gotowych taśm i modułów:

U krajowych sprzedawców taśmę LED w wersji 30 diod/m możecie kupić w cenie ok. 135 zł/5m. Osobiście polecam zakup elementów (diod, taśm lub gotowych modułów) u “majfrenda”. Trzeba trochę poczekać, ale wychodzi o wiele taniej.

Warto zauważyć, że na rynku dostępne są dwie wersje układów : WS2812 oraz WS2812B.

Czym się różnią? Przede wszystkim wersja z oznaczeniem “B” jest nowsza. W jej przypadku ilość nóżek została zmniejszona z sześciu do czterech. Sterownik WS2812B w porównaniu do swojego poprzednika zapewnia lepszą jasność kolorów. Ponadto dodano zabezpieczenie przed możliwością zniszczenia elementów poprzez odwrotne podłączenie zasilania diody.

Dobre praktyki

Aby zaoszczędzić sobie nerwów związanych z nieprawidłowych działaniem ws2812 lub możliwością uszkodzenia elementów LED należy przestrzegać kilku istotnych zasad:

– Napięcie zasilania diod mieści się w przedziale 3,5 do 5,0 V.
– Producent zaleca dodanie kondensatora (1000 µF, 6.3V lub większy) przy zasilaniu pierwszej diody w szeregu.
– Producent zaleca dodanie rezystora (300 – 500 Ohm) między kontrolerem a pierwszym pinem wejściowym sygnału sterującego.
– Aby nie zaburzać przesyłu sygnału sterującego należy zminimalizować długość przewodu łączącego pin PWM kontrolera z wejściem DIN diody.

Dodatkowo należy pamiętać o prawidłowej kolejności podłączania: masa -> VIN (+5V) -> DIN.

Arduino + ws2812b

Schemat połączenia Arduino + ws2812B

Do implementacji sterowania WS2812B w projektach wykorzystujących Arduino polecam użycie biblioteki Adafruit_NeoPixel .

Do pliku naszego programu dołączamy bibliotekę:

Następnie definiujemy numer pinu mikrokontrolera, który będzie podłączony do DIN taśmy LED. Określamy ilość diod na taśmie oraz tworzymy obiekt odnoszący się do naszej taśmy LED:

Wywołując funkcję Adafruit_NeoPixel podajemy dwa parametry. Pierwszym jest ilość diod. Drugi stanowi flaga definiująca sposób ich połączenia. Możemy wybrać następujące wartości:

  • NEO_RGB – dla diod połączonych szeregowo w schemacie RGB
  • NEO_GRB – dla diod połączonych szeregowo w schemacie GRB
  • NEO_KHZ400 – częstotliwość pracy 400kHz
  • NEO_KHZ800 – częstotliwość pracy 800kHz

Następnie w funkcji setup uruchamiamy zainicjalizowany wcześniej obiekt.

Od tego momentu możemy zarządzać barwą każdej z diod. Jest to możliwe poprzez użycie funkcji:

  • setPixelColor() – ustawienie koloru na konkretnej diodzie
  • setBrightness() – ustawienie jasności konkretnej diody

UWAGA! Należy pamiętać, że każdą operację zmiany barwy oraz jasności musimy “wysłać” do diody poprzez wywołanie metody show().

Przykład (diody zapalą się na zielono):

Do dyspozycji mamy także funkcje dodatkowe:

  • clear() – “wygaszenie” wszystkich diod
  • color() – metoda zwracająca obiekt koloru
  • setPin() – zmiana pinu sterującego
  • getPixels() – pobranie wskaźnika do danych
  • canShow() – określa możliwość wysyłki danych
  • numPixels() – zwraca ilość diod w szeregu

Zachęcam wszystkich do szerszego zapoznania się z możliwościami ws2812 i neopixel w swoich projektach.
Do poszukiwania pomysłów polecam stronę https://learn.adafruit.com. Znajdziecie tam wiele informacji i ciekawych projektów. Na pewno każdy z Was znajdzie jakąś inspirację projektową z wykorzystaniem arduino i ws2812b. A może już macie jakieś pomysły? Zapraszam do komentowania!

Author:

Programista, przedsiębiorca, tancerz ognia. Staram się ogarniać rzeczywistość wyciągając jak najwięcej wartości z tego co daje nam technologia. Jestem miłośnikiem produktywności i wyznawcą stwierdzenia "Done is better than perfect". Od ponad 5 lat staram rozwijać się oraz zdobywać doświadczenie jako programista. Najbliżej mi do aplikacji webowych i technologii .NET, ale od jakiegoś czasu stałem się entuzjastą rozwiązań JavaScriptowych.