Sterowanie RGB WS2812b za pomocą pilota IR

arduino-irDzisiejszy artykuł będzie kontynuacją wpisu związanego z układem WS2812b. Chciałem Wam przedstawić krok po kroku, jak w prosty sposób zbudować sterowanie RGB WS2812b za pomocą pilota IR. Nauczymy się pisać własne funkcje oraz wykorzystamy instrukcję switch. Funkcje są głównym narzędziem służącym do tworzenia przejrzystych szkiców, które można łatwo modyfikować bez ryzyka uszkodzenia całej aplikacji. Po przeczytaniu wpisu, może ktoś z Was zdecyduje się zrobić oświetlenie świąteczne, wykorzystując możliwości Arduino i diod z układem WS2812b. Zapraszam do dalszej lektury.

Dla przypomnienia, 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. Pobór prądu dla jednej diody to około 18 mA. 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
  • Odbiornik podczerwieni TSOP31236 (lub podobny)
  • Dowolny pilot z diodą IR
  • płytka stykowa, przewody
Wykorzystane biblioteki: Funkcje układu:
  • zmiana kolorów za pomocą pilota
  • 6 kolorów do wyboru (możliwość dołożenia dodatkowych)
  • kolory: zielony, czerwony, niebieski, żółty, biały, fioletowy
  • przycisk wyłączenia OFF
 Sterowanie RGB WS2812bIMG_20151206_140909 układ sterowanie RGB WS2812bZasada działania:Wciskając przycisk na pilocie wysyłamy odpowiednie sygnały IR. Odbiornik podczerwieni odbiera sygnały z pilota. Następnie, instrukcja switch sprawdza czy dany przycisk jest przypisany do odpowiedniej funkcji. Każda funkcja to inny kolor. Jeżeli instrukcja switch odnalazła kod (np.: 0xFD00FF) odpowiadający naszej funkcji - następuje zmiana koloru. Zaczynamy!Po zbudowaniu układu, musimy odczytać jakie sygnały wysyła nasz pilot. Do tego wykorzystamy prosty sketch, który ma za zadanie odebrać i wyświetlić w monitorze portu szeregowego odpowiednie wartości.

Po wgraniu szkicu, uruchamiamy monitor portu szeregowego, wybierając z menu Narzędzia-> Monitor portu szeregowego. Po skierowaniu pilota w stronę odbiornika i wciśnięciu dowolnego przycisku, powinny się wyświetlać odpowiednie wartości. Warto zapisać, które wartości odpowiadają konkretnym przyciskom, gdyż łatwiej nam później będzie przypisać przycisk do odpowiedniej funkcji. Ja zapisałem sobie przyciski od 1 do 6 oraz przycisk OFF. Te przyciski będę wykorzystywał do sterowania listwą. Przyciski od 1 do 6 to konkretne kolory, natomiast przycisk OFF wyłącza listwę.

monitor portu szeregowego

Funkcje w Arduino

Funkcja odgrywa rolę małego programu występującego w pisanym przez nas większym programie. W funkcji można zawrzeć pojedyncze czynności, które chcemy wykonać. Zdefiniowana funkcja może być użyta w dowolnym miejscu szkicu, zawiera własne zmienne i własną listę poleceń. Gdy polecenia zawarte w funkcji zostaną wykonane, program powraca do miejsca w szkicu, gdzie znajdował się kod wywołujący funkcję, a następnie wykonywane są kolejne polecenia.

Przykład (Arduino dla początkujących - podstawy i szkice Simon Monk)

Tak naprawdę jedyne, co zrobiliśmy, to przeniesienie kodu powodującego błyskanie diody LED ze środka pętli for do oddzielnej funkcji o nazwie flash. Teraz możesz spowodować dowolną liczbę błysków, wywołując nową funkcję przy użyciu polecenia flash(). Zwróć uwagę na puste nawiasy umieszczone bezpośrednio za nazwą funkcji. Oznaczają one, że funkcja nie pobiera żadnych parametrów. Wartość opóźnienia jest określana przez funkcję delayPeriod, która była zastosowana wcześniej. Instrukcja switchInstrukcja switch zwana jest także instrukcją wyboru. Działa ona w ten sposób, że wybiera spośród dostępnego zbioru określoną wartość na podstawie wartości pewnego wyrażenia i wykonuje zdefiniowany dla niej kod. 

Opis sketch:

Na samym początku podpinamy wcześniej wymienione biblioteki oraz definiujemy użyte piny. Uruchamiamy biblioteki odpowiedzialne za listwę oraz odbiornik IR.  Następnie przechodzimy do instrukcji switch, która sprawdza, czy w odebranych danych (results.value) znajduje się któryś z naszych kodów. Jeżeli instrukcja znajdzie odpowiedni, kod uruchamia zdefiniowaną funkcję. Każda funkcja to inny kolor. Kolor definiujemy za pomocą składowej (R,G,B) wartościami od 0 do 255. Np. kolor niebieski posiada wartość  (o,0,255). Do generowaniem kolorów przyda nam się paleta RGBAby dodać kolejne kolory tworzymy nową funkcję, nadajemy jej nazwę oraz ustawiamy odpowiedni kolor. Pamiętamy, aby dodać do instrukcji switch odpowiedni case dla konkretnego przycisku.

 ZakończenieMam nadzieję że artykuł jest zrozumiały. Życzę Wam miłego majsterkowania i jak zwykle, pozostaję do Waszej dyspozycji w przypadku problemów czy pytań.

Jedna myśl na temat “Sterowanie RGB WS2812b za pomocą pilota IR

  1. Jak obejść problem, że gdy wysyłamy dane na łańcuch diod wtedy ciągle na odbiorniku IR pojawiają się jakieś losowe wartości?

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *