Les 9 - LED matrix aansturen
We gaan nu met een LED matrix werken.
Benodigdheden
- Arduino (Uno)
- WS2812B LED matrix
Stap 1: Hardware Aansluiten
- Voeding: Sluit de 5V van de LED matrix aan op de VIN (hetzelfde als 5V maar dan sterker) van de Arduino.
- GND: Verbind de GND aan met de GND van de Arduino
- Data: Verbind de DIN met een digitale pin op de Arduino (bijv. pin 6).
Stap 2: FastLED Bibliotheek installeren
- De LED matrix heeft de FastLED bibliotheek nodig. Hiermee krijgt de Arduino allemaal nieuwe functies voor het gebruik van de LED matrix.
- Ga via Tools naar Manage libraries, zoek de FastLED library en klik op INSTALL.
Stap 3: Programmeren van een simpel voorbeeld
- Open een nieuw project in de Arduino IDE.
- FastLED library: Als eerste (dus nog voor de setup) met je in je code aangeven dat je de FastLED library wil gebruiken.
#include <FastLED.h>
- LED variabelen:
#define LED_PIN 6 // led pin #define NUM_LEDS 20 // totaal aantal leds in de matrix (controleer dit met jouw matrix) CRGB leds[NUM_LEDS];
- Setup-functie:
void setup() { FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS); }
- Loop-functie: Zet wat ledjes op kleur. Kijk goed naar de nummering van de leds!
void loop() { // LED 0 is de eerste LED leds[0] = CRGB(255, 0, 0); // De kleurvolgorde is rood (0-255), groen (0-255), blauw (0-255) FastLED.show(); // toon de LEDs delay(500); leds[1] = CRGB(0, 255, 0); FastLED.show(); delay(500); leds[2] = CRGB(0, 0, 255); FastLED.show(); delay(500); leds[7] = CRGB(150, 0, 255); FastLED.show(); delay(500); leds[8] = CRGB(255, 200, 20); FastLED.show(); delay(500); leds[14] = CRGB(85, 60, 180); FastLED.show(); delay(500); leds[19] = CRGB(50, 255, 20); FastLED.show(); delay(500); }
Probeer wat kleuren en LED nummers te veranderen. Probeer te begrijpen wat er gebeurt.
Stap 4: Programmeer een simpel looplicht
Nu maken we een automatisch looplicht.
- Open een nieuw project in de Arduino IDE.
- FastLED library:
#include <FastLED.h>
- LED gegevens:
#define LED_PIN 6 #define NUM_LEDS 20 // aantal LEDS #define BRIGHTNESS 50 // helderheid CRGB leds[NUM_LEDS];
- Setup-functie:
void setup() { FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.setBrightness(BRIGHTNESS); // pas helderheid aan }
- Loop-functie: Een eenvoudig voorbeeld met een bewegend licht.
void loop() { // stap van 0 tot NUM_LEDS met variable i for(int i = 0; i < NUM_LEDS; i++) { leds[i] = CRGB::Red; FastLED.show(); // leds aan delay(50); // pauze } }
Tips en Uitbreidingen
- Varieer het looplicht: Als je een los lopend lichtje wil kun je de rode led na het tekenen weer uitzetten door hem op 'Black' te zetten. Kijk waar je dit moet doen.
Stap 5: Programmeer een logo
Hergebruik code uit de vorige programma's!
Bij de variabelen (dus nog voor de setup) zet je onderstaande code:
// Antonius logo van 8 x 8 leds
const uint32_t pink= 0x800635;
const uint32_t white= 0x222222;
const uint32_t cyan= 0x015660;
CRGB logo[]=
{
pink, pink, pink, pink, pink, pink, pink, cyan,
pink, pink, pink, pink, pink, pink, pink, cyan,
pink, pink, pink, pink, pink, white, white, cyan,
pink, white, white, white, pink, white, pink, cyan,
pink, white, pink, white, pink, white, white, cyan,
pink, white, white, white, pink, pink, pink, cyan,
pink, white, pink, white, pink, pink, pink, cyan,
pink, white, pink, white, pink, pink, pink, cyan,
};
Onderstaande code komt in de loop:
// stap door alle kleuren in het logo
for (int i=0; i <= sizeof(logo)/sizeof(logo[0]); i++)
{
leds[i] = logo[i]; // set de led op de kleur van het logo
}
FastLED.show(); // leds aan
Tips en Uitbreidingen
- Animatie: Je kunt nog een logo maken bijv.
logo2[]
en deze na een delay laten zien. Zo kun j een animatie maken. - Gebruik FastLED Functies: Zoek op internet naar de FastLED library voor geavanceerde functies zoals
fill_solid
,fill_gradient
,addGlitter
, enz.
Deze les geeft je een goede start met het gebruik van de FastLED-bibliotheek en het verkennen van de mogelijkheden van programmeerbare LED-verlichting. Veel plezier met experimenteren en creƫren!