
Prawie rok temu, zainspirowany konstrukcją pana Kamila Przychodzenia (zdjęcie), postanowiłem zbudować własne świecące drzewko, jednak oparte na trójkolorowych diodach RGB. W ten sposób powstał projekt Drzewko z Fafkulców (Fa w kulce

W projekcie założyłem wykorzystanie diod o wspólnej anodzie (CA - common anode). Diody połączyłem w matrycę o organizacji 8 wierszy i 5 kolumn. Katody struktur poszczególnych kolorów dołączyłem do wyprowadzeń wierszowych, natomiast anody diod do wyprowadzeń kolumnowych.
Opisana konfiguracja umożliwia wysterowanie 40 (8x5) diod RGB, co w praktyce oznacza 120 diod (po 40 dla poszczególnych barw). Do tego celu wykorzystałem 29 (8+8+8+5) linii mikrokontrolera. Konfiguracja ta wymusza konieczność sterowania multipleksowego. Podając stan wysoki na wyprowadzenie kolumny i stan niski na wyprowadzenie wiersza można zaświecić diodę leżącą na skrzyżowaniu tych linii. Każde z połączeń wierszowych danej barwy podłączone jest z osobnym ośmiobitowym portem mikrokontrolera. Wyświetlanie multipleksowe polega na wpisywaniu do rejestru wyjściowego danego portu sekwencji, która zostanie wyświetlona w pierwszej kolumnie diod, po czym załączona zostaje pierwsza kolumna. Po upływie odcinka czasu rzędu milisekund następuje wyłączenie kolumny, natomiast do rejestru zostaje wpisana sekwencja, która zostanie wyświetlona w drugiej kolumnie. Druga kolumna zostaje załączona na pewien czas. Czynność powtarza się kolejno dla trzeciej, czwartej i piątej kolumny, po czym cykl rozpoczyna się od początku. Odpowiednio duża częstotliwość załączania kolumn (min. 5∙25Hz=125Hz) sprawi, że będzie ono widoczne jako świecenie ciągłe.
Multipleksowanie diod RGB odbywa się w tle (podczas realizowania programu głównego) a jego obsługa umieszczona jest w podprogramie obsługi przerwania generowanego przez Timer. Stan poszczególnych diod określa 15 zmiennych typu całkowitego (R1…R5, G1...G5, B1...B5). Dzięki użyciu przerwania, każda zmiana wartości danej zmiennej znajduje natychmiast odzwierciedlenie w sekwencji zapalonych diod. Zapis binarny pozwala w prosty sposób definiować tę sekwencję, a wykorzystanie operacji bitowych upraszcza projektowanie efektów świetlnych.
Zastosowanie scalonego drivera mocy ULN2803 między portami mikrokontrolera a wyprowadzeniami wierszy matrycy powoduje, że zaświecenie diody uzyskujemy wysokim poziomem napięcia na liniach portu. Analogicznie, z powodu zastosowania tranzystorów p-n-p, załączenie kolumny odbywa się przez podanie poziomu niskiego. Rozwiązanie to, oprócz zabezpieczenia mikrokontrolera przed nadmiernym obciążeniem prądowym, umożliwia zastosowanie logiki dodatniej podczas sterowania diodami i projektowania efektów. Przykładowo wpisanie do rejestru wyjściowego portu wartości 0b10000011 spowoduje zapalenie diody pierwszej, drugiej i ostatniej.
Schemat ideowy sterownika oraz organizacja połączeń wierszowych i kolumnowych:


Płytka sterownika oraz płytka organizacji połączeń




Sterownik oparty jest na mikrokontrolerze ATmega16 z rdzeniem AVR. Taktowany jest zewnętrznym rezonatorem kwarcowym o częstotliwości 16MHz. W układzie wykorzystałem 29 linii mikrokontrolera. Porty PORTA, PORTC i PORTD połączyłem z wyprowadzeniami wierszy matrycy diod odpowiednio do kolorów: czerwonego, zielonego i niebieskiego. Linie PB0…PB4 sterują kolumnami za pomocą tranzystorów BC558. Linie PB5…PB7 (MOSI, MISO, SCK) pozostały wolne i służą wraz z liniami RESET, VCC i GND do podłączenia programatora szeregowego. Po drobnej modyfikacji układu można je wykorzystać do zwiększenia ilości obsługiwanych diod o kolejne 24 sztuki. W połączeniu portów mikrokontrolera z katodami diod pośredniczą układy ULN2803. Jest to scalony driver mocy. Składa się z ośmiu tranzystorów Darlingtona (n-p-n) zwierających obciążenie do masy. Podanie stanu wysokiego na wejście skutkuje wymuszeniem stanu niskiego na wyjściu. Obciążalność układu ULN2803 wynosi 500mA.
Przy sterowaniu multipleksowym, w celu zapewnienia odpowiedniej jasności diod, rezystory ograniczające prąd mogą mieć niższą wartość rezystancji niż w przypadku ciągłego zasilania pojedynczej diody. Ważne, by jeden kolor nie przeważał nad innymi, gdyż może to mieć negatywny wpływ na prawidłowe wyświetlanie barw dopełniających (żółty, różowy, biały itd.).
Mikrokontroler wyposażony jest w linię RESET. Układ zostanie zresetowany, jeżeli na tej linii pojawi się niski poziom trwający przynajmniej 1,5μs. Aby zapobiec resetowaniu się mikrokontrolera spowodowanego zakłóceniami, linię RESET podciągnięto rezystorem 10kΩ do VCC.
Zarówno elektronika jak i matryca diod RGB zasilane są napięciem o wartości 5V. W układzie zastosowałem stabilizator 7805 z włączonym równolegle kondensatorem filtrującym 1000μF i dwoma kondensatorami odsprzęgającymi o wartości 100nF. Pobór prądu jest uzależniony od ilości święcących w danym momencie diod i wynosi maksymalnie 250mA (kolor biały – wszystkie diody zapalone). Nadmiar energii doprowadzonej do stabilizatora zostaje wypromieniowany w postaci ciepła, dlatego istotne jest zastosowanie radiatora.
Sterownik: prototyp na płytce uniwersalnej oraz gotowe urządzenie



Program sterujący zrealizowałem w języku C a także w języku Bascom (początkowo). Multipleksowanie odbywa się w podprogramie obsługi przerwania generowanego po przepełnieniu Timera. Wszystkie wykorzystywane linie mikrokontrolera skonfigurowano jako wyjściowe. W programie zadeklarowałem 15 zmiennych (R1...R5, G1...G5, B1...B5), których wartość na bieżąco odzwierciedlają diody RGB. Zmienna R1 określa pierwszą kolumnę diod czerwonych, R2 drugą kolumnę itd. Analogicznie zmienne G1…G5 odpowiadają za kolejne kolumny diod zielonych a B1…B5 niebieskich. Zapis binarny pozwala w prosty sposób definiować, które diody będą aktualnie zapalone. Zastosowanie operacji binarnych takich jak alternatywa (or, "|"), koniunkcja (and, "&"), alternatywa wykluczająca (xor, "^"), dopełnienie bitowe (toggle, "~") i przesunięcie bitowe (shift, ">>", "<<") pozwala w prosty sposób projektować efekty świetlne. Kod efektu należy umieścić w programie głównym, najlepiej w nieskończonej pętli while(1).
Zamiast załączania dwustanowego można zaimplementować płynną zmianę barw. Wykorzystałem do tego programowy PWM (puls with modulation), czyli modulację szerokości impulsu.
Aktualnie zaimplementowany w sterowniku kod powoduje łagodną zmianę barw kolejnych poszczególnych diod. Ich kolejność została określona w programie. Kiedy już wszystkie diody będą świecić jednym kolorem, cykl rozpoczyna się od początku, lecz dla innej barwy. Zaimplementowałem 6 kolorów (czerwony, żółty, zielony, turkusowy, niebieski, różowy).
Do budowy samego drzewka, podobnie jak w moim poprzednim projekcie, wykorzystałem przewody z kabla sieciowego, tak zwanej skrętki. Z głównego "pnia" wychodzi pięć głównych "gałęzi". Na każdej z nich zamontowałem 8 diod umieszczonych w kulkach z antyperspirantów typu roll-on (tytułowe fafkulce). Takie rozmieszczenie współgra z organizacją wierszy i kolumn w sterowniku i ułatwia wyobrażenie sobie implementowanego efektu. Na drzewku osadzonych jest 40 diod RGB, co daje łącznie zwój 160 przewodów. W przyszłości planuję osadzić drzewko w doniczce, w której również ukryta będzie cała elektronika i pęk kabli.
Konstrukcja nośna drzewka - zwój 160 przewodów


Będę niezmiernie wdzięczny za wszelkie uwagi i słowa krytyki. Mam nadzieję, że pozwolą mi one wyeliminować ewentualne błędy. Służę pomocą osobom zainteresowanym budową lub modyfikacją sterownika.
Działające drzewko, przejścia między kolorami



Cool? Ranking DIY