Vi har oprettet en række Raspberry Pi Tutorials, hvor vi har dækket Interfacing af Raspberry Pi med alle de grundlæggende komponenter som LED, LCD, knap, DC-motor, Servomotor, trinmotor, ADC, skiftregister osv. offentliggjorde nogle enkle Raspberry Pi-projekter til begyndere sammen med nogle gode IoT-projekter. I dag, i forlængelse af disse tutorials, skal vi Control 8x8 LED Matrix Module af Raspberry Pi. Vi skriver et pythonprogram for at vise tegn på matrixmodulet.
Kontroller også Interfacing 8x8 LED Matrix med Arduino og LED Matrix med AVR Microcontorller.
Nødvendige komponenter:
Her bruger vi Raspberry Pi 2 Model B med Raspbian Jessie OS. Alle de grundlæggende hardware- og softwarekrav er tidligere diskuteret, du kan slå det op i Raspberry Pi Introduktion og Raspberry PI LED Blinker for at komme i gang, bortset fra at vi har brug for:
- Raspberry Pi Board
- Strømforsyning (5v)
- 1000uF kondensator (tilsluttet på tværs af strømforsyningen)
- 1KΩ modstand (8 stykker)
8x8 LED-matrixmodul:
Et 8 * 8 LED-matrixmodul indeholder 64 LED (lysemitterende dioder), der er arrangeret i form af en matrix, hvorfor navnet er LED-matrix. Disse kompakte moduler fås i forskellige størrelser og mange farver. Man kan vælge dem på bekvemmelighed. Modulets PIN-konfiguration er som vist på billedet. Husk at modulets pinouts ikke er i orden, så pinkoderne skal nummereres nøjagtigt som vist på billedet for at undgå fejl.
Der er 8 + 8 = 16 fælles terminaler i LED Matrix-modulet. Over dem har vi 8 fælles positive terminaler og 8 fælles negative terminaler i form af 8 rækker og 8 kolonner til tilslutning af 64 LED i matrixform. Hvis modulet skulle tegnes i form af kredsløbsdiagram, får vi et billede som vist nedenfor:
Så i 8 rækker har vi 8 fælles positive terminaler (9, 14, 8, 12, 17, 2, 5). Overvej den første række, LED'erne fra D1 til D8 har en fælles positiv terminal, og stiften bringes ud ved PIN9 i LED Matrix-modulet. Når vi ønsker, at en eller alle lysdioder i en række skal være tændt, skal den tilsvarende pin på LED-MODUL have strøm med + 3.3v.
I lighed med almindelige positive terminaler har vi 8 fælles negative terminaler som kolonner (13, 3, 4, 10, 6, 11, 15, 16). Til jording af enhver LED i en hvilken som helst kolonne, skal den respektive fælles negative terminal jordes.
Forklaring af kredsløb:
Forbindelserne mellem Raspberry Pi og LED-matrixmodul er vist i nedenstående tabel.
LED-matrixmodul Pin nr. |
Fungere |
Raspberry Pi GPIO pin nr. |
13 |
POSITIV0 |
GPIO12 |
3 |
POSITIV1 |
GPIO22 |
4 |
POSITIV2 |
GPIO27 |
10 |
POSITIV 3 |
GPIO25 |
6 |
POSITIV 4 |
GPIO17 |
11 |
POSITIV 5 |
GPIO24 |
15 |
POSITIV 6 |
GPIO23 |
16 |
POSITIV 7 |
GPIO18 |
9 |
NEGATIV0 |
GPIO21 |
14 |
NEGATIV1 |
GPIO20 |
8 |
NEGATIV2 |
GPIO26 |
12 |
NEGATIV 3 |
GPIO16 |
1 |
NEGATIV4 |
GPIO19 |
7 |
NEGATIV5 |
GPIO13 |
2 |
NEGATIV6 |
GPIO6 |
5 |
NEGATIV7 |
GPIO5 |
Her er det endelige kredsløbsdiagram for Interfacing 8x8 LED Matrix med Raspberry Pi:
Arbejdsforklaring:
Her bruger vi Multiplexing Technique til at vise tegn på 8x8 LED Matrix Module. Så lad os diskutere om denne multipleksering i detaljer. Sig, hvis vi vil tænde LED D10 i matrixen, er vi nødt til at tænde for modulet PIN14 og jordforbinde modulets PIN3. Med denne LED tænder D10 som vist i nedenstående figur. Dette skal også kontrolleres først for MATRIX at vide, at alt er i orden.
Sig nu, hvis vi vil tænde D1, er vi nødt til at tænde for matrixens PIN9 og jorde PIN13. Med den lyser LED D1. Den aktuelle retning i dette tilfælde er vist i nedenstående figur.
Nu for den vanskelige del, overvej at vi vil tænde både D1 og D10 på samme tid. Så vi skal tænde både PIN9, PIN14 og jord begge PIN13, PIN3. Dette tænder LED D1 og D10, men sammen med det tænder også LED D2 og D9. Det er fordi de deler fælles terminaler. Så hvis vi vil tænde lysdioderne langs diagonalen, bliver vi tvunget til at tænde alle lysdioderne undervejs. Dette er vist i nedenstående figur:
For at undgå dette problem bruger vi en teknik kaldet Multiplexing. Vi har også diskuteret denne multipleksningsteknik, mens vi interfacer 8x8 LED-matrix med AVR, her forklarer vi igen. Den samme multipleksningsteknik bruges også i Scrolling Text på 8x8 LED-matrix med Arduino og med AVR-mikrocontroller.
Det menneskelige øje kan ikke fange en frekvens på mere end 30 Hz. Det er, hvis en LED tændes og slukkes kontinuerligt med en hastighed på 30 Hz eller mere. Øjet ser lysdioden kontinuerligt TÆNDT. Dette er imidlertid ikke tilfældet, og LED vil faktisk tænde og slukke konstant. Denne teknik kaldes Multiplexing.
Lad os f.eks. Sige, at vi kun vil tænde LED D1 og LED D10 uden at tænde D2 og D9. Trick er, vi leverer først strøm til kun LED D1 ved hjælp af PIN 9 & 13 og venter på 1mSEC, og derefter slukker vi den. Derefter leverer vi strøm til LED D10 ved hjælp af PIN 14 & 3 og venter på 1mSEC og slukker den derefter. Cyklussen går kontinuerligt med høj frekvens, og D1 & D10 tændes og slukkes hurtigt, og begge LED'er ser ud til at være kontinuerligt TÆND for vores øje. Betyder, at vi kun leverer strøm til den ene række (LED) ad gangen, hvilket eliminerer chancerne for at tænde andre lysdioder i andre rækker. Vi bruger denne teknik til at vise alle tegn.
Vi kan yderligere forstå det ved et eksempel, som hvis vi vil vise “A” på matrixen, som vist nedenfor:
Som sagt vil vi tænde en række på et øjeblik, Ved t = 0m SEC er PIN09 indstillet HIGH (andre ROW-pins er LAV på dette tidspunkt) på dette tidspunkt, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15 er jordforbundet (andre COLUMN-stifter er HIGH på dette tidspunkt)
Ved t = 1 m SEC er PIN14 indstillet HIGH (andre ROW-pins er LAV på dette tidspunkt) på dette tidspunkt, PIN13, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15, PIN16 er jordforbundet (andre COLUMN-stifter er HIGH på dette tidspunkt)
Ved t = 2m SEC er PIN08 indstillet HIGH (andre ROW-pins er LOW på dette tidspunkt) på dette tidspunkt, PIN13, PIN3, PIN15, PIN16 er jordforbundet (andre COLUMN-pins er HIGH på dette tidspunkt)
Ved t = 3m SEC er PIN12 indstillet HIGH (andre ROW-pins er LOW på dette tidspunkt) på dette tidspunkt, PIN13, PIN3, PIN15, PIN16 er jordforbundet (andre COLUMN-pins er HIGH på dette tidspunkt)
Ved t = 4m SEC er PIN01 indstillet HIGH (andre ROW-pins er LAV på dette tidspunkt) på dette tidspunkt er PIN13, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15, PIN16 jordforbundet (andre COLUMN-stifter er HIGH på dette tidspunkt)
Ved t = 5m SEC er PIN07 indstillet HIGH (andre ROW-pins er LAV på dette tidspunkt) på dette tidspunkt er PIN13, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15, PIN16 jordforbundet (andre COLUMN-stifter er HIGH på dette tidspunkt)
Ved t = 6m SEC er PIN02 indstillet HIGH (andre ROW-pins er LAV på dette tidspunkt) på dette tidspunkt, PIN13, PIN3, PIN15, PIN16 er jordforbundet (andre COLUMN-pins er HIGH på dette tidspunkt)
Ved t = 7m SEC er PIN05 indstillet HIGH (andre ROW-pins er LOW på dette tidspunkt) på dette tidspunkt, PIN13, PIN3, PIN15, PIN16 er jordforbundet (andre COLUMN-pins er HIGH på dette tidspunkt)
Ved denne hastighed vil displayet ses som kontinuerligt viser “A” -tegnet som vist i figuren.
Den Python-programmet til at vise tegn på LED Matrix hjælp Raspberry Pi er angivet nedenfor. Programmet er godt forklaret med kommentarer. Portværdier for hvert tegn er angivet i programmet. Du kan vise hvilke tegn du vil ved blot at ændre 'pinp' værdierne i 'for loops' i det givne program. Tjek også demo-videoen nedenfor.