Bouw en programmeer 8x8 & 16x16 WS2812 RGB LED-matrix animaties met Arduino en Excel
Onderdelen en benodigdheden
| Arduino UNO | × | 1 |
| WS2812 8x8 RGB LED-matrix | × | 1 |
| Male/Female Jumper Draden | × | 3 |
| 9V-batterij (Generiek) | × | 1 |
| 9V naar Barrel Jack Connector | × | 1 |
| Male Header 5-positie – 1 rij – Lang (0,1") | × | 1 |
Benodigde tools en machines
- Solderbout (Generiek)
- Solderdraad, Loodvrij
Over dit project
toen ik mijn eerste WS2812 8x8 RGB LED-matrix kocht, verwachtte ik deze als een traditioneel XY-coördinatensysteem aan te spreken. In plaats daarvan zijn de 64 LEDs in een ketting geschakeld in acht rijen van acht. Ik ontdekte dat Kevin Darrah's Excel-hulpprogramma, oorspronkelijk ontworpen voor een 16×16 matrix, aangepast kon worden om een 8×8-array te besturen. Door zowel het spreadsheet als de bijbehorende Arduino-sketch aan te passen, creëerde ik een veelzijdig hulpmiddel waarmee je LED-animaties kunt programmeren zonder externe bibliotheken.
De bijgewerkte Excel-werkmap, LED_Utility.xlsm, ondersteunt nu:
- Individuele RGB-toewijzing voor elke LED.
- Dynamische eigenschapswijzigingen via VBA-scripting.
- XY-herlocatie om beweging te simuleren.
- Ingebouwde paletten voor snelle kleurselectie.
- Dubbele ondersteuning voor 8×8 en 16×16 matrices.
Hieronder vind je stap-voor-stap instructies voor het bouwen van de hardware, het configureren van de Excel-hulpprogramma, en het uploaden van de Arduino-sketch. Elk project bouwt op het vorige, waarbij concepten als lussen, conditionele statements en modulaire functies worden geïntroduceerd.
Hardware samenstellen
Bevestig de 8×8-matrix aan een Arduino UNO met een 5-pins header:
- Verbind DIN met pin 8 op de Arduino.
- Verbind +5V met de 5V-pin.
- Ground met de GND-pin.
Voor deze opstelling verwijst coördinaat (0,0) naar de linkerbovenhoek van de matrix.
Excel-hulpprogramma overzicht
Open LED_Utility.xlsm – het bevat drie bladen:
- Eight – 8×8 matrix-interface.
- Sixteen – 16×16 matrix-interface.
- ColMap – een handige referentie van veelvoorkomende RGB-codes.
De werkmap is standaard ingesteld op alleen-lezen om je werk te beschermen. Gebruik Bestand → Opslaan als na het genereren van code om je ontwerp te bewaren.
Belangrijke functies op het Eight blad:
- Show – toont RGB-waarden voor de geselecteerde cellen (0-255).
- Var Map – accepteert numerieke of variabele invoer maar toont geen output.
- Wrap Map – voegt een modulus-functie toe om coördinatoverloop af te handelen en ondersteunt variabelen voor later gebruik.
- Clear – leegt beide invoergrids.
Elke knop genereert een blok C++-code dat je in de Arduino-sketch kopieert. De code is geformatteerd voor de aangepaste mapLEDXY() functie, die XY-coördinaten omzet in de juiste LED-index.
De sketch
De kern-sketch (LED_Arduino.ino) bevat de volgende elementen:
// Pin definitie #define WS2812_pin 8 // Totaal aantal LEDs #define numberOfLEDs 64 // RGB-buffer (3 bytes per LED) byte RGB[192]; // Forward declaraties void RGB_update(int LED, byte RED, byte GREEN, byte BLUE); void mapLEDXY(int x, int y, byte RED, byte GREEN, byte BLUE); void clearLEDs();
De mapLEDXY() routine wijst een coördinatenpaar toe aan de lineaire array, rekening houdend met het zigzag-bedradingspatroon dat veelvoorkomend is bij WS2812-matrices.
Na het kopiëren van je gegenereerde code in de loop() functie, upload de sketch. De matrix reageert direct op de instructies.
Project 1 – Statisch rood vierkant
Creëer een 3×3 rood vierkant op coördinaten (2,2) tot (4,4). In Excel, stel de overeenkomstige cellen in op 255 voor rood en 0 voor groen/blauw. Kopieer de gegenereerde code naar regel 40 van de sketch:
mapLEDXY(2,2,255,0,0);mapLEDXY(2,3,255,0,0);mapLEDXY(2,4,255,0,0); mapLEDXY(3,2,255,0,0);mapLEDXY(3,3,255,0,0);mapLEDXY(3,4,255,0,0); mapLEDXY(4,2,255,0,0);mapLEDXY(4,3,255,0,0);mapLEDXY(4,4,255,0,0);
Upload en zie het vierkant oplichten. Experimenteer met het wissen van het grid, kleuren wijzigen, of een rand toevoegen.
Project 2 – Dubbel-kleur vierkanten
Dupliceer de sketch als Colour_Sq.ino en wijzig het Excel-blad om een tweede, groter vierkant te creëren. Gebruik de Show knop om code te genereren en plak het in de sketch. Voeg een simpele delay en clearLEDs() toe om tussen de twee vormen te schakelen.
Project 3 – Groeiend vierkant
In de Grow.ino sketch, ontwerp een kleiner binnen-vierkant en omring het met een rand naar keuze. Verwijder de waarden van het binnen-vierkant, genereer de buiten-code, en plak beide blokken in de sketch. Het resultaat is een geanimeerd vierkant dat uitbreidt en inkrimpt.
Project 4 – Spiraal-animatie
Voor complexe patronen, inkapsel elk frame in een aparte functie en roep ze aan vanuit loop(). De voorbeeld Spiral.ino gebruikt vijf helper-functies om een 5-laags spiraal te bouwen. Deze modulare benadering houdt de hoofdlus beknopt en maakt toekomstige bewerkingen eenvoudig.
Project 5 – Variabele helderheidslus
Introduceer een for lus om helderheid te animeren:
for (int r=0; r<256; r++) {
mapLEDXY(3,3,r,0,0);mapLEDXY(3,4,r,0,0);
mapLEDXY(4,3,r,0,0);mapLEDXY(4,4,r,0,0);
RGB_update(-1,0,0,0); delay(50);
}
for (int r=255; r>=0; r--) {
mapLEDXY(3,3,r,0,0);mapLEDXY(3,4,r,0,0);
mapLEDXY(4,3,r,0,0);mapLEDXY(4,4,r,0,0);
RGB_update(-1,0,0,0); delay(50);
}
Het vierkant fadet automatisch op en neer.
Project 6 – Fadende rand
Combineer for lussen met een gedeelde g variabele om een omringende rand te faden:
for (int g=0; g<256; g++) {
b=g;
mapLEDXY(...); // rand cellen
RGB_update(-1,0,0,0); delay(50);
}
for (int g=255; g>=0; g--) {
b=g;
mapLEDXY(...); // rand cellen
RGB_update(-1,0,0,0); delay(50);
}
Hier volgt het blauwe kanaal het groene om een vloeiende fade te creëren.
Project 7 – Kleurovergang
Gebruik een if statement om midden-rand cellen van groen naar geel te veranderen zodra een drempel bereikt is:
for (int r=0; r<256; r++) {
g=r;
if (g>64) {
g=65; l=r;
}
mapLEDXY(...); // cellen
RGB_update(-1,0,0,0); delay(50);
}
Experimenteer met verschillende drempels voor gevarieerde effecten.
Project 8 – Bewegende pijl
Genereer een bewegende pijl door de X-coördinaat te parameteriseren:
for (int x=0; x<8; x++) {
mapLEDXY((x+0)%8,3,0,255,255);
mapLEDXY((x+1)%8,1,255,128,128);
mapLEDXY((x+1)%8,3,0,255,255);
mapLEDXY((x+1)%8,5,255,128,128);
mapLEDXY((x+2)%8,2,255,128,128);
mapLEDXY((x+2)%8,3,0,255,255);
mapLEDXY((x+2)%8,4,255,128,128);
mapLEDXY((x+3)%8,3,255,128,128);
RGB_update(-1,0,0,0); delay(100);
}
Gebruik de Wrap Map functie in het spreadsheet om coördinatoverloop af te handelen.
16×16 Matrix gebruik
Alle concepten hierboven zijn direct toepasbaar op een 16×16 matrix. Vervang LED_Arduino.ino met LED_Arduino16.ino en schakel naar het Sixteen blad in de werkmap. De enige aanpassing die nodig is, is de numberOfLEDs definitie en de RGBlocation berekening in mapLEDXY().
Uitbreidingen & Tips
Productieproces
- Arduino Nano Flight Simulator 2020 Bedieningspaneel – LCD & CDI Display
- Arduino-gebaseerd schakelaar- & LED-paneel voor Microsoft Flight Simulator 2020
- Bouw en programmeer 8x8 & 16x16 WS2812 RGB LED-matrix animaties met Arduino en Excel
- Bouw Een 'Go Away' Robot – Eenvoudige Arduino Starter Kit Voor Kinderen
- Bespaar Arduino-pins: Sluit een 4x3-toetsenblok aan met slechts 3 verbindingen
- Top 3 Digitale Productietrends Die 2020 Vormgeven
- Top 3 Strategieën voor MKB om Succesvol Internationaal te Expanderen
- Drie essentiële lessen die detailhandelaren moeten leren tijdens langdurige storingen
- Top 3 essentiële tips industriële apparatuuronderhoud & veiligheid
- Essentiële gids: 3 bewezen strategieën aankoop zware industriële apparatuur
- De wereldwijde IoT beveiligen: Drie essentiële stappen