Stworzyliśmy serię samouczków Raspberry Pi, w których omówiliśmy Łączenie Raspberry Pi ze wszystkimi podstawowymi komponentami, takimi jak LED, LCD, przycisk, silnik prądu stałego, silnik serwo, silnik krokowy, ADC, rejestr zmiany biegów itp. opublikował kilka prostych projektów Raspberry Pi dla początkujących, a także kilka dobrych projektów IoT. Dzisiaj, kontynuując te samouczki, zajmiemy się sterowaniem modułem matrycy LED 8x8 przez Raspberry Pi. Napiszemy program w Pythonie, który pokaże znaki w module matrix.
Sprawdź także łączenie matrycy LED 8x8 z Arduino i matrycę LED z mikrokontorgerem AVR.
Wymagane składniki:
Tutaj używamy Raspberry Pi 2 Model B z Raspbian Jessie OS. Wszystkie podstawowe wymagania sprzętowe i programowe zostały wcześniej omówione, możesz je sprawdzić we wprowadzeniu do Raspberry Pi i Miga dioda LED Raspberry PI, aby rozpocząć, poza tym, czego potrzebujemy:
- Płytka Raspberry Pi
- Zasilanie (5 V)
- Kondensator 1000 uF (podłączony przez zasilacz)
- Rezystor 1KΩ (8 sztuk)
Moduł matrycy LED 8x8:
Moduł matrycy LED 8 * 8 zawiera 64 diody LED (diody elektroluminescencyjne) ułożone w formie matrycy, stąd nazwa matryca LED. Te kompaktowe moduły są dostępne w różnych rozmiarach i wielu kolorach. Można je wybrać dla wygody. Konfiguracja PIN modułu jest pokazana na rysunku. Należy pamiętać, że wyprowadzenia modułu nie są w porządku, więc PINy powinny być ponumerowane dokładnie tak, jak pokazano na rysunku, aby uniknąć błędów.
W module LED Matrix znajduje się 8 + 8 = 16 wspólnych zacisków. Nad nimi mamy 8 wspólnych zacisków dodatnich i 8 wspólnych zacisków ujemnych, w postaci 8 rzędów i 8 kolumn, do podłączenia 64 diod LED w postaci matrycy. Jeśli moduł miałby być narysowany w formie schematu obwodu, otrzymamy obrazek jak poniżej:
Tak więc dla 8 rzędów mamy 8 wspólnych zacisków dodatnich (9, 14, 8, 12, 17, 2, 5). Rozważmy pierwszy rząd, diody LED od D1 do D8 mają wspólny zacisk dodatni, a pin jest wyprowadzony na PIN9 modułu LED Matrix. Gdy chcemy, aby jedna lub wszystkie diody w RZĘDZIE świeciły, odpowiedni pin MODUŁU LED powinien być zasilany napięciem + 3,3V.
Podobnie jak w przypadku zwykłych zacisków dodatnich, mamy 8 wspólnych zacisków ujemnych jako kolumny (13, 3, 4, 10, 6, 11, 15, 16). Aby uziemić dowolną diodę LED w dowolnej kolumnie, należy uziemić odpowiedni wspólny zacisk ujemny.
Objaśnienie obwodu:
Połączenia, które są wykonywane między Raspberry Pi a modułem matrycy LED pokazano w poniższej tabeli.
Moduł matrycy LED Nr pinu |
Funkcjonować |
Raspberry Pi GPIO Pin nr. |
13 |
POZYTYWNE0 |
GPIO12 |
3 |
POZYTYWNE 1 |
GPIO22 |
4 |
POZYTYWNE 2 |
GPIO27 |
10 |
POZYTYWNE 3 |
GPIO25 |
6 |
POZYTYWNE 4 |
GPIO17 |
11 |
POZYTYWNE 5 |
GPIO24 |
15 |
POZYTYWNE 6 |
GPIO23 |
16 |
POZYTYWNE 7 |
GPIO18 |
9 |
NEGATYWNY0 |
GPIO21 |
14 |
NEGATYWNY 1 |
GPIO20 |
8 |
NEGATYWNY 2 |
GPIO26 |
12 |
NEGATYWNY 3 |
GPIO16 |
1 |
NEGATYWNY 4 |
GPIO19 |
7 |
NEGATYWNY 5 |
GPIO13 |
2 |
NEGATYWNY 6 |
GPIO6 |
5 |
NEGATYWNY 7 |
GPIO5 |
Oto ostateczny schemat obwodu dla połączenia matrycy LED 8x8 z Raspberry Pi:
Objaśnienie robocze:
Tutaj użyjemy techniki multipleksowania, aby pokazać znaki na module matrycy LED 8x8. Omówmy więc szczegółowo to multipleksowanie. Powiedzmy, że jeśli chcemy włączyć diodę D10 w matrycy, musimy zasilić PIN14 modułu i uziemić PIN3 modułu. Za pomocą tej diody D10 zaświeci się, jak pokazano na poniższym rysunku. Należy to również najpierw sprawdzić, aby MATRIX wiedział, że wszystko jest w porządku.
Teraz powiedzmy, że jeśli chcemy włączyć D1, musimy zasilić PIN9 matrycy i uziemić PIN13. Z tą diodą LED D1 będzie się świecić. Aktualny kierunek w tym przypadku pokazano na poniższym rysunku.
Teraz, jeśli chodzi o trudną część, zastanów się, czy chcemy jednocześnie włączyć D1 i D10. Powinniśmy więc zasilić oba PIN9, PIN14 i uziemić oba PIN13, PIN3. Spowoduje to włączenie diod LED D1 i D10, ale wraz z tym zapali również diody D2 i D9. To dlatego, że mają wspólne terminale. Jeśli więc zechcemy zapalić diody po przekątnej, będziemy zmuszeni zapalić wszystkie diody po drodze. Pokazuje to poniższy rysunek:
Aby uniknąć tego problemu, używamy techniki zwanej multipleksowaniem. Omówiliśmy również tę technikę multipleksowania podczas łączenia matrycy LED 8x8 z AVR, tutaj ponownie wyjaśniamy. Ta sama technika multipleksowania jest również stosowana w przewijaniu tekstu na matrycy LED 8x8 z Arduino i mikrokontrolerem AVR.
Oko ludzkie nie może wychwycić częstotliwości większej niż 30 Hz. To znaczy, jeśli dioda LED włącza się i wyłącza w sposób ciągły z częstotliwością 30 Hz lub więcej. Oko widzi, że dioda LED jest stale włączona. Jednak tak nie jest i dioda LED będzie się stale włączać i wyłączać. Ta technika nazywa się multipleksowaniem.
Powiedzmy na przykład, że chcemy włączyć tylko diody LED D1 i LED D10 bez włączania D2 i D9. Sztuczka polega na tym, że najpierw dostarczymy zasilanie tylko do diody LED D1 za pomocą PIN 9 i 13 i poczekamy 1 ms, a następnie wyłączymy ją. Następnie zasilimy diodę LED D10 za pomocą PINów 14 i 3 i poczekamy 1 ms, a następnie ją wyłączymy. Cykl przebiega w sposób ciągły z wysoką częstotliwością, a D1 i D10 będą się szybko włączać i wyłączać, a obie diody LED będą wydawać się stale WŁĄCZONE dla naszego oka. Oznacza to, że w danym momencie zasilamy tylko jeden rząd (diodę LED), co eliminuje możliwość włączenia innych diod LED w innych rzędach. Użyjemy tej techniki, aby pokazać wszystkie postacie.
Możemy to lepiej zrozumieć na jednym przykładzie, na przykład jeśli chcemy wyświetlić „A” na matrycy, jak pokazano poniżej:
Jak powiedziano, natychmiast włączymy jeden wiersz, W momencie t = 0 m SEC, PIN09 jest ustawiony na WYSOKI (inne piny ROW są w tym czasie NISKIE), PIN3, PIN4, PIN10, PIN6, PIN11, PIN15 są uziemione (inne piny COLUMN są w tym czasie WYSOKIE)
W momencie t = 1m SEC, PIN14 jest ustawiony na WYSOKI (inne piny ROW są w tym czasie NISKIE), PIN13, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15, PIN16 są uziemione (inne piny KOLUMNY są w tym czasie WYSOKIE)
Przy t = 2m SEC, PIN08 jest ustawiony na WYSOKI (inne piny ROW są w tym czasie NISKIE), PIN13, PIN3, PIN15, PIN16 są uziemione (inne piny KOLUMNY są w tym czasie WYSOKIE)
W momencie t = 3m SEC, PIN12 jest ustawiony na WYSOKI (inne piny ROW są w tym czasie NISKIE), PIN13, PIN3, PIN15, PIN16 są uziemione (inne piny KOLUMNY są w tym czasie WYSOKIE)
W momencie t = 4 m SEC, PIN01 jest ustawiony na WYSOKI (inne piny ROW są w tym czasie NISKIE), PIN13, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15, PIN16 są uziemione (inne piny KOLUMNY są w tym czasie WYSOKIE)
W momencie t = 5 m SEC, PIN07 jest ustawiony na WYSOKI (inne piny ROW są w tym czasie NISKIE), PIN13, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15, PIN16 są uziemione (inne piny KOLUMNY są w tym czasie WYSOKIE)
Przy t = 6 m SEC, PIN02 jest ustawiony na WYSOKI (inne piny ROW są w tym czasie NISKIE), PIN13, PIN3, PIN15, PIN16 są uziemione (inne piny KOLUMNY są w tym czasie WYSOKIE)
W momencie t = 7 m SEC, PIN05 jest ustawiony na WYSOKI (inne piny ROW są w tym czasie NISKIE), PIN13, PIN3, PIN15, PIN16 są uziemione (inne piny KOLUMNY są w tym czasie WYSOKIE)
Przy tej prędkości wyświetlacz będzie wyświetlany jako ciągły znak „A”, jak pokazano na rysunku.
Program w Pythonie do wyświetlania znaków na matrycy LED za pomocą Raspberry Pi jest podany poniżej. Program jest dobrze wyjaśniony komentarzami. Wartości portów dla każdego znaku są podane w programie. Możesz pokazać dowolne znaki, po prostu zmieniając wartości „pinp” w „pętlach for” w danym programie. Sprawdź również wideo demonstracyjne poniżej.