Witam,
dzisiaj postaram się opisać sterowanie diodami ws2812b za pomocą modułów radiowych. Aby móc odbierać i nadawać informacje potrzebujemy jakiegoś mikrokontrolera do sterowania. Ja wykorzystałem arduino nano i pro mini (ze względu na małe rozmiary), ale to jakie arduino się użyje nie ma znaczenia.
Piszę diody ws2812 jednak producent podaje, że są to inteligentne sterowniki LED z wbudowanym źródłem światła. Czyli jest to sterownik umieszczony w obudowie diody RGB. Możemy spotkać te diody jako taśmy, pojedyncze tht lub smd. Zaletą jest to, że diody łączymy szeregowo i do sterowania całym “sznurem” diod wystarczy nam pojedynczy pinu cyfrowy mikrokontrolera. Diody są zasilane napięciem od 3.5V. do 5.3V. Należy uważać, aby nie przekroczyć tego napięcia, bo grozi to spaleniem diody. Do sterowania diod będzie potrzebna biblioteka NeoPixel Library.
Potrzebne elementy:
–Moduł radiowy nadajnik FS100A + odbiornik 433 MHz
-2 x Arduino(każdy wybiera jakie mu pasuje)
I coś, aby zrobić prototyp i sprawdzić czy działa:
–Przewody połączeniowe męsko-męskie
Zaczniemy od hardwar’u:
WS2812b:
Ja użyłem pojedynczych diod ws2812b smd. Każda dioda posiada 4 piny(Vcc,Gnd,DOUT,DIN). Diody łączymy poprzez podłączenie pinu “DOUT” pierwszej diody do pinu “DIN” drugiej diody(połączenie szeregowe). Gnd i Vcc podłączamy do każdej kolejnej diody. Robimy to tyle razy ile chcemy podłączyć diod. W razie jakich kolwiek wątpliwości zawsze możemy zajrzeć do noty katalogowej.
Tak wygląda schemat podłączenia z noty katalogowej:
Nie możemy zapominać też to podłączeniu kondensatorów(na schemacie oznaczone C1,C2).
Moduł radiowy nadajnik i odbiornik:
Odbiornik i nadajnik komunikują się ze sobą na częstotliwości 433 MHz. Urządzenia zasilane są napięciem od 2,5 V do 12 V. Z mikrokontrolerem komunikują się pomocą interfejsu jednoprzewodowego. Do obsługi modułów użyjemy biblioteki VirtualWire.
Podłączenie nadajnika:
Nadajnik posiada 3 piny pierwszy z lewej to szyna danych, pierwszy z prawej to Gnd a środkowy to Vcc.
Podłączenie odbiornika:
Odbiornik posiada 4 piny pierwszy z lewej to Vcc a pierwszy z prawej to Gnd, piny 2 i 3 są zmostkowane (jeśli przyjrzymy się na ścieżki w płytce możemy zobaczyć, że są zmostkowane) i jest to szyna danych.
Software:
Biblioteka NeoPixel Library:
Definiujemy liczbę diod i na którym pinie jest wyjście sygnału do sterowania diodami. Trzeba pamiętać, że pin sterujący musi być PWM.
begin() – Inicjalizacja biblioteki
setPixelColor(poz , R, G, B) – ustawienie na pozycji (poz) diody i ustawienie jasności świecenia każdego z poszczególnych składowych (R-czerwony,G-zielony,B-niebieski)
poz – numer pozycji diody liczymy od zera, czyli pierwsza dioda ma wartość “0”
R,G,B- wartości każdego z kolorów zawierają się w zakresie <0:255>
show() – wysyła dane do diod
Biblioteka VirtualWire:
Nadajnik:
Ustawienie do którego pinu jest podpięta szyna danych ( vw_set_tx_pin(10) ) i z jaką prędkością pracuje moduł ( vw_setup(2000) ).
Odbiornik:
Dodatkowo w odbiorniku dochodzi opcja inicjalizacji odbierania danych ( vw_rx_start() ).
Cały kod do nadajnika:
Cały kod do odbiornika:
Działanie:
Jeśli przycisk nie jest wciśnięty wysyłane jest “nie” podłączając mikrokontroler z odbiornikiem do komputera możemy zobaczyć przez monitor szeregowy co jest w danej chwili odbierane. jeśli wciśniemy przycisk odbiornik odbiera “dziala” w tym momencie diody zapalają się w danym kolorze, ponowne kliknięcie powoduje, że kolor się zmienia na taki jaki jest ustawiony po nim w programie. Jeśli klikniemy tyle razy, że wszystkie opcje będą wykorzystane diody gasną i ponownie zaczyna się pętla kolorów.
Na zakończenie chciałbym powiedzieć, że opcje jakie dałem w kodzie czyli zmiana kolorów są dość proste, ale i też fajne w swojej prostocie, lecz zachęcam do pokombinowania z rożnymi sposobami zapalenia diod np. do połowy jeden kolor i od połowy drugi ipt. ;)
Interesujące ale dodaj sterowanie tych diod za pomocą smartphona.
Powoli powstaje projekt związany z esp8266 i sterowaniem z poziomu telefonu lub komputera różnego rodzaju elementami(w tym przypadku patrz diodami ws2812b). Jak coś wyjdzie i będzie działało postaram się umieścić ten projekt na stronie ;)
Sterowanie z telefonu można by zrealizować na kilka sposobów. Część z nich niestety wiąże się jednak z dość sporą ingerencją w kod, a przede wszystkim w hardware.
Ja bym tutaj polecał jedno z trzech rozwiązań:
– zamiast radia na 433MHz, dać ESP8266 i zaimplementować REST na arduino (czasochłonne, mało przystępna opcja wiążąca się z przepisaniem kodu)
– jeśli radio na 433 jest konieczne, to napisać prosty interfejs w nodeJS (lub zwykłym PHP), rozpakować na RPi, które wszystko obsłuży (minus to posiadanie RPI, albo konieczność posiadania komputera działającego jako serwer, który byłby podpięty do nadajnika poprzez USB)
– zastąpić radio na 433 odbiornikiem bluetooth i bawić się z pisaniem apki na andka (jak wspomniałem, spora zmiana w kodzie, zmiana hardware’u plus czas potrzebny na naukę SDK androida).
W swoim projekcie wykorzystałem tę pierwszą opcję. Początkowo ESP8266 odpowiadał tylko za komunikację, ale ostatecznie skończył jako serce systemu. Plus to to, że może być w prosty sposób sterowany z androida, strony www hostowanej na moim serwerze domowym, a nawet z terminala poprzez curl.
Zamiast WS2812 dałem zwykłą taśmę ledów rgb 5050, 6 mosfetów do sterowania 3-strefowego (ważniejsza była kontrola z zewnątrz i możliwość załączenia każdej strefy z osobna z poziomu jednego sterownika niż bajery z adresowaniem każdej diody z osobna. W końcu to nie jest duży problem gdy wszystkie strefy mają ten sam kolor). Całość zasilana na 9V zamiast 12V, żeby nie upalić za szybko diód (Jest ciemniej, ale służy o wiele dłużej). Żeby sterownik i mosfety się nie przegrzały, dodałem sterowanie wentylatorem na 5V. Samo sterowanie chłodzeniem nie jest już sterowane z kontrolera. Za kontrolę obrotów odpowiada mały, 100K termistor, potencjometr do ustawienia czułości i kilka śmieci, które mają to trzymać w kupie.
Dzięki za artykuł, mam już pomysł jak wykorzystać nowe informacje
Bardzo praktyczny opis, dziękuję.
niestety obrazki się nie ładują…