Świecąca kostka LED RGB – Projekt Bluetooth

Share on facebook
Share on twitter
Share on linkedin
Czas czytania: 10 min.

Poniższy artykuł jest instrukcją budowy kostki LED RGB o rozmiarach 6x6x6. Nic oczywiście nie stoi na przeszkodzie, aby na podstawie tej konstrukcji opracować swoją własną kostkę LED np. o innym rozmiarze – 4x4x4 lub 8x8x8. Kostka wykorzystuje diody LED RGB ze wspólną anodą. Diody sterowane są przez moduł Arduino Nano, wyposażony w dodatkowy moduł Bluetooth do sterowania bezprzewodowego. Autor, zainspirowany projektem wykonanym przez użytkownika ukrywającego się pod nickiem GreatScott, zdecydował się wykonać kostkę z diod LED o średnicy 8 mm, zmniejszając jednocześnie dystans między diodami. 

Dodanie komunikacji Bluetooth, znacznie ułatwia dodawanie nowych funkcji i animacji, a także daje możliwość zdalnego sterowania kostką. Pozwala to również np. zakodować grę w węża czy inne zaawansowane funkcje. Ponadto autor dodał do kostki tryb Audio Visualizer, który pozwala kostce wizualizować dźwięk z wejścia za pomocą modułu MSGEQ7. Łatwość wgrywania własnych animacji poprzez Bluetooth, zachęciła autora do stworzenia aplikacji AnimationCreator – to napisane w Javie oprogramowanie z łatwym w użyciu interfejsem użytkownika do tworzenia i poprawiania animacji, dzięki czemu każdy może bardzo szybko tworzyć niestandardowe animacje. Dzięki kreatorowi animacji nie musisz się martwić o implementację niestandardowych animacji bez umiejętności programowania Arduino.

Potrzebne elementy

Do konstrukcji kostki potrzebujemy:

  • 216 diod RGB LED z wspólną anodą
  • Taśma z kablami (1 metr 40 żyłowej taśmy jest wystarczający)
  • 4 x 40 pinowe listwy kołkowe (goldpiny)
  • Około 25 metrów srebrzanki lub innego cienkiego pocynowanego drucika
  • Rurki termokurczliwe

Do konstrukcji sterownika potrzebne będą:

  • 7 x TLC5940 (driver LED)
  • 6 x IRF 9540 (MOSFETy z kanałem typu P)
  • 8 x kondensatory 10 uF
  • 3 x kondensatory 1000 uF
  • 14 x opornik 2,2 kOhm
  • 1 x opornik 1 kOhm
  • 7 x podstawki DIP 28 pin
  • 1 x moduł Arduino Nano
  • 1 x dioda 1N4001 lub podobna (dowolna inna dioda prostownicza też pasuje)
  • 8 x kondensatorów 0,1 uF
  • 1 x złącze zasilania DC na PCB
  • 1 x moduł Bluetooth HC-05

Zasada działania

Ponieważ sprzęt i oprogramowanie są równie dużymi częściami tego projektu, najpierw warto zapoznać się z teoretycznymi podstawami działania układu.

Mózgiem kostki jest moduł Arduino Nano. Zapewnia on wystarczającą liczbę operacji wejścia/wyjścia, aby sterować działaniem używanych w projekcie sterowników LED, a jednocześnie także ustanowić połączenie Bluetooth z modułem HC-05 i dalej, z innym sprzętem sterującym działaniem kostki LED. 

Większość projektów kostek LED używa prostych rejestrów przesuwnych do przechowywania wartości jasności kolorów poszczególnych diod LED. Ta aplikacja jednak nie używa takich rejestrów. Zamiast tego wykorzystywany jest scalony Sterowniki LED TLC5940. Jak zobaczymy poniżej, oszczędza to dużo czasu, a także mnóstwa dodatkowych elementów elektronicznych w systemie.

Podstawowa funkcjonalność sterowania kostką wykorzystuje multipleksowanie. W tym przypadku multipleksowane jest 6 warstw świecącego sześcianu, co oznacza, że wszystkie anody (+) wszystkich diod LED w każdej są ze sobą połączone, natomiast poszczególne katody diod LED są ze sobą połączone w kolumnie. Oznacza to, że jeśli chcemy załączyć diodę LED w pozycji x = 1, y = 2, z = 3 na  kolor: zielony, trzeba podać 5 V na anodzie warstwy 3, a masę podłączyć do kolumny odpowiadającej pinowi zielonemu (w dyskretnej diodzie RGB znajdują się trzy piny – dla katody każdej diody osobno) w x = 1 i y = 2. Tak więc w rzeczywistości w danym momencie tylko jedna warstwa kostki jest faktycznie włączona, ale dzięki szybkiemu przełączaniu poszczególnych warstw, nasze oko nie jest w stanie tego zarejestrować. 

Aby kontrolować takie rzeczy, jak jasność czy dodawać do układu animacje itp., używany jest transceiver Bluetooth HC-05 podłączonego do Arduino Nano. Używanie modułu z Arduino jest bardzo proste, ponieważ łączą je tylko cztery linie 4-stykowego interfejsu szeregowego (TXD, RXD) i zasilania. W ten prosty sposób z łatwością dołączyć można do Arduino moduł Bluetooth, który zapewnii komunikację z dowolnym urządzeniem mobilnym. Do Arduino autor konstrukcji podłączył również moduł MSEQ7 do spektralnej analizy dźwięku – dzięki niemu możliwe jest wprowadzenie układu w tryb wizualizacji audio. Dodanie tego elementu jest jednak zupełnie opcjonalne i zależy od tego, czy chcemy zachować tą funkcjonalność.

Konstrukcja kostki

W celu zbudowania kostki musimy połączyć ze sobą w odpowiedni sposób wszystkie 216 diod LED RGB. Lutowanie ze sobą diod zapewnia im nie tylko połączenie elektryczne, ale także mechaniczne i nadaje im formę sześcianu. Montaż diod musimy zacząć od, niestety żmudnego, ale koniecznego sprawdzenia wszystkich diod LED. Dzięki temu, jeśli jakaś dioda po montażu kostki nie będzie chciała działać, to możemy być pewni, że jest to wina naszej konstrukcji i montażu, a nie uszkodzonej struktury świecącej. W tym celu wykorzystamy baterię 9 V i opornik 220 ohm. Anodę (najdłuższy pin diody) każdej diody po kolei podłączamy przez opornik 220 ohm do masy, a następnie każde z poszczególnych wyprowadzeń po kolei dołączamy do masy baterii, tak, żeby dioda zaświeciła. Brak świecenia jest oczywistym wskaźnikiem tego, że dioda nie działa.

Połączenie rzędów kostki

Zanim będziemy mogli lutować diody LED w odpowiednich rzędach, musimy zgiąć i przyciąć na odpowiednią długość przewody. Najprościej jest zrobić to wiercąc otwór o średnicy diody w kawałku drewna lub plastiku. Następnie mniejszym wiertłem, wiercimy trzy otwory po jednej stronie (w odległości około 10 mm) z kątem pomiędzy nimi równym około 15 stopni, a po drugiej stronie wiercimy pojedynczy otwór na środku. Te otworki posłużą nam do wyginania nóżek każdej diody.

Przed przecięciem i wygięciem nóżek diody w kierunku poszczególnych otworków należy ją odpowiednio zorientować w dużym otworze. Pierwsza od góry powinna być katoda niebieskiej diody. Wyginamy ją w prawej. Następna nóżka to zielona katoda, ona również trafia w prawo. Poniżej znajduje się anoda, którą odginamy w stronę lewego otworu, a ostatni pin to czerwona katoda, która trafia do trzeciego po lewej stronie otworu. Następnie musimy wygiąć piny tak, aby schowały się w mniejsze otwory. Ten krok sprawia, że o wiele łatwiej jest lutować diody LED na swoim miejscu.

Teraz, gdy wszystkie diody LED są przygotowane, należy je złożyć w rzędach po 6 sztuk, łącząc wspólnie anody. Najprościej jest to zrobić budując przyrząd – 6 otworów o średnicy ok 0,8 mm w odległości 25 mm od siebie. Można w ten sposób w takim uchwycie zamontować sześć diod LED umieszczając w otworach ich piny. Do połączenia anod potrzebny jest kawałek cynowanego drutu miedzianego o długości około 16 cm (z zapasem). Przycięte 16 cm przewodów należy przyłożyć do otworów, w których znajdują się anody i przylutować je do drutu. Do konstrukcji całej kostki potrzebne jest 36 takich rzędów diod LED

Połączenie poszczególnych warstw

W układzie multipleksujemy warstwy sześcianu, ale do montażu łatwiej jest zbudować 6 ścian 6×6 diod LED, a następnie zmontować je obok siebie i po prostu poprowadzić pojedynczy ocynowany drut miedziany łączący anody poszczególnych wierszy w warstwie razem. Ten krok nie jest prosty, więc należy przyłożyć się do niego bardzo starannie, gdyż poprawienie czegokolwiek, co popsujemy teraz, może być dosyć problematyczne. Trzeba się uzbroić w cierpliwość, bo na tym etapie trzeba będzie wykonać około 1000 połączeń lutowanych.

Ten etap, podobnie jak poprzednie, warto zacząć od wykonania przyrządu, który ułatwi nam montaż. Tym razem, zamiast deseczki z otworami potrzebna jest nam deska z rowkami. Przyrząd montażowy musi mieć sześć linii, tak, aby uchwycić w nim sześć rzędów diod LED, by zbudować kompletną ścianę. Rowki te wykonać można frezarką lub ostrym nożem, a w ostateczności nawet wiertarką. Umieszczamy je, ponownie, 25 mm od siebie. 

W rowkach następnie umieszczamy sześć rzędów diod LED tak, że anoda przylutowana do drucika skierowana jest w dół, a katody RGB w górę. Aby połączyć katody umieszczone nad sobą, potrzebne jest trochę więcej drutu (jest 6 kolumn x 3 katody x 6 ścian = 108 fragmentów drutu po ok 16 cm). Powoli rozpoczynamy montaż, lutując ze sobą poszczególne katody, poszczególnych diod LED w danych kolumnach. Nie śpieszmy się, aby nie popełnić błędu. Operacje musimy powtórzyć dla sześciu kolumn w montowanej właśnie ścianie kostki. Cały montaż ściany powtórzyć trzeba sześciokrotnie, aby uzyskać sześć ścian diod LED.

Po zbudowaniu ścian złożyć można też samą kostkę. Aby utrzymać kostkę, konieczne jest zastosowanie kolejnego przyrządu, albo lepiej – zbudowanie prostej podstawki. Można w tym celu wykorzystać arkusz sklejki, w którym wykonujemy otwory 0,8 mm dla pinów. Znajdują się ona co około 25 mm. Po wywierceniu otworów umieszczamy w nich poszczególne ścianki diod LED, tak, aby wszystkie druciki znalazły się w swoich otworach. Pamiętajmy, aby podczas montażu układać diody równo i umieścić wszystkie anody skierowane w tym samym kierunku. Gdy już ułożymy poszczególne ścianki, należy połączyć anody każdej warstwy ze sobą. Aby to zrobić, bierzemy kolejny kawałek drutu o długości 16 cm i kładziemy go na pierwszej warstwie, tak aby drut dotykał wszystkich drutów Anody w jednej warstwie. Trzeba uważać, aby drucik ten nie dotknął żadnej z katod. Po przylutowaniu drutu do jednej warstwy powtarzamy to dla pozostałych pięciu.

Okablowanie kostki

Teraz, gdy fizyczna struktura kostki jest na miejscu, czas dodać przewody do katod i anod, aby później połączyć je z płytką drukowaną kontrolera. Po pierwsze, odcinamy drut przedłużający na spodzie drewnianej płaszczyzny, i pozostawiamy około 15 mm do lutowania. Aby ułatwić mapowanie kodu oprogramowania poszczególnych kolorów diod LED na styki sterownika LED, stosujemy do wszystkich kolumn taki sam schemat okablowania.

Sterowniki LED TLC5940 mają 16 po wyjść każdy, co oznacza, że potrzebne jest 7 scalonych sterowników. Oznacza to również, że potrzebujemy 7 x 16 przewodów, które są połączone na jednym końcu z diodami LED i z męskim gniazdem na drugim końcu. Tak więc z wycinamy z wstążkowego kabla siedem kabli po 16 żył każdy na długość około 20 cm. Na jednym końcu każdej z taśm lutujemy męskie końcówki goldpinów. Lutowanie kabli rozpocznijmy od jednego z rogów sześcianu, a kabel po lewej stronie wstążki przylutowany zostanie jako pierwszy. Można zacząć np. od niebieskiej katody diody LED w prawym dolnym rogu. Koniecznie trzeba zapamiętać to jak się lutuje i trzymać się przyjętej konwencji. Drugi kabel zostaje przylutowany do zielonej katody tej samej diody LED, kolejny do czerwonej katody, następnie do niebieskiej diody LED po lewej stronie od pierwszej diody, następnie zielonej diody, a następnie niebieskiej i tak dalej. Po przylutowaniu pierwszego kabla sięgamy po kolejny i kolejny i tak dalej, aż do przylutowaniu wszystkich katod do kabli.

W przypadku połączeń anod zaleca się stosowanie nieco grubszego kabla, ponieważ przepływa przez niego większy prąd niż przez katody. Aby uzyskać dostęp do anod 6 warstw na dnie kostki, potrzebne jest jeszcze trochę cynowanego drutu miedzianego. Należy wywiercić otwory po jednej stronie kostki i przeprowadzić tamtędy drut miedziany, który łączymy z anodą odpowiedniej warstwy. Jeśli chodzi o kabel, to do podłączenia sześciu anod potrzebujemy sześć żył (grubszych) zakończonych z jednej strony goldpinami, które lutujemy do kabla. Z drugiej strony kabel łączymy z poszczególnymi anodami warstw kostki.

Sterownik diod LED

Sterownik LED można wykonać na płytce drukowanej lub bez niej. PCB jest tutaj zupełnie opcjonalne. W układzie tym znajduje się siedem scalonych driverów LED TLC5940 podłączonych do Arduino Nano. Wszystkie chipy TLC5940 są połączone ze sobą szeregowo, co oznacza, że wszystkie piny sterujące są ze sobą połączone (np. Pin BLANK pierwszego TLC jest podłączony do BLANK drugiego, trzeciego, czwartego itp) i wszystkie są oczywiście podłączone do Arduino z tymi samymi przewodami, z wyjątkiem wejścia  Serial In, który jest najpierw podłączony do cyfrowego pinu Arduino; pin Serial Out tego pierwszego drivera jest połączony z pinem Serial In drugiego TLC i tak dalej.

Montaż układu należy zacząć od lutowania wszystkich gniazd, a następnie dodania kondensatorów 100 nF do zasilania każdego sterownika, a następnie rezystora 2,2 kOhm do wejścia IREF i GND oraz 7-pinowego gniazda do podłączenia anod. Następnie łączymy wszystkie elementy zgodnie z opisem powyżej, dodając poszczególne elementy po kolei do systemu. Upewnijmy się, że mamy dobre połączenia styków zasilania z wejściem do układu. Dodajmy też kondensatory 1000 uF i 10 uF do zasilania na płytce, aby nie powodowało ono żadnych problemów. Po ukończeniu płytki możemy zabrać się za przygotowanie modułu Arduino.

Płytka kontrolna – Arduino + transceiver Bluetooth

Płytkę sterującą wykonać można na fragmencie płytki uniwersalnej. W pierwszej kolejności należy umieścić na PCB dwa żeńskie złącza goldpin, aby działały jako gniazdo dla modułu Arduino. Następnie wlutować należy sześć tranzystorów MOSFET obok siebie, po prawej stronie Arduino (strona z pinami analogowymi) i dodać do nich rezystor 2,2 kOhm między pierwszym a ostatnim pinem. Teraz można przed MOSFETami wlutować 6-pinowe złącze i połączyć dreny wszystkich tranzystorów z pinami złącza i z odpowiednimi pinami analogowymi modułu Arduino. Następnie dodać trzeba 7-pinowe złącza do podłączenia modułu z driverami diod LED. Na płytce musimy dołączyć też linie zasilania do wszystkich elementów, które go potrzebują. Dobrze jest dodać kondensatory filtrujące do linii zasilania – 1..2 kondensatory 1000 uF na wejściu zasilania do systemu oraz jeden 10 uF i jeden 100 nF obok Arduino. Finalnie instalujemy 4-pinowe złącze dla modułu HC-05. Dołączamy do niego linie zasilania (VCC i GND) oraz interfejs szeregowy (linie RX i TX z dodanym konwerterem poziomów 5V/3,3V).

Na krawędzi płytki drukowanej należy zamontować złącze zasilania oraz przełącznik, który pozwoli na włączanie i wyłączanie systemu. Na koniec należy wykonać wszystkie niezbędne połączenia zasilania z pinów masy i zasilania gniazda DC i przełącznika do Arduino, MOSFETów, kondensatorów filtrujących i złącza dla HC-05. Dobrze jest również dodać diodę do linii VC, która sprawia, że zasilanie z pinu VCC płynęło do pinu Arduino, a nie w drugą stronę (chroni to Arduino podczas programowania przez złącze USB). Do zasilania wykorzystać można zasilacz 5 V lub kabel USB z zainstalowaną wtyczką pasującą do złącza DC. Jak wspomniano powyżej, do układu podłączyć można też moduł MSGEQ7, który pozwala na analizowanie dźwięku w celu wykorzystania kostki LED np. do autonomicznego wyświetlania wizualizacji muzyki.

Aby finalnie połączyć wszystkie części kostki LED ze sobą należy rozpocząć od podłączenia 7-pinowego kabla do płytki z Arduino i płytki sterownika (upewniając się, że orientacja kabla jest prawidłowa). Następnie podłącz moduł HC-05 do 4-stykowego złącza i podłącz zasilanie. Aby podłączyć 7×16 Pinowe złącza samej kostki LED, należy wykorzystać 16-pinowe kable do podłączenia LEDów do płytki z driverami TLC, rozpoczynając od pierwszego drivera – tego, którego pin Serial In jest podłączony bezpośrednio do Arduino. Drivery sterują katodami; wspólne anody LEDów w poszczególnych warstwach podłączane są do MOSFETów na płytce z modułem Arduino (znajduje się tam dedykowane złącze 6-pin).

Finalnie elektronikę kostki zamknąć można w obudowie, najlepiej koloru czarnego, by nie odwracała uwagi od samych diod świecących oraz dodać ewentualnie ścianki za diodami LED, które np. mogą maskować połączenia kabli do diod LED.

Oprogramowanie

Cykle multipleksera

Moduł Arduino pracuje w pętli, wykonując cały czas następujące operacje:

  • Jeśli minął predefiniowany okres, załaduj wartości kolejnej warstwy do driverów, wyłącz bieżącą warstwę, włącz następną warstwę, zresetuj licznik czasu, przekaż nowe wartości do TLC.
  • Jeśli minął okres klatki animacji, załaduj nową ramkę, przechowując wartości dla wszystkich diod LED i kolorów w buforze i zresetuj licznik czasu.
  • Jeśli dane Bluetooth są dostępne, zareaguj na nie (Zmień animacje, jasność).

Głównym aspektem optymalizacji kodu jest szybkość. Ważne jest, aby czas na zmianę warstwy był minimalny. Im szybciej przełączane są warstwy, tym więcej ramek można wyświetlić w okresie czasu, uzyskując płynniejszą animację. W obecnej wersji kodu czas dla jednej warstwy wynosi 1700 mikrosekund. To wystarczająco krótko, aby migotanie było niezauważalne.

Aby zaimplementować animację, musimy ustawić bufor na wartości, które chcemy dla ustawić dla następnej klatki za każdym razem, gdy upłynie FrameDuration. Robimy to, wywołując stosowne Makro, do którego podawane są koordynaty diody do zapalenia, jej kolor i jasność.

Aby na przykład zaimplementować animację, która po prostu wyświetla losowo czerwony, zielony i niebieski kolor w całej kostce, można zapisać:

void randomLedsFull () {

  dla (uint8_t j = 0; j <CUBE_SIZE; j ++) {

    dla (uint8_t x = 0; x <CUBE_SIZE; x ++) {

      dla (uint8_t y = 0; y <CUBE_SIZE; y ++) {

        uint8_t rand = random8 (3);

        SETLED (x, y, j, rand, maxBright);

      }

    }

  }

}

Ta funkcja wywoływana jest za każdym razem, gdy minie okres na jedną ramkę i jest wybierana z konstrukcji case-switch w fragmencie kody w Arduino loop(). Jeśli piszesz nowe animacje, możesz je dodać, po prostu dodać je w tym fragmencie kodu.

Aplikacja do sterowania kostką

Aby zdalnie kontrolować kostkę, wykorzystano dodany dzięki modułowi HC-05 interfejs Bluetooth. Autor stworzył aplikację na telefon, która pozwala na edycję parametrów kostki czy konfigurowanie animacji. Aby podłączyć kostkę do telefonu należy wyszukać dostępne połączenia Bluetooth z telefonu, a następnie znaleźć moduł HC-05 i się z nim połączyć. Jeśli podczas próby połączenia z kostką wystąpił jakiś błąd, można spróbować ręcznie sparować moduł HC-05 w ustawieniach Bluetooth. Po połączeniu smartfona z kostką możemy uruchomić aplikację i rozpocząć sterowanie kostką.

W samej aplikacji mamy możliwość sterowania następującymi parametrami i funkcjami:

  • Szybkość i jasność: Zmień wartości suwaka, aby zmienić jasność lub tempo animacji
  • Animacje: przycisk do zmiany animacji, domyślnie animacje są zapętlone
  • Przewijanie tekstu: Przycisk, który wyświetla okno dialogowe do wprowadzenia tekstu, który będzie przewijany przez kostkę
  • Polecenie: Ręczne wydanie polecenia
  • Snake: klasyczna gra Snake – czerwony: jabłko, zielony: głowa węża, niebieski: ogon, sterowanie: 4 przyciski kierunkowe
  • Wizualizator audio: wykorzystujący moduł MSGEQ7 wizualizator audio.

Projektowanie animacji

Autor dodatkowo napisał w Javie (JavaFX i Java3D) program do projektowania animacji dla kostki – AnimationCreator.  Ułatwia on tworzenie i edytowanie niestandardowych animacji, zapewniając łatwy do zrozumienia interfejs użytkownika. Można z jego pomocą tworzyć, edytować i ponownie konfigurować animacje dla kostek LED o wielkości 4x4x4,6x6x6 lub 8x8x8 diod. Aby utworzyć nową animację należy wybrać rozmiar kostki i ustawić kolory diod w każdej ramce – wybieramy żądany kolor z próbnika w programie itd. W programie można symulować animacje klikając stosowny przycisk, który otwiera kolejne okno z modelem modułu Java3D. W oknie tym można obracać kamerę etc by obejrzeć model 3D kostki z każdej strony.

Po zakończeniu korzystania z kreatora animacji można zapisać animację – zostaje ona zapisana do pliku .h (biblioteka dla Arduino), którą należy dodać do głównego szkicu w Arduino IDE, który kontroluje działanie kostki LED. Po dodaniu odpowiedniego #include w kodzie można skomplikować i załadować animację do systemu i uruchomić kostkę.

Podziel się:

Share on facebook
Share on linkedin
Share on twitter
Maciej Chmiel

Maciej Chmiel

Specjalista od Arduino i szeroko rozumianej elektroniki. Człowiek-orkiestra, dyżurny od wszystkiego - nie ma dla niego rzeczy niemożliwych, a czas ich realizacji jest zwykle prawie natychmiastowy. Po pracy miłośnik kreskówek z Pepe Panem Dziobakiem. Jego bezcenne memy wspomagają dział kreatywny.

Zobacz więcej:

Efekt Mandeli - rzeźba Nelsona Mandeli
Ciekawostki
Oskar Pacelt

Fałszywa pamięć i jej wybryki. Efekt Mandeli

Efekt Mandeli to niezwykłe zjawisko, w którym duża grupa ludzi pamięta coś inaczej niż to, co się wydarzyło. Czy to zbiorowa amnezja, czy wszechświaty równoległe? Co jest właściwie grane i czemu tak się dzieje?

Ciekawostki
Oskar Pacelt

Nowości w Botland #39

Raspberry Pi, Arduino, Qobo i Coding Express, podręczniki Helion – coś do warsztatu, coś do biblioteczki, coś do wspólnej zabawy.

Dodaj komentarz

Twój adres email nie zostanie opublikowany.