Prosty sterownik diod WS2812B

W ostatnim czasie próbuje swoich sił w nieco bardziej profesjonalnym fotografowaniu elektroniki. Wykonując zdjęcia, starałem się wymuszać konkretny rodzaj oświetlenia kilkoma panelami z diodami WS2812B, sterowanymi przez Arduino. Jednak ciągła zmiana kodu jest dość męcząca, dlatego zbudowałem proste urządzenie sterujące tego typu diodami.

Założenie było proste, nie chce ciągle zmieniać kodu, dlatego potrzebuję coś, co będzie w stanie wysterować jasnością oraz każdym z kolorów osobno. Do tego zadania postanowiłem wykorzystać zestaw potencjometrów podłączonych do mikrokontrolera. To właśnie procesor będzie przetwarzać napięcie z potencjometrów na konkretne wartości cyfrowe, wysyłane dalej na diody adresowalne WS2812B.

Schemat urządzenia

Konstrukcja oparta jest na mikrokontrolerze AVR, ja wybrałem akurat ATmega328, bo kilka takich chipów mam w swoich zapasach. Do jego czterech wejść analogowych podłączone są potencjometry sterujące kolejno kolorami: czerwonym, zielonym, niebieskim oraz jasnością świecenia samych diod. WS2812B podłączone są do wyprowadzonego na zewnątrz gniazda goldpin, sam sygnał sterujący pojawia się na wyjściu PD6 (D6) mikrokontrolera. Całość zasilana jest napięciem 12V, które obniżane jest do poziomu 5V przez niewielką przetwornicę – MH-mini-360. Poza tym w projekcie znalazły się jeszcze kondensatory filtrujące zasilanie oraz pojedynczy rezystor podłączony do wejścia RESET procesora. W projekcie nie pojawił się rezonator kwarcowy, ponieważ ATmega pracuję na wewnętrznym zegarze o częstotliwości 8MHz.

#include <Arduino.h>
#include <Adafruit_NeoPixel.h>

#define PIN 6 

#define NUMPIXELS 30 

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

int v_red;
int v_green;
int v_blue;
int v_bri;

void setup() {
  pinMode(A0,INPUT);
  pinMode(A1,INPUT);
  pinMode(A2,INPUT);
  pinMode(A3,INPUT);

  pixels.begin(); 
}

void loop() {
  v_red=map(analogRead(A0),0,1023,0,255);
  v_green=map(analogRead(A1),0,1023,0,255);
  v_blue=map(analogRead(A2),0,1023,0,255);
  v_bri=map(analogRead(A3),0,1023,0,255);
  
  pixels.setBrightness(v_bri);

  for(int i=0; i<NUMPIXELS; i++) { 
    pixels.setPixelColor(i, pixels.Color(v_red,v_green,v_blue));
    pixels.show();  
  }
}

Kod, który wykonywać będzie procesor, przygotowałem w Arduino, a dokładniej w Visual Studio Code, przez co na samym początku widzicie dołączoną bibliotekę Arduino.h. Poza tym dołączona została biblioteka Adafruit_NeoPixel.h ułatwiająca obsługę diod WS2812B. 

Na początku kodu deklarujemy pin danych dla diod oraz ich ilość. Warto wiedzieć, że zadeklarowana ilość diod może być większa niż ta fizycznie podłączona. Dlatego zadeklarowałem, że będę korzystać z 30 diod, choć tak naprawdę podłączam ich tylko kilkanaście. Kolejne instrukcje inicjalizują WS2812B oraz generują cztery zmienne int, w których przechowywać będę liczbowe wartości kolorów i jasności. Pętla setup zawiera tylko deklarację wejść potencjometrów i funkcję uruchamiającą diody. Całe sterowanie zaszyte jest w pętli loop. Możemy podzielić ją na tak naprawdę na dwie części. W pierwszej dzięki funkcji map, do zmiennej przypisujemy wartość odczytaną z wejścia analogowego i przerobioną, tak aby była ona zrozumiała, dla WS2812B. Mówiąc prościej, potencjometr zwraca nam wartość z zakresu od 0 do 1023, a funkcja map przerabia je na zakres od 0 do 255. Następnie ustawiamy jasność całego ledowego paska. Jako że kolor każdej z diod musi być wysterowany osobno, to do tego celu wykorzystałem pętlę for, skojarzoną ze zmienną NUMPIXELS.

Obwód drukowany wraz z elementami

Urządzenie zbudowałem na podstawie zwyczajnej płytki uniwersalnej. Procesor umieszczony został w dedykowanej podstawce, a potencjometry wlutowane bezpośrednio. Zobaczyć możecie też jeden z kondensatorów, złącze zasilające oraz sterujące, do którego podłączane będą diody.

Spód płytki PCB
Pozostałe dwa kondensatory, rezystor oraz przetwornica przytwierdzone zostały do płytki powierzchniowo. Poza tym na spodzie znalazły się też oczywiście ścieżki łączące wszystkie elementy.
 
Gotowe urządzenie

Aby jakkolwiek urozmaicić moją konstrukcję, postanowiłem zamknąć ją w niewielkiej obudowie, wykonanej na szybko ze spienionego PCV. Dodatkowo potencjometry zyskały gałki i naklejki z opisami.

Jak możecie zobaczyć na filmie powyżej, urządzenie działa bardzo dobrze. Każdym z kolorów można sterować osobno, poza tym osobny potencjometr steruje jasnością wszystkich diod. Myślę, że taka konstrukcja jest doskonała dla osób, które muszą dość często i szybko zmieniać ustawienia świecenia diod. Przede wszystkim takie rozwiązanie jest szybsze niż sterowanie ledami np. z poziomu aplikacji mobilnej.

Istnieje całkiem sporo różnego rodzaju systemów inteligentnego domu, zwanych również smart home. Każdy ma swoje wady i zalety, a wybór odpowiedniego systemu zależy tak naprawdę od indywidualnych preferencji użytkownika. Jednym z takich systemów jest HomeKit od firmy Apple. W tym oraz kolejnych materiałach z tej serii chciałbym opowiedzieć wam nieco o sposobie integracji HomeKita i dobrze wszystkim znanych modułów ESP8266. Pokaże wam jak skonfigurować taki moduł, tak aby jego działaniem można było sterować z poziomu iPhona, MacBooka lub Apple Watcha. Poza tym do wyjść naszego mikrokontrolera podłączymy różnego rodzaju moduły peryferyjne, których działaniem będzie sterować ESP.

Każdy sprzęt elektroniczny musi być w jakiś sposób zasilany, bez odpowiedniego napięcia nie będzie działać wcale lub zadziała, ale tylko przez ułamek sekundy. Istnieje całkiem sporo rozwiązań i konstrukcji, których zadaniem jest doprowadzić energię do zaprojektowanego obwodu. Jednymi z najczęściej stosowanych są stabilizatory liniowe oraz przetwornice napięcia. Stabilizatory zostawimy sobie na inny materiał, natomiast dziś chciałbym opowiedzieć wam nieco o działaniu i budowie przetwornic. Poza tym przyjrzymy się też ich problemom i spróbujemy je rozwiązać.

Źródła:

  • https://github.com/adafruit/Adafruit_NeoPixel
  • https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf

Chcesz być na bieżąco?
Dołącz do newslettera

Otrzymywać będziesz powiadomienia o nowych artykułach oraz informacje o projektach, nad którymi pracuję.

Leave a Comment

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Przewiń do góry