Jak podłączyć adresowalną taśmę LED WS2812B do Arduino
Rozwój technologii oświetleniowej opartej na diodach LED postępuje w szybkim tempie. Jeszcze wczoraj taśmy RGB sterowane kontrolerem, których jasność i kolor można regulować za pomocą pilota, wydawały się cudem. Obecnie na rynku dostępne są nowe oprawy oświetleniowe o jeszcze większych możliwościach.
Taśma LED na bazie WS2812B
Różnice między adresowalnymi taśmami LED a standardowymi RGB jest Jasność i proporcje kolorów każdego elementu można regulować oddzielnie. Umożliwia to uzyskanie efektów świetlnych niedostępnych dla innych typów opraw oświetleniowych. Adresowalna taśma LED jest sterowana w dobrze znany sposób - za pomocą modulacji szerokości impulsu. Cechą charakterystyczną systemu jest to, że każda dioda LED jest wyposażona we własny sterownik PWM. Układ scalony WS2812B to trójkolorowa dioda elektroluminescencyjna i obwód sterujący, połączone w jednym pakiecie.
Elementy są podłączone równolegle do źródła zasilania i są sterowane za pomocą magistrali szeregowej - wyjście pierwszego elementu jest połączone z wejściem sterującym drugiego elementu itd. W większości przypadków magistrale szeregowe zbudowane są z dwóch linii, z których jedna przesyła impulsy zegarowe, a druga - dane.
Magistrala sterująca układu WS2812B składa się z jednej linii - służy do przesyłania danych. Dane są kodowane jako impulsy o stałej częstotliwości, ale o różnych częstotliwościach. Jeden impuls to jeden bit.. Czas trwania każdego bitu wynosi 1,25 µs, przy czym bit zerowy składa się z poziomu wysokiego trwającego 0,4 µs i poziomu niskiego trwającego 0,85 µs. Urządzenie jest wyświetlane jako poziom wysoki o czasie trwania 0,8 µs i poziom niski o czasie trwania 0,45 µs. Do każdej diody LED wysyłana jest paczka 24 bitów (3 bajty), po czym następuje pauza w postaci poziomu niskiego przez 50 µs. Oznacza to, że dane dla kolejnej diody LED zostaną przesłane jako następne, i tak dalej dla wszystkich elementów łańcucha. Transfer danych kończy się przerwą trwającą 100 µs. Oznacza to, że cykl programowania taśmy został zakończony i można wysłać następny zestaw pakietów danych.
Ten protokół umożliwia rezygnację z pojedynczej linii do przesyłania danych, ale wymaga dokładnego odmierzania czasu. Dopuszczalne odchylenie wynosi maks. 150 ns. Ponadto odporność tej magistrali na zakłócenia jest bardzo niska. Każde zakłócenie o wystarczającej amplitudzie może zostać odebrane przez kontroler jako dane. Narzuca to ograniczenia co do długości przewodów z obwodów sterujących. Z drugiej strony, daje to możliwość sprawdzenie poprawności działania taśmy bez dodatkowych urządzeń. Jeśli do oprawy zostanie podłączone zasilanie, a palec dotknie obszaru styku magistrali sterującej, niektóre diody LED mogą zapalić się i zgasnąć w sposób losowy.
Charakterystyka techniczna elementów WS2812B
Aby tworzyć systemy oświetleniowe z adresowalnymi taśmami, należy znać ważne parametry elementów emitujących światło.
Wymiary diod LED | 5x5 mm |
Częstotliwość modulacji PWM | 400 Hz |
Pobór prądu przy maksymalnej jasności | 60 mA na element |
Napięcie zasilania | 5 volt |
Arduino i WS2812B
Popularna na całym świecie platforma Arduino umożliwia tworzenie szkiców (programów) do sterowania taśmami adresowalnymi. Możliwości systemu są wystarczająco szerokie, ale jeśli na którymś poziomie przestaną być wystarczające, uzyskane umiejętności wystarczą do płynnego przejścia na C++ lub nawet asembler. Chociaż łatwiej jest zdobyć podstawową wiedzę z Arduino.
Podłączanie taśmy WS2812B do Arduino Uno (Nano)
Na początku wystarczy zwykła płytka Arduino Uno lub Arduino Nano. Później do budowy bardziej złożonych systemów można użyć bardziej złożonych płytek. Podczas fizycznego podłączania adresowalnej taśmy LED do płytki Arduino należy upewnić się, że spełnionych jest kilka warunków:
- Ze względu na niską odporność na zakłócenia, przewody łączące linie danych powinny być jak najkrótsze (staraj się, aby nie przekraczały 10 cm);
- Podłącz linię danych do wolnego wyjścia cyfrowego na płytce Arduino - zostanie ono później wskazane przez oprogramowanie;
- Ze względu na duży pobór mocy nie jest konieczne zasilanie listwy z płyty - do tego celu przewidziano oddzielne zasilacze.
Należy podłączyć wspólną linię zasilania między listwą a Arduino.
Podstawy sterowania oprogramowaniem WS2812B
Wspomniano już, że do sterowania układem WS2812B konieczne jest generowanie impulsów o określonej długości z dużą precyzją. W języku Arduino istnieją polecenia do tworzenia krótkich impulsów delayMicroseconds и micros. Problem polega na tym, że rozdzielczość tych poleceń wynosi 4 mikrosekundy. Oznacza to, że nie jest możliwe uformowanie opóźnień czasowych z określoną dokładnością. Konieczne jest użycie narzędzi w języku C++ lub Assembler. Możliwe jest również sterowanie adresowalną taśmą LED za pomocą Arduino z wykorzystaniem bibliotek stworzonych specjalnie do tego celu. Wprowadzenie rozpoczyna się od programu Blink, który sprawia, że elementy emitujące światło migają.
FastLed .
Ta biblioteka jest wszechstronna. Oprócz taśmy adresowalnej obsługuje wiele urządzeń, w tym taśmy sterowane przez SPI. Jest bardzo potężny.
Najpierw należy podłączyć bibliotekę. Wykonuje się to przed blokiem ustawień, a łańcuch wygląda następująco:
#include
Następnym krokiem jest utworzenie tablicy do przechowywania kolorów każdej diody elektroluminescencyjnej. Będzie on miał nazwę strip i wymiar 15 - przez liczbę elementów (lepiej przypisać temu parametrowi stałą).
Pasek CRGB[15]
W bloku ustawień należy określić zespół, z którym będzie pracował skrypt:
void setup() {
FastLED.addLeds< WS2812B, 7, RGB>(listwa, 15);
int g;
}
Parametr RGB określa kolejność naprzemiennego wyświetlania kolorów, 15 oznacza liczbę diod LED, 7 to numer wyjścia przypisanego do sterowania (ostatniemu parametrowi również lepiej przypisać stałą).
Blok pętli rozpoczyna się od pętli, która kolejno zapisuje do każdej sekcji tablicy Red (czerwona poświata):
for (g=0; g< 15;g++)
{strip[g]=CRGB::Red;}
Następnie wygenerowana tablica jest przesyłana do oprawy oświetleniowej:
FastLED.show();
Opóźnienie 1000 milisekund (jedna sekunda):
delay(1000);
Następnie wszystkie elementy można wyłączyć w ten sam sposób, wpisując w nie czarny napis.
for (int g=0; g< 15;g++)
{strip[g]=CRGB::Black;}
FastLED.show();
delay(1000);
Po skompilowaniu i załadowaniu szkicu wstążka będzie migać przez 2 sekundy. Jeśli chcesz kontrolować każdy element koloru osobno, zamiast łańcucha {strip[g]=CRGB::Red;} użyto wielu ciągów znaków:
{
strip[g].r=100;// ustawia poziom luminescencji elementu czerwonego
strip[g].g=11;// to samo dotyczy koloru zielonego
strip[g].b=250;// to samo dotyczy koloru niebieskiego
}
NeoPixel
Ta biblioteka działa tylko z pierścieniowymi diodami LED NeoPixel, ale jest mniej zasobożerna i zawiera tylko podstawowe elementy. W języku Arduino program wygląda następująco:
#include
Podobnie jak w poprzednim przypadku, biblioteka jest dołączana i deklarowany jest obiekt lenta:
Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// Gdzie 15 to liczba elementów, a 6 to przypisane wyjście
Lenta jest inicjalizowana w bloku ustawień:
void setup() {
lenta.begin ()
}
W bloku pętli wszystkie elementy są podświetlane na czerwono, do taśmy przekazywana jest zmienna i tworzone jest 1-sekundowe opóźnienie:
for (int y=0; y<15;y++)//. 15 - liczba elementów w lencie
{lenta.setPixelColor(y, lenta.Color(255,0,0))};
{lenta.show();
delay(1000);
Lenta przestaje świecić na czarno:
for (int y=0; y< 15;y++)
{ lenta.setPixelColor(y, lenta.Color(0,0,0))};
lenta.show();
delay(1000);
Lekcja wideo: Przykłady efektów wizualnych z wykorzystaniem taśm adresowalnych.
Po opanowaniu umiejętności migania diodami LED można kontynuować naukę tworzenia efektów kolorystycznych, w tym popularnych efektów tęczy i zorzy polarnej z płynnymi przejściami. Adresowalne diody LED WS2812B i Arduino dają niemal nieograniczone możliwości w tym zakresie.