We hebben een serie Raspberry Pi-tutorials gemaakt, waarin we de interface van Raspberry Pi met alle basiscomponenten zoals LED, LCD, knop, DC-motor, servomotor, stappenmotor, ADC, schuifregister, enz. Hebben behandeld. We hebben ook publiceerde enkele eenvoudige Raspberry Pi-projecten voor beginners, samen met enkele goede IoT-projecten. Vandaag gaan we, in het verlengde van deze tutorials, de 8x8 LED Matrix Module van Raspberry Pi besturen. We zullen een python-programma schrijven om karakters op de matrixmodule te tonen.
Bekijk ook Interfacing 8x8 LED Matrix met Arduino en LED Matrix met AVR Microcontorller.
Vereiste componenten:
Hier gebruiken we Raspberry Pi 2 Model B met Raspbian Jessie OS. Alle basis hardware- en softwarevereisten zijn eerder besproken, je kunt het opzoeken in de Raspberry Pi Introductie en Raspberry PI LED Knipperend om aan de slag te gaan, behalve dat we nodig hebben:
- Raspberry Pi-bord
- Stroomvoorziening (5v)
- 1000uF condensator (aangesloten via voeding)
- 1KΩ weerstand (8 stuks)
8x8 LED Matrix-module:
Een 8 * 8 LED-matrixmodule bevat 64 LED's (Light Emitting Diodes) die zijn gerangschikt in de vorm van een matrix, vandaar de naam LED-matrix. Deze compacte modules zijn verkrijgbaar in verschillende maten en veel kleuren. Men kan ze op gemak kiezen. De PIN-configuratie van de module is zoals weergegeven in de afbeelding. Houd er rekening mee dat de pin-outs van de module niet in orde zijn, dus de pincodes moeten exact worden genummerd zoals weergegeven in de afbeelding om fouten te voorkomen.
Er zijn 8 + 8 = 16 gemeenschappelijke aansluitingen in de LED Matrix-module. Over hen heen hebben we 8 gemeenschappelijke positieve aansluitingen en 8 gemeenschappelijke negatieve aansluitingen, in de vorm van 8 rijen en 8 kolommen, voor het aansluiten van 64 LED's in matrixvorm. Als de module zou worden getekend in de vorm van een schakelschema, hebben we een afbeelding zoals hieronder weergegeven:
Dus voor 8 rijen hebben we 8 gemeenschappelijke positieve terminals (9, 14, 8, 12, 17, 2, 5). Beschouw de eerste rij, de LED's van D1 tot D8 hebben een gemeenschappelijke positieve pool en de pin wordt naar buiten gebracht bij PIN9 van de LED Matrix-module. Als we willen dat een of alle LED's in een RIJ AAN zijn, moet de bijbehorende pin van de LED-MODULE worden gevoed met + 3.3v.
Net als bij gewone positieve terminals, hebben we 8 gemeenschappelijke negatieve terminals als kolommen (13, 3, 4, 10, 6, 11, 15, 16). Voor het aarden van elke LED in elke kolom moet de respectieve gemeenschappelijke minpool worden geaard.
Circuit uitleg:
De verbindingen die tussen Raspberry Pi en LED-matrixmodule worden gemaakt, worden in onderstaande tabel weergegeven.
LED Matrix Module Pin nr. |
Functie |
Raspberry Pi GPIO Pin nr. |
13 |
POSITIEF 0 |
GPIO12 |
3 |
POSITIEF 1 |
GPIO22 |
4 |
POSITIEF 2 |
GPIO27 |
10 |
POSITIEF 3 |
GPIO25 |
6 |
POSITIEF 4 |
GPIO17 |
11 |
POSITIEF 5 |
GPIO24 |
15 |
POSITIEF 6 |
GPIO23 |
16 |
POSITIEF 7 |
GPIO18 |
9 |
NEGATIEF 0 |
GPIO21 |
14 |
NEGATIEF 1 |
GPIO20 |
8 |
NEGATIEF 2 |
GPIO26 |
12 |
NEGATIEF 3 |
GPIO16 |
1 |
NEGATIEF 4 |
GPIO19 |
7 |
NEGATIEF 5 |
GPIO13 |
2 |
NEGATIEF 6 |
GPIO6 |
5 |
NEGATIEF 7 |
GPIO5 |
Hier is het laatste schakelschema voor Interfacing 8x8 LED Matrix met Raspberry Pi:
Werkende uitleg:
Hier zullen we de multiplextechniek gebruiken om tekens op de 8x8 LED Matrix-module weer te geven. Dus laten we deze multiplexing in detail bespreken. Stel dat als we LED D10 in de matrix willen inschakelen, we de PIN14 van de module moeten voeden en de PIN3 van de module moeten aarden. Met deze LED gaat de D10 AAN zoals weergegeven in onderstaande afbeelding. Dit moet ook eerst worden gecontroleerd, zodat MATRIX weet dat alles in orde is.
Stel dat als we D1 willen inschakelen, we PIN9 van de matrix moeten voeden en de PIN13 moeten aarden. Met die LED gaat D1 branden. De huidige richting wordt in dit geval weergegeven in de onderstaande afbeelding.
Nu voor het lastige deel, bedenk dat we zowel D1 als D10 tegelijkertijd willen inschakelen. We moeten dus zowel PIN9, PIN14 van stroom voorzien als zowel PIN13 als PIN3 aarden. Hierdoor worden de LED D1 en D10 ingeschakeld, maar daarnaast worden ook de LED D2 en D9 ingeschakeld. Het is omdat ze gemeenschappelijke terminals delen. Dus als we de leds langs de diagonaal willen inschakelen, zullen we gedwongen worden om onderweg alle leds aan te zetten. Dit wordt weergegeven in onderstaande afbeelding:
Om dit probleem te vermijden, gebruiken we een techniek genaamd Multiplexing. We hebben deze Multiplexing-techniek ook besproken terwijl we 8x8 LED Matrix met AVR verbinden, hier leggen we het opnieuw uit. Dezelfde multiplextechniek wordt ook gebruikt in Scrolling Text op 8x8 LED-matrix met Arduino en met AVR-microcontroller.
Het menselijk oog kan een frequentie van meer dan 30 Hz niet vastleggen. Dat wil zeggen als een LED continu AAN en UIT gaat met een snelheid van 30Hz of meer. Het oog ziet de LED als continu AAN. Dit is echter niet het geval en de LED zal constant AAN en UIT gaan. Deze techniek heet Multiplexing.
Laten we bijvoorbeeld zeggen dat we alleen LED D1 en LED D10 willen inschakelen zonder D2 en D9 in te schakelen. De truc is dat we eerst alleen LED D1 van stroom voorzien met behulp van PIN 9 & 13 en wachten op 1 mSEC, en dan zullen we het UIT zetten. Vervolgens zullen we LED D10 van stroom voorzien met behulp van PIN 14 & 3 en wachten op 1 mSEC, waarna deze wordt uitgeschakeld. De cyclus gaat continu met hoge frequentie en D1 & D10 zullen snel aan en uit gaan en beide LED's zullen voor ons oog continu AAN lijken te zijn. Dit betekent dat we slechts één rij (LED) tegelijk van stroom voorzien, waardoor de kans dat andere LED's in andere rijen worden ingeschakeld, wordt geëlimineerd. We zullen deze techniek gebruiken om alle karakters te tonen.
We kunnen het verder begrijpen aan de hand van een voorbeeld, bijvoorbeeld als we "A" op de matrix willen weergeven, zoals hieronder weergegeven:
Zoals gezegd zullen we een rij in een oogwenk AAN zetten, Op t = 0m SEC, is PIN09 ingesteld op HOOG (andere RIJ-pinnen zijn op dit moment LAAG), PIN3, PIN4, PIN10, PIN6, PIN11, PIN15 zijn geaard (andere KOLOM-pinnen zijn op dit moment HOOG)
Op t = 1m SEC, PIN14 is ingesteld HOOG (andere RIJ pinnen zijn momenteel LAAG), PIN13, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15, PIN16 zijn geaard (andere KOLOM pinnen zijn op dit moment HOOG)
Op t = 2m SEC, PIN08 is ingesteld op HOOG (andere RIJ-pinnen zijn op dit moment LAAG), op dit moment zijn PIN13, PIN3, PIN15, PIN16 geaard (andere KOLOM-pinnen zijn op dit moment HOOG)
Op t = 3m SEC, PIN12 is ingesteld HOOG (andere RIJ pinnen zijn op dit moment LAAG) op dit moment, PIN13, PIN3, PIN15, PIN16 zijn geaard (andere KOLOM pinnen zijn op dit moment HOOG)
Op t = 4m SEC, PIN01 is ingesteld op HOOG (andere RIJ-pinnen zijn op dit moment LAAG), PIN13, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15, PIN16 zijn geaard (andere KOLOM-pinnen zijn op dit moment HOOG))
Op t = 5m SEC, PIN07 is ingesteld op HOOG (andere RIJ-pinnen zijn op dit moment LAAG), PIN13, PIN3, PIN4, PIN10, PIN6, PIN11, PIN15, PIN16 zijn geaard (andere KOLOM-pinnen zijn op dit moment HOOG))
Op t = 6m SEC, PIN02 is ingesteld HOOG (andere RIJ pinnen zijn op dit moment LAAG) op dit moment, PIN13, PIN3, PIN15, PIN16 zijn geaard (andere COLUMN pinnen zijn op dit moment HOOG)
Op t = 7m SEC, is PIN05 ingesteld op HOOG (andere RIJ-pinnen zijn op dit moment LAAG) op dit moment, zijn PIN13, PIN3, PIN15, PIN16 geaard (andere KOLOM-pinnen zijn op dit moment HOOG)
Bij deze snelheid ziet u dat het display continu een “A” -teken toont, zoals weergegeven in de afbeelding.
Het Python-programma voor het weergeven van tekens op LED-matrix met Raspberry Pi wordt hieronder gegeven. Programma wordt goed uitgelegd door opmerkingen. Poortwaarden voor elk teken worden in het programma gegeven. Je kunt alle karakters laten zien die je wilt door gewoon de 'pinp'- waarden in de' for-loops 'in het gegeven programma te wijzigen. Bekijk ook de demovideo hieronder.