LED-owy wyświetlacz macierzowy

LED-owy wyświetlacz macierzowy

We wrześniowym wydaniu „Elektroniki Praktycznej” (EP 9/21) prezentowaliśmy elektroniczny znikopis, zbudowany na bazie modułu Arduino. Projekt ten był inspiracją do opracowania zaprezentowanego teraz urządzenia – kolejnego znikopisu, ale tym razem sterowanego za pomocą modułu micro:bit.

We wstępie do opisu swojego urządzenia na portalu Instructables autor zaznacza, co było źródłem jego inspiracji. „Podoba mi się ten pomysł, że zastosowanie matrycy RGB LED, jako urządzenia wyświetlającego, pozwala nam szkicować obrazy w jasnych kolorach. Zamiast używać płytki Arduino, zdecydowałem się na użycie micro:bit jako kontrolera i Microsoft Makecode jako platformy programistycznej” – sumuje podstawowe założenia swojego projektu.

Moduł micro:bit to uniwersalna płytka z mikrokontrolerem, która jest wyposażona w 19 pinów GPIO, w tym piny analogowe i cyfrowe oraz interfejsy takie jak SPI i I2C. Geneza powstania tego modułu jest bardzo ciekawa i warto o niej wspomnieć. Płytka ta powstała w Wielkiej Brytanii z inicjatywy stacji radiowej BBC. Została ona stworzona z myślą o edukacji, co nie znaczy, że nadaje się tylko do takich zastosowań. W dalszej części artykułu zobaczymy, jak szerokie możliwości ma ta płytka.

W zaprezentowanej konstrukcji do micro:bit podłączono macierz diod LED RGB (w postaci modułów WS2812B), joystick i potencjometr. Moduł micro:bit odczytuje sygnał z joysticka i steruje ruchami kursora (góra, dół, lewo i prawo). Możliwe jest nawigowanie kursorem do dowolnych punktów na panelu LED RGB o wymiarach 16×16. Płytka micro:bit może również odczytywać wartość analogową z potencjometru, aby określić, jaki ma być kolor kursora. W tym programie dostępnych jest 9 predefiniowanych kolorów (czerwony, pomarańczowy, żółty, zielony, niebieski, indygo, fioletowy, fioletowy i biały).

Aby narysować kropkę z wybranym kolorem, wystarczy nacisnąć przycisk joysticka. Aby skasować kropkę (co spowoduje wyłączanie danej diody LED), należy nacisnąć przycisk A na samym module micro:bit. Projekt ten dodaje też funkcję ukrywania kursora, gdy system jest bezczynny dłużej niż 10 sekund. Kursor pojawi się, gdy użytkownik przesunie kursor lub zmieni jego kolor. „Projekt ten zapewni dobre wyzwanie dla początkujących lub mniej doświadczonych użytkowników; co więcej, pomoże Ci odkryć potencjał programowania micro:bit i blokowego w bardziej złożonych projektach” – zachęca do powielania konstrukcji autor.

Potrzebne elementy

Do zestawienia systemu potrzebne będą następujące komponenty:

  • moduł micro:bit w wersji 1.x lub 2.x,
  • płytka rozszerzeń IObit dla micro:bit,
  • moduł joysticka (np. do modułów Arduino),
  • potencjometr 10 kΩ,
  • macierz 16×16 z diodami WS2812B,
  • kable połączeniowe: żeński-żeński, 20 cm, osiem sztuk; żeński-męski, 20 cm osiem sztuk,
  • kabel USB oraz ładowarka lub powerbank USB do zasilenia systemu.

Połączenia elektryczne

Chociaż micro:bit ma 3 duże piny wyjściowe (P0, P1 i P2), które można podłączyć do innych urządzeń za pomocą np. zacisku krokodylkowego, to w tym projekcie potrzebne jest więcej niż 3 piny. Dlatego autor zastosował kartę rozszerzeń dla micro:bit, aby zapewnić dostęp do wszystkich pozostałych pinów. Na rynku dostępne są różne opcje kart rozszerzeń, warunki, jakie muszą być spełnione dla tego projektu, obejmują:

  • zapewnienie zasilania 5 V dla macierzy LED RGB,
  • możliwość zasilania przez kabel USB,
  • wbudowany wyłącznik,
  • dostęp do wszystkich pinów na micro:bit, włącznie z wyjściami 3 V i GND (sygnał SVG lub VCC-GND),
  • niski koszt,
  • niewielki rozmiar.
Fotografia 1. Moduł rozszerzeń IObit

Ze wszystkich płytek rozszerzających, które spełniają wymienione kryteria, autor wybrał płytkę IObit (fotografia 1) ze względu na jej niewielkie wymiary oraz niski koszt – około 6,5 dolara (w Polsce dostępna za około 32 zł). Na rysunku 1 pokazano diagram połączeń poszczególnych elementów systemu. W dalszej części tekstu przyjrzymy się bliżej poszczególnym modułom.

Rysunek 1. Schemat połączenia elementów projektu

Płytka rozszerzeń

Płytka IObit ma dwie grupy pinów wyjściowych:

  • trzy czerwone piny po lewej stronie dostarczają napięcia 5 V, jakie jest potrzebne do zasilania macierzy RGB LED. Czarne piny to masa;
  • trzy rzędy pinów (żółte, czerwone i czarne) – żółte dołączone są do GPIO modułu micro:bit, a czerwone i czarne to, odpowiednio, zasilanie 3,3 V oraz masa.

By zasilać moduł micro:bit poprzez płytkę rozszerzeń, wystarczy dołączyć do niej kabel USB z źródłem zasilania (ładowarką lub powerbankiem) i nacisnąć przycisk zasilania na płytce.

Macierz LED

Z tyłu panelu LED znajdują się 3 grupy złączy. Przewody po prawej stronie mają wejście DIN do podłączenia do pinu 8 modułu micro:bit. Należy również doprowadzić zasilanie – 5 V i GND, do karty rozszerzeń IObit. Aby je połączyć, należy użyć przewodów połączeniowych żeński-męskich.

Diody WS2812 i inne podobne moduły RGB integrują w sobie trzy diody elektroluminescencyjne (czerwoną, zieloną i niebieską) oraz moduł sterujący – generator trzech przebiegów PWM, sprzęgnięty z rejestrem przesuwnym, podłączonym do pojedynczego wejścia cyfrowego. Wyjście przepełnienia rejestru podłączone jest do wyjścia diody.

Co daje taka konstrukcja? Pozwala na szeregowe łączenie ze sobą modułów RGB i sterowanie nimi za pomocą tylko jednego wyjścia cyfrowego z mikrokontrolera. Dzięki temu jednym pinem układu wysterować można bardzo dużą liczbę diod RGB w systemie. Zasada działania jest bardzo prosta – mikrokontroler wystawia na pinie sterującym dane szeregowo, a moduł RGB je odbiera. Pojedyncza dioda wymaga 24 bitów (3×8 bitów, po 8 na każdy kolor), a „nadmiar” bitów rejestr przesuwa dalej, do kolejnych diod poprzez wyjście Data Out. W macierzy LED wszystkie 256 diody są połączone szeregowo.

Potencjometr

Pin OTA to wyjście z potencjometru. Został podłączony w sposób taki, jak pokazano na schemacie – działa jak dzielnik napięcia. Skrajne piny podłączone są do zasilania i masy (3 V i GND), a środkowy podaje napięcie proporcjonalne do pozycji suwaka. Wyjście z dzielnika napięcia (potencjometru) należy podłączyć do wejścia analogowego w micro:bit, aby umożliwić układowi odczyt pozycji. W przypadku omawianego modułu jest to pin 0. Oczywiście trzeba pamiętać o podłączeniu linii masy i zasilania, aby dzielnik mógł poprawnie działać

Joystick

Joystick składa się z trzech głównych elementów:

  • dwóch potencjometrów, które wykorzystywane są do wykrywania/pomiaru wychylenia w osiach X oraz Y. Są one, analogicznie jak potencjometr powyżej, podłączone jako dzielniki napięcia, dzięki czemu potencjometr podaje dwa sygnały analogowe – VX oraz VY, proporcjonalne do położenia joysticka w obu osiach;
  • pojedynczego przycisku, który zwiera związane z nim wyjście (SW) do masy, gdy naciśnie się joystick centralnie.

Do podłączenia tego modułu do micro:bit potrzebne jest pięć przewodów żeński-żeński, którymi podłączamy do płytki rozszerzeń micro:bit sygnały w następujący sposób:

  • sygnały pozycji VX i VY do wejść analogowych – pinów 1 oraz 2,
  • SW do wejścia cyfrowego – pinu 12,
  • zasilanie joysticka podłączamy do wyjścia 3 V z płytki rozszerzeń. Nie należy podłączać go do 5 V – można w ten sposób uszkodzić mikrokontroler,
  • GND do masy systemu na płytce.

Dodatkowe uwagi

Pin zasilający 5 V na module rozszerzeń micro:bit zostanie użyty do zasilenia diod macierzy RGB LED – wymagają one takiego napięcia do działania. Do pinu zasilana na joysticku i innych elementach nie podłączamy napięcia 5 V, pomimo że na module może widnieć taki napis – dzielnik napięcia podłączony pomiędzy 5 V a masę może dać na wyjściu nawet do 5 V, co znacznie przekracza maksymalne dopuszczalne napięcie wejściowe ADC w micro:bit, które równe jest 3,6 V.

Oprogramowanie

Aby stworzyć pokazany na rysunku 2 program, należy odwiedzić witrynę Microsoft Makecode dla micro:bit (https://makecode.microbit.org/). Jest to sieciowe środowisko programistyczne, które zawiera graficzny język programowania, przeznaczony do nauki algorytmów. Może on być uruchamiany na wielu platformach sprzętowych, a jedną z nich jest moduł micro:bit. Po wejściu na stronę należy kliknąć w przycisk nowego projektu „New Project”. Zostaniemy poproszeni o podanie nazwy projektu. Po wprowadzeniu nazwy, pod jaką zapisywany jest projekt, można przejść do tworzenia samej aplikacji.

Rysunek 2. Graficzny kod programu sterującego znikopisem

Pierwszą rzeczą, którą trzeba zrobić, jest zainstalowanie rozszerzenia dla modułów joysticka i macierzy RGB LED. Najpierw klikamy w przycisk zaawansowanych ustawień – Advanced, aby wyświetlić więcej poleceń, a następnie klikamy w menu rozszerzeń – Extension. W oknie, które wtedy się pojawi, należy wprowadzić adres URL rozszerzeń. Są one zlokalizowane w repozytoriach na GitHubie, w związku z tym wprowadzamy każdy z podanych powyżej adresów i zatwierdzamy, a następnie powtarzamy czynność, aż do zainstalowania wszystkich wymaganych modułów:

Teraz rozszerzenia są zainstalowane i można korzystać z oferowanych przez nie poleceń.

Program został utworzony w graficznym języku programowania w środowisku Makecode. Graficzny oznacza, że zamiast klasycznego tekstowego zapisu programu, jest on reprezentowany w postaci graficznej. Przykładem graficznego zapisu programu jest znany szeroko schemat blokowy. Makecode reprezentuje hybrydowe podejście – sekwencyjnie ułożone bloki reprezentują różne struktury, ale w ich wnętrzu w dużej mierze znajduje się tekst, który może być zrozumiały dla każdego, kto umie programować w dowolnym języku wysokiego poziomu.

Jak widać na rysunku 2, kod podzielony jest na trzy niezależne części. Po lewej stronie znajduje się blok opisany jako on start, natomiast po prawej stronie większy z bloków to forever. To konstrukcja znana każdemu użytkownikowi środowiska Arduino, gdzie domyślnie IDE generuje dwa podobne bloki kodu – funkcje setup() oraz loop().

W obu przypadkach jedna z nich (on start/setup) wykonywana jest jednokrotnie, po uruchomieniu się mikrokontrolera, a druga pracuje w nieskończonej pętli. Trzeci, mniejszy blok, jaki widoczny jest w tym programie, to przerwanie – funkcja ta uruchomi się, gdy spełniony zostanie zapisany tam warunek – naciśnięty zostanie przycisk A.
Funkcja on start zawiera w sobie wszystkie konieczne konfiguracje mikrokontrolera. Po uruchomieniu inicjalizuje ona funkcję do obsługi joysticka, definiując piny, gdzie dołączono linie X, Y oraz SW, a następnie inicjalizuje macierz LED. Funkcji podać należy pin wejściowy, wielkość macierzy oraz format zapisu koloru (RGB). Następnie definiowana jest macierz pixel dla pikseli wyświetlacza – inicjalizowana jest ona wartościami –1 w każdej komórce 256 razy, a następnie jest czyszczona (to po to, aby zdefiniować jej wielkość).

Następnie ustawiana jest pozycja kursora oraz definiowany jest wektor kolorów do wyboru. Po zakończeniu działania tej funkcji program przechodzi do nieskończonej pętli.

Funkcja forever jest nieskończoną pętlą – po dojściu do końca rozpoczyna się ona ponownie. W funkcji tej program monitoruje wartości pochodzące z przetwornika analogowo-cyfrowego, który monitoruje napięcia z joysticka. Jeśli kod zwrócony przez ADC jest poniżej 330 lub powyżej 660 (ADC jest 10-bitowy, co oznacza, że zakres od 0 V do 3 V pokrywają 1024 kody), to, odpowiednio, pozycja w danej osi jest dekrementowana lub inkrementowana o jeden. Dodatkowo, jeśli przycisk SW zostanie wciśnięty, to system ustawia piksel w odpowiednim kolorze, zgodnie z wybranymi ustawieniami.

Naciśnięcie przycisku A powoduje skasowanie obecnego piksela, w jego pozycji w macierzy ustawiana jest wartość –1, co oznacza, że jest on zupełnie zgaszony. Wartość ta zostanie przesłana z macierzy pixel do wyświetlacza matrycowego RGB LED przy najbliższej iteracji pętli forever – detekcja naciśnięcia przycisku A jest asynchroniczna – funkcja, która obsługuje kasowanie pikseli, uruchamiana jest natychmiastowo po wykryciu przyciśnięcia A.

Nikodem Czechowski, EP

Strona źródłowa projektu: https://bit.ly/3lXE4XE

Artykuł ukazał się w
Elektronika Praktyczna
listopad 2021
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik listopad 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio listopad - grudzień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje październik 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna listopad 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich listopad 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów