BBC micro:bit i wyświetlacz LED z kilkunastu matryc 8×8 (IwE 2019)

Wśród projektów pokazowych na tegoroczna konferencję Informatyka w Edukacji musiało się znaleźć coś, co z dużej odległości przyciągnie uwagę odwiedzających. Jako, że nasza stacja pogodowa oparta o rozszerzenie SparkFun weather:bit potrzebowała sposobu prezentacji danych meteorologicznych, postanowiliśmy stworzyć coś do będzie widoczne z wielu metrów, a jednocześnie będzie miało praktyczne zastosowanie.

Matryca jest dobrze widoczna nawet w dzień

Rodzaj wybranych matryc, ich ilość i wydajność prądowa BBC micro:bita spowodowały, że projekt musi być zasilany z zewnętrznego zasilacza 5V. Możliwe jest wysterowanie i zasilenie do 4 matryc LED bezpośrednio z BBC micro:bita podpiętego pod USB, ale wyświetlane piksele nie będą tak jasne jak w przypadku dedykowanego zasilania.

Sprzęt

Do budowy posłuży nam oczywiście BBC micro:bit. W zależności od ilości sterowanych modułów konieczny będzie zasilacz: do 10 modułów idealny będzie zasilacz 5V o wydajności 1.2A, powyżej wypada rozważyć użycie modelu o wydajności 2.5A. Zasilacz standardowo wyposażony jest we wtyk beczkowy 2.1.x5.5mm. Przydatne będzie gniazdo do montażu na płytce PCB. Jako, że BBC micro:bita nie można zasilać napięciem 5V przez złącze krawędziowe zdecydowaliśmy się użyć taniego liniowego regulatora napięcia LD1117V33C. Aby podłączyć się do magistrali SPI w BBC micro:bicie potrzebny jest adapter do złącza krawędziowego. Robią je praktycznie wszyscy producenci akcesoriów. W zależności od tego co masz pod ręką, może to być adapter od SparkFun, Kitronika, czy tak jak w naszym przypadku polski micro:slav. Tych ostatnich używamy dość często na własny użytek. Oprócz wlutowanego gniazda na złącze krawędziowe, mają zintegrowana płytkę prototypową pozwalającą na łatwe dolutowanie złącza zasilania, regulatora napięcia i opcjonalnych złącz.

Absolutną gwiazdą całego projektu zostały trzy moduły po 4 matryce 8×8 pikseli. Chcieliśmy mieć kolorowy projekt, więc wybraliśmy moduły z diodami w kolorach czerwonym, zielonym oraz niebieskim. Ale nic nie stoi na przeszkodzie zastosowania tylko jednego koloru. Pamiętaj o tym, że różne kolory diod, mają różne zapotrzebowanie na prąd. Niebieskie są z reguły bardziej łakome na ampery.

Wszystkie moduły LED zostały zbudowane w oparciu o sterownik MAX7219. Jego wielką zaletą jest możliwość łączenia modułów w szereg. Wyjście poprzedniego podpinamy do wejścia następnego modułu. Sterowane są po magistrali szeregowej SPI. Teoretycznie nie ma ograniczenia ile modułów można spiąć razem i tak długo jak będziemy pamiętać o podbiciu mocy sygnału co kilkanaście modułów (np bramką AND) całość prawdopodobnie będzie działać. Oczywiście im więcej matryc w szeregu, tym dłużej trwa wyświetlanie na niej wartości. BBC micro:bit nie jest demonem prędkości, ale do potrzeb tekstowych z 12 matrycami (768 pikseli) radzi sobie całkiem nieźle.

Stojak do całej konstrukcji jak zawsze został wykonany z profili MakerBeam. Moduły do profili przykręcone zostały standardowymi dystansami M3. Całość prezentuje się dość zgrabnie, stoi bardzo stabilnie i co najważniejsze cyfry, litery i ikony na wyświetlaczu są czytelne z kilku metrów.

Programowanie – MakeCode

Programowanie całego projektu nie było zbyt skomplikowane. Biblioteka do obsługi matryc MAX7219 jest dostępna w rozszerzeniach do MakeCode, a jej nazwa MAX7219 8×8 nie budzi wątpliwości, że chodzi o obsługę matryc.

W pętli rozruchowej ustawiamy kanał na którym będziemy nasłuchiwać nadchodzących komunikatów radiowych z czujnika meteorologicznego, który możemy umieścić w odległości dochodzącej do 50-100m. Dla pewności zmienne w których będziemy trzymać dane meteorologiczne zerujemy (stare przyzwyczajenia nie chcą umierać). Następnie inicjalizujemy macierz diodową. Ważne aby podać poprawną liczbę modułów – w naszym przypadku 12 szt. Pozostałe pola informują o pinach do których podpięta jest macierz. Są to standardowe piny SPI. Z uwagi na specyfikę używanych przez nas modułów, obraz na każdym z nich musieliśmy obrócić o 90 stopni przeciwnie do ruchu wskazówek zegara. Cała biblioteka napisana jest w JavaScript i ten zabieg, sprawia że przy 12 matrycach micro:bit się zaczyna pocić. Widzę tu spore pole do przyszłych optymalizacji. Ale na chwilę obecną wystarcza nam to, że biblioteka działa.

Różowe pętle „on radio received” działają w tle i wywoływane są przychodzącymi komunikatami radiowymi. Ich zadanie jest proste – przypisać do zmiennych zawartość odpowiednich komunikatów.

Czarna pętla „run in background” to nic innego jak animacja na ekranie micro:bita. Wrzuciliśmy ja tu, tylko i wyłącznie aby zaprezentować jak prosty jest multi-tasking z wykorzystaniem edytora MakeCode.

W funkcjach wyświetlających umieściliśmy binarne reprezentacje ikon. Trzeba pamiętać, że matryca jest obracana o 90 stopni w lewo, więc wartości poszczególnych pikseli muszą to uwzględniać. Zaraz za ikoną jest funkcja wyświetlająca wartość zmiennej – oczywiście w razie potrzeby wartość jest odpowiednio obrabiana, konwertowana do ciągu znaków a następnie ucinana jej długość, tak aby ładnie mieściła się na ekranie LED.

W pętli głównej programu naprzemiennie prezentujemy po 3 wartości naraz. Niestety funkcja czyszczenia ekranu nie działała tak jak powinna więc zamiast niej zastosowaliśmy wyświetlanie jednej spacji wraz z opcją uprzedniego czyszczenia ekranu. Działa i to się liczy.

Podsumowanie

Projekt od strony sprzętowej był dość łatwy. Trzeba było pamiętać, że LEDy zjadają naprawdę dużo prądu i zasilanie ich przez regulator napięcia BBC micro:bita doprowadza do stanu w którym nie wszystko działa jak należy. Dodanie zewnętrznego zasilania momentalnie rozwiązało problem.

Od strony programistycznej odrobinę pracy wymagało odpowiednie sparsowanie danych przychodzących ze zdalnego czujnika. Podczas oprogramowywania trzeba brać też poprawkę na czas odświeżania informacji na ekranie. Pamiętaj, że BBC micro:bit po magistrali wysyła dane momentalnie, a ich wyrysowanie trwa już pewien czas. Dobrze jest dać w programie dłuższe przerwy, aby skompensować czas rysowania.

Umieszczenie instrukcji rysujących poszczególne parametry w funkcjach pozwala na dowolne aranżowanie kolejności ich wyświetlania. Jest to coś co zawsze warto robić, ponieważ w MakeCode łatwiej jest przeciągnąć jeden bloczek niż kilka bądź kilkanaście.

Zdecydowanie jest to zjawiskowa mini tablica informacyjna. Widać ją z daleka, jest bardzo jasna.