Hopp til innhald
Nynorsk

Emne

Sensorer og aktuatorer

Fagstoff

Adresserbare LED-striper

På ei vanleg LED-stripe lyser alle diodane likt. Dei meir avanserte LED-stripene har ein liten mikrokontrollar montert saman med kvar diode, og diodane kan dermed bli styrte individuelt.

Kva er adresserbare LED-striper?

Adresserbare LED-striper er ein type LED-striper som let deg kontrollere kvar enkelt LED individuelt. Du kan altså forandre farge og lysstyrke på kvar LED uavhengig av dei andre LED-ane på stripa.

Den vanlegaste typen adresserbar LED-stripe bruker ein eigen mikrokontrollar av typen WS2812 eller liknande LED-brikker knytt til kvar LED.

Korleis fungerer adresserbare LED-striper?

LED-brikker

Kvar LED på stripa har ein innebygd mikrokontrollar (kontrollarbrikke) som let deg sende kommandoar til han. Kontrollaren får beskjed om den aktuelle LED-en skal bli skrudd av/på, lysstyrke og eventuell farge. Vi kallar slike mikrokontrollarar LED-brikker.

Dataoverføring

Data blir sende langs stripa som ein kode i form av ein serie med binære data. For kvar LED på stripa må du sende ein pakke med data som inneheld informasjon om ønskt farge og lysstyrke. Desse datapakkane har unike namn som blir mottekne av LED-brikkene, men berre den databrikka som har rett adresse, les dataa i pakken og regulerer den aktuelle LED-en.

Klokkesignal

I tillegg til data blir det òg sendt eit klokkesignal langs stripa. Dette signalet blir brukt av kvar LED-brikke for å vite når ho skal lese inn dataa som blir sende til ho.

Kopling av adresserbare LED-striper

Adresserbare LED-striper har vanlegvis tre tilkoplingspunkt:

  • straumtilkopling (+5V)

  • jording (GND)

  • datainngang (DIN) eller datatilkopling

Straumtilkoplinga er der du koplar til straumforsyninga som gir spenning til LED-stripa. Dei fleste adresserbare LED-striper opererer på 5 volt, sjølv om nokre kan krevje 12 volt.

Jordingstilkoplinga blir brukt for jording, vanlegvis ved å kople jordleidninga frå straumforsyninga til dette punktet.

Datainngangspunktet blir brukt til å sende data frå mikrokontrollaren (til dømes Arduino) til LED-stripa. Data blir som sagt sende i form av binære signal som fortel kvar LED på stripa kva farge og lysstyrke han skal vise. Det er viktig å kople datainngangen til rett pinne på mikrokontrollaren og å bruke rett protokoll for kommunikasjon, til dømes WS2812-protokollen for WS2812 LED-striper.

Nokre adresserbare LED-striper kan ha ekstra tilkoplingspunkt, til dømes for ekstern styring, men desse vil variere avhengig av modellen og produsenten av LED-stripa.

Når du skal kople LED-stripa til din Arduino, må du nytte tre leidningar kopla til pinnane +5V og GND på Arduinoen, i tillegg til ein vald digitalport, i dette tilfellet D2. På LED-stripa blir leidningane kopla frå +5V til +5V, GND til GND og D2 til DIN (Digital IN).

Programmering av adresserbare LED-striper

Når det gjeld å programmere adresserbare LED-striper med Arduino, kan du følge desse trinna:

  1. Installer biblioteket: Først må du installere eit bibliotek som let Arduino-koden din kommunisere med adresserbare LED-striper. Det mest populære biblioteket for dette formålet er <FastLED> eller <Adafruit_NeoPixel.h>. Sjekk spesifikasjonane for LED-stripa di for å finne rett bibliotek.

  2. Kople opp LED-stripa: Kople LED-stripa til Arduino. Pass på å kople rett pinne på LED-stripa til rett pinne på Arduino. Du vel pinne for digitalt signal i programmet, i tillegg til spenning +5V og jording GND.

  3. Skriv koden: Bruk Arduino IDE til å skrive koden din. Du kan bruke Fastled-biblioteket til å enkelt kontrollere LED-stripa. I koden din kan du angi ønskt farge og lysstyrke for kvar LED på stripa.

  4. Last opp koden: Last opp koden til Arduinoen din og sjå LED-stripa lyse opp i ønskt mønster eller farge.

Under får du fire enkle døme på korleis du kan programmere ein Arduino til å styre adresserbare LED-striper.

Du kan prøve ut ulike parameter i koden for å skape ditt eige mønster.

Dømekode 1: Blinkande LED

Dette dømet vil få LED-stripa til å blinke raudt, grønt og blått med ei forseinking på eit halvt sekund mellom kvart blink. Du kan tilpasse koden for å oppnå ulike mønster, fargar og effektar på LED-stripa di.

#include <FastLED.h>

#define LED_PIN 6

#define NUM_LEDS 60

CRGB leds[NUM_LEDS];

void setup() {

FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);

}

void loop() {

// Set alle LED-ar til raudt med full lysstyrke

fill_solid(leds, NUM_LEDS, CRGB::Red);

FastLED.show();

delay(500);

// Set alle LED-ar til grønt med full lysstyrke

fill_solid(leds, NUM_LEDS, CRGB::Green);

FastLED.show();

delay(500);

// Set alle LED-ar til blått med full lysstyrke

fill_solid(leds, NUM_LEDS, CRGB::Blue);

FastLED.show();

delay(500);

}

Inkludering av bibliotek

#include <fastleid.h>

Forklaring

Her inkluderer du FastLED-biblioteket, som gir deg funksjonar for å kontrollere LED-stripa.

Definisjonar

#define LED_PIN 6

#define NUM_LEDS 60

Forklaring

Du definerer to konstantar: LED_PIN som angir kva pinne på Arduinoen LED-stripa er kopla til, og NUM_LEDS som angir talet på LED-ar på stripa.

Deklarering av LED-array

CRGB leds[NUM_LEDS];

Forklaring

Du opprettar ein array (datastruktur) med namnet "leds" med lengde NUM_LEDS for å halde struktur på fargane til kvar LED på stripa.

Setup() funksjon

void setup() {

FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);

}

Forklaring

I setup()-funksjonen legg du til LED-stripa ved å bruke FastLED-biblioteket. Du spesifiserer kva type LED-stripe du har kopla til (WS2812), LED-pinnen (LED_PIN), fargeordninga (GRB), og du sender med arrayen (datastrukturen) "leds" og talet på LED-ar (NUM_LEDS).

Loop() A

void loop() {

for (int i = 0; i < NUM_LEDS; i++) {

leds[i] = CHSV(i * 255 / NUM_LEDS, 255, 255);

}

FastLED.show();

delay(30);

}

Forklaring

I loop()-funksjonen blir alle LED-ane først sette til raud farge med full lysstyrke ved å bruke fill_solid()-funksjonen frå FastLED-biblioteket.

Deretter blir denne fargen vist på LED-stripa ved å kalle FastLED.show().

Etter det ventar koden i 30 millisekund ved hjelp av delay(30).

Deretter blir denne prosessen gjenteken for å setje alle LED-ane til grønt og deretter til blått, med tilsvarande pausar mellom fargeskifta.

Dømekode 2: Regnbogeeffekt

Denne koden skaper ein glidande regnbogeeffekt som beveger seg langs LED-stripa.

#include <FastLED.h>

#define LED_PIN 6

#define NUM_LEDS 60

CRGB leds[NUM_LEDS];

void setup() {

FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);

}

void loop() {

// Generer ein regnbogeeffekt

for (int i = 0; i < NUM_LEDS; i++) {

leds[i] = CHSV(i * 255 / NUM_LEDS, 255, 255);

}

FastLED.show();

delay(30);

}

Forklaring loop()-funksjon

I loop()-funksjonen genererer du ein regnbogeeffekt ved å bruke ei for-løkke som går gjennom kvar LED på stripa. Du bruker CHSV()-funksjonen til å setje fargen til kvar LED basert på posisjonen han har i stripa. CHSV() tek tre argument: hue (farge), saturation (metting) og value (verdi).

I dette tilfellet aukar du gradvis hue-verdien basert på posisjonen til LED-en for å skape ein regnbogeeffekt. Deretter bruker du FastLED.show() for å oppdatere fargane på LED-stripa, og delay(30) for å legge til ei lita forseinking slik at du kan sjå effekten. Denne forseinkinga bestemmer òg kor fort regnbogeeffekten beveger seg langs LED-stripa.

  1. Ei for-løkke går gjennom alle LED-ane i stripa (NUM_LEDS gonger).

  2. Inne i løkka blir kvar LED sett til ein farge som svarer til ein bestemd posisjon i ein regnboge. Dette blir gjort ved å bruke CHSV (Cylindrical Hue, Saturation, Value) til å definere fargen basert på posisjonen til LED-en i stripa (i), der fargeskiftet går frå raudt til grønt til blått og tilbake til raudt.

  3. Etter at alle LED-ane har fått tildelt fargane sine, blir denne fargeeffekten vist på LED-stripa ved å hente inn og køyre FastLED.show().

  4. Deretter ventar koden i 30 millisekund ved hjelp av delay(30) før han begynner på ein ny iterasjon (gjentaking) av løkka.

Dømekode 3: Pusteeffekt

Denne koden simulerer ein pusteeffekt ved å gradvis forandre lysstyrken til LED-stripa.

#include <FastLED.h>

#define LED_PIN 6

#define NUM_LEDS 60

CRGB leds[NUM_LEDS];

void setup() {

FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);

}

void loop() {

// Pusteeffekt

for (int i = 0; i < 256; i++) {

int brightness = exp(sin(i / 64.0 * PI)) * 255;

fill_solid(leds, NUM_LEDS, CRGB(brightness, 0, 0));

FastLED.show();

delay(20);

}

}

Forklaring loop()-funksjon

  1. Ei for-løkke går gjennom verdiar frå 0 til 255, som representerer lysstyrken til LED-ane.

  2. Inne i løkka blir lysstyrken til kvar LED berekna ved hjelp av ein formel basert på sinus og eksponentialfunksjon. Dette skaper ein "pusteeffekt" der lysstyrken aukar og deretter minkar over tid.

  3. LED-stripa blir fylt med ein raud farge som har den berekna lysstyrken akkurat no.

  4. Deretter blir denne fargen vist på LED-stripa ved å kalle FastLED.show().

  5. Etter det ventar koden i 20 millisekund ved hjelp av delay(20) før neste iterasjon (gjentaking) av løkka.

Dømekode 4: Lysande mønster

Denne koden vil få ei lysande "bølge" til å bevege seg langs LED-stripa.

#include <FastLED.h>

#define LED_PIN 6

#define NUM_LEDS 60

CRGB leds[NUM_LEDS];

void setup() {

FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);

}

void loop() {

// Lysande mønster

for (int i = 0; i < NUM_LEDS; i++) {

leds[i] = CRGB::White;

FastLED.show();

delay(30);

leds[i] = CRGB::Black;

}

}

Forklaring loop()-funksjon

  1. Ei for-løkke går gjennom alle LED-ane i stripa (NUM_LEDS gonger).

  2. Inne i løkka blir kvar LED først sett til kvit farge (CRGB::White).

  3. Deretter blir denne fargen vist på LED-en ved å kalle FastLED.show().

  4. Etter det ventar koden i 30 millisekund ved hjelp av delay(30) før han går vidare.

  5. Til slutt blir den same LED-en sett til svart farge (CRGB::Black).

Straumforbruket til LED-stripa

Når du skal kople til LED-striper med mange lysdiodar, er det viktig å passe på at du ikkje får for høgt straumforbruk.

Ein Arduino klarer å levere maksimalt 500 mA. Du kan bruke Ohms lov og effektlova for å rekne ut nødvendig effekt på spenningsforsyninga.

Utrekning av straumforbruk

Tilstand

Straum per LED

Forklaring

Av (ingen lys)ca. 1 mABerre logikkbrikka er aktiv.
Ein farge (låg lysstyrke)ca. 5–15 mATil dømes berre raud farge på låg PWM.
Kvit (alle fargar maks lys)ca. 60 mA

Raud, grøn og blått = maks lys og maks straum.

Viss du då har ei LED-stripe med 60 LED berekna for 5V spenning, kan du berekne nødvendig straumstyrke og effekt med følgande formel:

Straumforbruk

Maks straumforbruk = antal LED × 60 mA

Maks straumforbruk =60 LED × 60 mA = 3600mA = 3,6A

Effekt

Effekt = spenning ×straum

Effekt = 5V ×3,6A = 18W

Ved bruk av ei LED-stripe med 60 LED-ar må du altså kople til ei ekstern straumforsyning som kan levere 3,6A ved 5V for å gi tilstrekkeleg effekt.

Skrive av Roger Rosmo.
Sist oppdatert 02.05.2024