[PROJEKT] KAmodWS2812 + KAmduinoUNO

kamodws2812

Diody RGB są powszechnie wykorzystywane w oświetleniu pomieszczeń, reklamach świetlnych, ozdobach i wielu innych urządzeniach elektronicznych. Można je również znaleźć w systemach Ambilight niektórych producentów sprzętu RTV. Dużym postępem oraz zwiększeniem zainteresowania tematyką diod RGB, stał się moment wprowadzenia na rynek diod LED 5050 z wbudowanym sterownikiem WS2812.

kamodws2812-8-modul-z-osmioma-diodami-rgb-ws2812

Najważniejszą funkcją sterownika jest możliwość łączenia szeregowo dużej ilości diod w łańcuchy. Sterowanie odbywa się poprzez wysłanie specjalnym protokołem zestawu danych zawierających kolory składowe w formacie RGB. Wysyłane jest tyle pakietów danych ile jest diod w szeregu. Ciąg danych składający się z pakietów przechodząc przez każdy sterownik diody w łańcuchu, skraca się o pierwszy „zestaw”, który zostaje wykonany w diodzie, a następnie pozostała część ciągu zostaje przesłana dalej do kolejnych diod. W taki oto prosty sposób odbywa się sterowanie całym łańcuchem.

W przykładzie posłużymy się biblioteką od Adafruit do obsługi tych właśnie diod. Proponuję pobrać bibliotekę poprzez polecenie „Zarządzaj bibliotekami…” w menu „Szkic” -> „Dołącz bibliotekę”, programu Arduino (Rysunek 1).

Rys. 1. Menu menedżera bibliotek
Rys. 1. Menu menedżera bibliotek

Następnie w menedżerze bibliotek w prawej górnej części ekranu wpisujemy „Adafruit NeoPixel”, oraz wybieramy „Adafruit NeoPixel by Adafruit Wersja 1.0.6” i klikamy przycisk „Instaluj”. Po zakończeniu instalacji możemy przejść do nowego pliku i rozpocząć pisanie programu, Rysunek 2.

Rys. 2. Menedżer bibliotek
Rys. 2. Menedżer bibliotek

Biblioteka udostępniona przez Adafruit zawiera kilka funkcji ułatwiających korzystanie z diod podłączonych do Arduino. Poniżej przedstawiam listę funkcji oraz ich krótki opis.

  • setPin() – zmiana pinu sterującego,
  • setBrightness() – ustawienie jasności świecenia,
  • clear() – wygaszenie całego łańcucha,
  • getPixels() – pobranie wskaźnika do danych, po 3 bajty dla każdej diody,
  • getBrightness() – pobranie ustawionej jasności świecenia,
  • numPixels() – pobranie ilości diod w łańcuchu,
  • getPixelColor() – pobranie koloru wybranej diody,
  • canShow() – zwraca wartość true, jeżeli możliwe jest wysyłanie danych

Program rozpoczynamy od dołączenia biblioteki Adafruit do naszego programu

Następnie definiujemy sobie dwie zmienne określające liczbę diod w łańcuchu oraz Pin GPIO, do którego podłączone jest wejście DI diod LED.

Kolejnym krokiem jest utworzenie nowego obiektu Adafruit_NeoPixel o nazwie strip, jest to obiekt reprezentujący łańcuch RGB w programie. Jako argumenty funkcji tworzącej nowy obiekt podajemy wcześniej zdefiniowaną liczbę diod LED, Pin GPIO oraz format danych, w naszym przypadku NEO_GRB i częstotliwość pracy magistrali komunikacyjnej NEO_KHZ800. Ostatnie dwa parametry podajemy razem jako jeden argument, łącząc je symbolem „+”.

W funkcji konfiguracyjnej (setup) programu uruchamiamy transmisję wywołując funkcję „begin()” oraz wykonujemy funkcję „show()” w celu zgaszenia wszystkich diod.

Poniższy program realizuje funkcje wyświetlania pojedynczo diod LED w wybranych kolorach oraz przedstawia przykład wywołania innego koloru niż 3 podstawowe składowe.

W tym celu wykorzystywana jest funkcja setPixelColor, której argumentami są: numer diody w łańcuchu, parametr jasności świecenia koloru czerwonego, parametr jasności świecenia koloru zielonego i parametr jasności świecenia koloru niebieskiego. Po każdym ustawieniu koloru należy wykonać funkcję „show” w celu wysłania danych do diody.

Myślę że program jest na tyle czytelny, że każdy sobie z nim poradzi. Zachęcam do eksperymentowania z kolorami diod, programowania ciekawych animacji i efektów świetlnych z wykorzystaniem wymienionych funkcji.

Działanie programu prezentuje poniższy film

Do pobrania

O autorze