In deze tutorial gaan we een 8x8 LED Matrix Scrolling Display ontwerpen met Arduino Uno, die scrollende alfabetten laat zien.
8x8 LED Matrix bevat 64 LED's (Light Emitting Diodes) die gerangschikt zijn in de vorm van een matrix, vandaar de naam LED matrix. We gaan deze Matrix maken door deze 64 LED's op het perfboard of DOT PCB te solderen. De leds kunnen elke kleur hebben, kies degene die bij u verkrijgbaar zijn. Vervolgens zullen we een programma voor Arduino schrijven om deze 64 LED-matrix aan te sturen. Volgens het programma voedt de UNO geschikte LED's om karakters op scrollende wijze weer te geven.
Vereiste componenten:
- Arduino Uno
- 64 leds
- Perfboard met ander soldeergereedschap
- 1KΩ weerstand (8 stuks)
- Voeding (5v)
Circuit en werkuitleg:
Er zijn 64 LED's gerangschikt in een matrixvorm. We hebben dus 8 kolommen en 8 rijen. Over die rijen en kolommen worden alle positieve klemmen op een rij samengebracht. Voor elke rij is er één gemeenschappelijke positieve klem voor alle 8 leds in die rij. Het wordt getoond in onderstaande figuur,
Dus voor 8 rijen hebben we 8 gemeenschappelijke positieve terminals. Beschouw de eerste rij, zoals te zien in de afbeelding, 8 LED's van D57 tot D64 hebben een gemeenschappelijke positieve pool en worden aangeduid met 'POSITIVE0'. Als we nu een of alle LED's in de eerste RIJ van matrix willen laten gloeien, dan moeten we de PIN0 van LED Matrix voeden. Evenzo, als we een LED (of alle) in een RIJ willen laten gloeien, moeten we de overeenkomstige Common Positive Terminal Pin van die respectieve rij van stroom voorzien.
Dit is nog niet voorbij en alleen de MATRIX ROWS met positieve aanvoer verlaten levert niets op. We moeten de negatieven van de LED's aarden om ze te laten gloeien. Dus in de 8x8 LED-matrix worden alle negatieve aansluitingen van de LED's in een kolom samengebracht om acht gemeenschappelijke negatieve aansluitingen te vormen, zoals alle negatieve aansluitingen in de eerste kolom met elkaar zijn verbonden met de PIN-A1 (NEGATIVE7). Dit wordt weergegeven in onderstaande afbeelding:
Let op deze pinnen tijdens het solderen van de LED's op Perfboard.
Als we nu een LED in de eerste kolom moeten aarden, zullen we de PIN-A1 (NEGATIVE7) van de MATRIX aarden en alle LED's in de eerste kolom aarden. Hetzelfde proces geldt voor alle andere zeven gemeenschappelijke negatieve kolommen.
Sinds nu weet je hoe Common Positive en Common Negative werken. Laten we ze samenvoegen om te zien hoe ze samenwerken en het laatste Circuit for Scrolling 8x8 LED Matrix-display ziet er als volgt uit:
8x8 LED-matrix aansturen met behulp van multiplexing:
Laten we nu zeggen dat we LED57 willen inschakelen, dan moeten we PIN0 van UNO van stroom voorzien en de PIN-8 van UNO aarden. Om nu zowel LED57 als LED50 in te schakelen, moeten we PIN0, PIN1 van stroom voorzien en de PIN8, PIN9 aarden. Maar hierdoor worden niet alleen D57, D50 ingeschakeld, maar ook D49, D58. Om dat te voorkomen gebruiken we een techniek genaamd Multiplexing. We hebben deze Multiplex-techniek al in detail besproken in 8x8 LED Matrix; lees dat artikel voor een gedetailleerde uitleg. Hier lichten we de Multiplexing kort toe.
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 LED57 en LED50 willen inschakelen zonder D49 en D58 in te schakelen. De truc is dat we eerst stroom zullen leveren aan de eerste rij om LED57 in te schakelen en 1 mSEC te wachten, en dan zullen we het uitschakelen. Dan zullen we de tweede rij van stroom voorzien om LED50 in te schakelen en 1 mSEC te wachten, waarna deze UIT wordt gezet. De cyclus gaat continu met hoge frequentie en LED57 & LED50 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 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.
Er is ook een bibliotheek genaamd LedControlMS.h om al deze complexiteit van multiplexen te regelen, waarbij u alleen het teken of nummer hoeft in te voeren dat u op de LED-matrix wilt afdrukken, bekijk deze Arduino LED-matrix met MAX7219-project voor meer details.
Programmering Toelichting:
In onze code hebben we voor elk teken een decimale waarde geschreven en deze waarden in de Arduino geprogrammeerd. Het programma heeft geschreven om deze waarden elke 0,2 seconde naar de volgende rij te verschuiven, dit wordt gezien als het naar boven scrollen van tekens, het is heel eenvoudig.
Om de weer te geven tekens te wijzigen, vervangt u gewoon de waarde in de ALPHA- array met tekens volgens de onderstaande tekenwaarden, 24,60,102,126,102,102,102,0,0,0, // A 124,102,102,124,102,102,124,0,0,0, // B 60,102,96,96,96,102,60,0, 0,0, // C 120,108,102,102,102,108,120,0, 0,0, // D 126,96,96,120,96,96,126,0, 0,0, // E 126,96,96,120,96,96,96,0, 0,0, // F 60,102,96,110,102,102,60, 0, 0,0, // G 102,102,102,126,102,102,102,0, 0,0, // H 60,24,24,24,24,24,60,0, 0,0, // I 30,12,12,12, 12,108,56,0, 0,0, // J 102,108,120,112,120,108,102,0, 0,0, // K 96,96,96,96,96,96,126,0, 0,0, // L 99,119,127,107,99, 99,99,0, 0,0, // M 102,118,126,126,110,102,102,0, 0,0, // N 60,102,102,102,102,102,60,0, 0,0, // O 124,102,102,124,96,96,96,0, 0,0, // P 60,102,102,102,102,60,14,0, 0,0, // Q 124,102,102,124,120,108,102,0, 0,0, // R 60,102,96,60,6,102,60,0, 0,0, // S 126, 24,24,24,24,24,24,0, 0,0, // T 102,102,102,102,102,102,60,0, 0,0, // U 102,102,102,102,102,60,24,0, 0,0, // V 99,99,99,107,127,119,99,0, 0,0, // W 102,102,60,24,60,102,102,0, 0,0, // X 102,102,102,60,24,24,24,0, 0,0, // Y 126,6,12, 24,48,96,126,0, 0,0, // Z
Als je DAD op de LED Matrix wilt weergeven, vervang dan eerst de Characters-waarden in de char ALPHA- array door waarden in te voeren voor de karakters D, A en D uit de bovenstaande lijst:
char ALPHA = {0,0,0,0,0,0,0,0,0,0,0, 120,108,102,102,102,108,120,0,0,0, 24,60,102,126,102,102,102,0,0,0, 120,108,102,102,102,108,120,0,0, 0, 0,0,0,0,0,0,0,0,0,0,0};
De totale waarden zijn nu 5 * 10 = 50 waarden, dus
Vervang, voor (int x = 0; x <142; x ++) // 150-8 (om overloop te stoppen) {…….. Met, voor (int x = 0; x <42; x ++) // 50-8 (om overloop te stoppen) {……..
U hoeft dus alleen het nummer te wijzigen.
Met deze heb je de programmering gedaan en nu kunt u de tekst op het 8x8 LED Matrix Scroll, controleert u de volledige code hieronder met een demonstratie video.