Słów kilka o tym jak zrobić małą kostkę LED (LED Cube) i zaprogramować jej świecenie.
Konstrukcja mechaniczno-elektryczna
Wszystko czego będziemy potrzebować to:
- Arduino Nano ATMega168/328 (lub inne nieco mocniejsze);
- tranzystor BC546 x 3;
- rezystor 1,5 kOhm x 3;
- rezystor 180 Ohm x 9;
- płytka prototypowa;
- kabelki;
- diody LED 5mm x 27 (+2 sztuki na zapas gdyby któraś się uszkodziła).
Wszystkie kody potrzebne do zaprogramowania kostki znajdują się pod adresem: https://bitbucket.org/mrymsza/cube_led/src
Tworzenie cube’a zaczniemy od wygięcia nóżek diod w sposób przedstawiony na zdjęciu.
Mając odpowiednio powyginane nóżki diod należy zlutować je według schematu zamieszczonego poniżej, aby umożliwić zlutowanie ich do postaci sześciennej kostki (widocznej na kolejnym zdjęciu).
Po właściwym zlutowaniu powstaje dziewięć kolumn złożonych z anod diod oraz trzy warstwy składające się z katod.
Każdą warstwę cube’a łączymy poprzez kolektor tranzystora do masy, bazy tranzystorów łączymy przez rezystor 1,5kOhm z cyfrowym Arduino. Każdą kolumnę łączymy przez rezystor 180 Ohm do portu.
Działający projekt na płytce stykowej.
Firmware – oprogramowanie dla Arduino
Mając przygotowaną konstrukcję “elektryczną” można zająć się przygotowaniem oprogramowania dla Arduino.
Przyjmijmy, że Arduino przyjmuje sekwencje danych wysyłanych przez port szeregowy z aplikacji. Każde 8 bitów wiadomości niesie za sobą inną informację. Poprzez odpowiednią interpretację, program wykorzystuje otrzymane informacje do zaprogramowania kostki.
- a) Funkcja setup().
Przypisanie portów kolumnom oraz warstwom;
ustawienie stanu początkowego diod na 1 (cała kostka ma się świecić).
- b) Czytanie wiadomości wysłanej z programu GUI.
- c) Interpretacja otrzymanej wiadomości.
- d) Główna pętla programu.
Software – aplikacja sterująca
Gdy jesteśmy pewni co do tego, że kod na Arduino działa i jest poprawna komunikacja poprzez port szeregowy przystępujemy do przygotowania programu okienkowego do obsługi kostki LED (tak zwane GUI).
- Przykładowe GUI
- Kod źródłowy programu.
- a) Inicjalizacja obiektu oraz nawiązanie połączenia slotów.
- b) Informacja jest zapisywana w postaci liczby dziesiętnej, która po zapisaniu w systemie binarnym przedstawi, dokładnie jakie diody mają się w danej sekwencji świecić. Każda warstwa to 16 bitów, 9 z nich mówi o każdej diodzie w warstwie: 1-dioda się świeci, 0-nie świeci (pierwsze 7 będzie zawsze równe 0).
- c) Konwersja wartości całkowitej na binarną.
- d) Utworzenie wiadomości gotowej do wysłania do programu Arduino. Po złożeniu wszystkich fragmentów, cała wiadomość będzie wyglądać przykładowo: ‘#’1111111100000001010101000000000011001111000000010001000100000001’n’
- e) Połączenie z arduino.
Poniżej jedna z wielu możliwych wzorów świecenia.
Możliwości rozwoju
W przedstawionej powyżej instrukcji program pozwala jedynie na załadowanie do Arduino tylko jednej statycznej sceny.
Rozbudowę programu (GUI) o możliwość wysyłania całych sekwencji pozostawiamy czytelnikowi.
Wygodę połączeń kostki z Arduino można polepszyć poprzez zaprojektowanie i wykonanie własnej płytki drukowanej.
Na po niższym obrazku jest pokazany przykładowy projekt takiej płytki.
Wygląd cube’a, ulepszyliśmy projektując do niego stylową obudowę, którą można wykonać np. za pomocą drukarki 3D dzięki czemu można zaszaleć z jej oryginalnym kształtem.
Bez klosza.
A tak wygląda złożona lampka nocna – pamiętajcie o braku przeciągu w pomieszczeniu ;)
Dla urozmaicenia można też zamiast jednokolorowych diod, użyć RGB. Wiązać się to będzie jednak z rozbudowaniem kodu oraz samego układu.
Fajne. Wielki plus za własną aplikację do sterowania, a nie kolejny gotowiec.
Dzięki za przypomnienie pomysłu, bo kiedyś chciałem sobie coś takiego zbudować :D
Świetna robota!
Fajne ale mógłbyś powiedzieć coś więcej o interfejsie. Jestem początkujący i niewiele z tego zrozumiałem :(
brakuje informacji, w czym jest zrobione to GUI. Ti jest jakieś QT czy coś innego?