Projekty‎ > ‎

LED stick

Jak to działa?

Zasada działania nie jest szczególnie wyszukana - akcelerometr wykrywa szybkość (a właściwie częstość), z jaką machamy pałką. Ma to związek ze zmianą zwrotu wektora przyspieszenia w skrajnych położeniach pałki.
Po zmierzeniu czasu (okresu) jednego machnięcia i wykryciu momentu zmiany kierunku ruchu pałki mikrokontroler w pewnych odstępach czasu wyświetla na linijce LEDów inną kombinację pikseli (czyli kolejną kolumnę pikseli wyświetlanego obrazu).
Wszystko to odbywa się na tyle szybko, że jest postrzegane jako jednolity obrazek.
Jakość obrazka jest lepsza, gdy machający pałką potrafi to robić szybko, w równym tempie i powtarzalnie. No cóż, podobno trening czyni mistrza...

Realizacja projektu
Adam Wójtowicz zaprojektował PCB w KiCad, zmontowany układ wygląda tak:
  

Na pokładzie urządzenia znajdziemy mikrokontroler MC9S08QE8, akcelerometr MMA7361, 5 przetwornic DC-DC CAT3200-5, moduł radiowy RFM70, sterownik 16-LED MBI5025. Całość zasilana jest z 1 ogniwa LiPo (3.6 V).
Użyte w tym projekcie zielone diody charakteryzują się wysoką sprawnością i jasnością, ale mają mały rozmiar piksela, przez co wyświetlany obraz składa się z oddzielnych linii. Ten układ dodatkowo będzie zawierał dyfuzory na LEDach - aby zwiększyć rozmiary punktów świetlnych kosztem zmniejszenia ich jaskrawości. Polepszy to czytelność obrazków.

Moduł radiowy pozwala na zdalną zmianę wyświetlanego obrazka i synchronizację wielu układów, dzięki czemu można wyświetlać bardziej złożone kompozycje (w tym także animacje!), pod warunkiem znalezienia grupy chętnych do machania pałkami.

Oto efekty wykonania programu testowego:
    
Pierwsze zdjęcie to prawie jednostaje machnięcie pałką. Drugi obrazek pozwala zaobserwować zmianę kierunku machania na krańcach zakresów. Trzecie zdjęcie ilustruje zmniejszenie prędkości przy zbliżaniu się do prawej krawędzi (co wpływa na zmianę gęstości pikseli w poziomie). Wszystkie te efekty można skompensować programowo, analizując na bieżąco dane z akcelerometru.

Poniższy program testowy wysyła do sterownika LED po 16 bitów danych, a każdy z nich odpowiada za zapalenie lub zgaszenie odpowiedniej diody. Docelowo te dane będą synchronizowane z akcelerometrem, aby uzyskać stabilny obraz (ciekawszy niż linie ciągłe i przerywane).

Kod programu testowego jest bardzo krótki:

for(;;) { 
    spi(0xAAAA); //wysyła dwójkowo: 1010 1010 1010 1010
    Cpu_Delay100US(20); //opóźnienie
    spi(0xFFFF); //wysyła dwójkowo: 1111 1111 1111 1111
    Cpu_Delay100US(20); //opóźnienie
}

Dalsze plany
Po uruchomieniu akcelerometru i opracowaniu aplikacji sterującej (do bezprzewodowej zmiany wyświetlanych treści) zabieramy się za pałkę RGB - będą większe, jaśniejsze, kolorowe diody świecące!