Sådan tilsluttes en WS281212B Addressable LED Strip til en Arduino
Udviklingen af LED-baseret belysningsteknologi fortsætter med stor fart. Indtil i går virkede controller-styret RGB-bånd, hvis lysstyrke og farve kan justeres med fjernbetjening, som et mirakel. I dag er der nye armaturer på markedet med endnu flere muligheder.
LED strip baseret på WS2812B
Forskellene mellem adresserbare LED-strips og standard RGB er den Lysstyrken og farveforholdet for hvert element kan justeres separat. Dette gør det muligt at opnå lyseffekter, som ikke er mulige med andre typer belysningsarmaturer. Den adresserbare LED-strimmel styres på en velkendt måde - ved hjælp af pulsbreddemodulation. Et af systemets kendetegn er, at hver LED er udstyret med sin egen PWM-controller. WS2812B-chippen er en trefarvet lysdiode og et kontrolkredsløb kombineret i én pakke.
Elementerne er tilsluttet parallelt til strømforsyningen og styres via en seriel bus - det første elements udgang er forbundet med det andet elements kontrolindgang osv. I de fleste tilfælde er de serielle busser opbygget på to linjer, hvoraf den ene sender strobes (clockimpulser) og den anden data.
WS2812B's kontrolbus består af én linje - den bruges til at overføre data. Dataene er kodet som pulser med en konstant frekvens, men med forskellige frekvenser. En puls er en bit.. Varigheden af hver bit er 1,25 µs, og nulbitten består af et højt niveau på 0,4 µs og et lavt niveau på 0,85 µs. Enheden vises som et højt niveau på 0,8 µs og et lavt niveau på 0,45 µs. Der sendes en pakke på 24 bit (3 bytes) til hver LED efterfulgt af en pause som et lavt niveau i 50 µs. Det betyder, at dataene for den næste LED transmitteres som den næste og så videre for alle elementer i kæden. Dataoverførslen afsluttes med en pause på 100 µs. Dette betyder, at båndprogrammeringscyklussen er afsluttet, og at det næste sæt datapakker kan sendes.
Denne protokol gør det muligt at undvære en enkelt linje til dataoverførsel, men kræver nøjagtig timing. En afvigelse på højst 150 ns er tilladt. Desuden er støjimmuniteten for denne bus meget lav. Enhver interferens af tilstrækkelig amplitude kan opfanges af den dataansvarlige som data. Dette medfører begrænsninger på lederlængderne fra kontrolkredsløbet. På den anden side giver det mulighed for at for at kontrollere, om bæltet fungerer korrekt uden yderligere udstyr. Hvis der er strøm til armaturet, og en finger rører ved kontaktområdet for kontrolbussen, kan nogle lysdioder lyse og slukke tilfældigt.
Tekniske egenskaber for WS2812B-elementer
For at kunne skabe belysningssystemer med adresserbare bånd skal du kende de vigtige parametre for de lysemitterende elementer.
LED-dimensioner | 5x5 mm |
PWM-modulationsfrekvens | 400 Hz |
Strømforbrug ved maksimal lysstyrke | 60 mA pr. element |
Forsyningsspænding | 5 volt |
Arduino og WS2812B
Den verdensomspændende populære Arduino-platform gør det muligt at lave skitser (programmer) til styring af adresserbare bånd. Systemets muligheder er brede nok, men hvis de på et eller andet niveau ikke længere er tilstrækkelige, vil de opnåede færdigheder være tilstrækkelige til at skifte til C++ eller endog assembler uden problemer. Selv om det er lettere at få den grundlæggende viden fra Arduino.
Tilslutning af et WS2812B-baseret bånd til en Arduino Uno (Nano)
I første omgang er et simpelt Arduino Uno- eller Arduino Nano-kort tilstrækkeligt. Senere kan man bruge mere komplekse kort til at bygge mere komplekse systemer. Når du fysisk tilslutter den adresserbare LED-strimmel til Arduino-kortet, skal du sikre dig, at et par betingelser er opfyldt:
- På grund af den lave støjimmunitet skal forbindelseslederne til datalinjen være så korte som muligt (prøv at gøre dem inden for 10 cm);
- Tilslut datalinjen til en ledig digital udgang på Arduino-kortet - den vil blive angivet senere af softwaren;
- På grund af det høje strømforbrug er det ikke nødvendigt at forsyne strippen med strøm fra kortet - der er separate strømforsyninger til dette formål.
Den fælles strømforsyningsledning mellem striben og Arduino skal være tilsluttet.
Grundlæggende oplysninger om WS2812B softwarestyring
Det er allerede blevet nævnt, at for at kunne styre WS2812B-chippen er det nødvendigt at generere impulser af en vis længde med høj præcision. I Arduino-sproget findes der kommandoer til at danne korte impulser delayMicroseconds и mikros. Problemet er, at disse kommandoer har en opløsning på 4 mikrosekunder. Det betyder, at det ikke er muligt at generere tidsforsinkelser med en given nøjagtighed. Det er nødvendigt at bruge C++- eller Assembler-værktøjer. Det er også muligt at styre LED-striben via Arduino ved hjælp af biblioteker, der er specielt udviklet til dette formål. Introduktionen starter med Blink, et program, der får de lysemitterende elementer til at blinke.
FastLed .
Dette bibliotek er alsidigt. Ud over det adresserbare bånd understøtter den mange enheder, herunder SPI-styret bånd. Den er meget kraftfuld.
Først skal du tilslutte biblioteket. Dette gøres før opsætningsblokken, og strengen ser således ud:
#include
Det næste skridt er at oprette et array til lagring af farverne for hver lysdiode. Den får navnet strip og dimension 15 - antal elementer (det er bedre at tildele en konstant til denne parameter).
CRGB strip[15]
I opsætningsblokken skal du angive det bånd, som scriptet skal arbejde med:
void setup() {
FastLED.addLeds< WS2812B, 7, RGB>(strip, 15);
int g;
}
RGB-parameteren bestemmer rækkefølgen af vekslende farver, 15 betyder antallet af lysdioder, 7 er nummeret på den udgang, der er tildelt til styring (det er bedre at tildele en konstant til den sidste parameter).
Loop-blokken starter med en loop, der sekventielt skriver til hver sektion af Red (rød glød) arrayet:
for (g=0; g< 15;g++)
{strip[g]=CRGB::Red;}
Derefter sendes det genererede array til armaturet:
FastLED.show();
Forsinkelse 1000 millisekunder (et sekund):
delay(1000);
Derefter kan alle elementer slukkes på samme måde ved at skrive sort i dem.
for (int g=0; g< 15;g++)
{strip[g]=CRGB::Black;}
FastLED.show();
delay(1000);
Når skitsen er kompileret og indlæst, blinker båndet i 2 sekunder. Hvis du ønsker at styre hver farvekomponent separat, skal du i stedet for strengen {strip[g]=CRGB::Red;} der anvendes flere strenge:
{
strip[g].r=100;// indstille det røde elements luminescensniveau
strip[g].g=11;// det samme for grøn
strip[g].b=250;// det samme for blå
}
NeoPixel
Dette bibliotek fungerer kun med NeoPixel Ring LED'er, men det er mindre ressourcekrævende og indeholder kun det vigtigste. På Arduino-sprog ser programmet således ud:
#include
Som i det foregående tilfælde inkluderes biblioteket, og lenta-objektet deklareres:
Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// Hvor 15 er antallet af elementer og 6 er det tildelte output
Lenta initialiseres i opsætningsblokken:
void setup() {
lenta.begin ()
}
I loop-blokken lyser alle elementer rødt, der sendes en variabel til båndet, og der oprettes en 1 sekunds forsinkelse:
for (int y=0; y<15;y++)// 15 - antallet af elementer i lenta
{lenta.setPixelColor(y, lenta.Color(255,0,0,0))};
{lenta.show();
delay(1000);
Lentaen holder op med at lyse sort:
for (int y=0; y< 15;y++)
{ lenta.setPixelColor(y, lenta.Color(0,0,0,0))};
lenta.show();
delay(1000);
Videolektion: Eksempler på visuelle effekter ved hjælp af adresserbare bånd.
Når du har lært at blinke med LED'er, kan du fortsætte med at lære at skabe farveeffekter, herunder de populære regnbue- og nordlys-effekter med glidende overgange. WS2812B- og Arduino-adresserbare lysdioder giver næsten ubegrænsede muligheder for dette.