ElectricianExp.com
Terug

Hoe sluit je een WS2812B adresseerbare LED strip aan op een Arduino

Gepubliceerd: 02.08.2021
0
2578

De ontwikkeling van op LED's gebaseerde verlichtingstechnologie gaat gestaag door. Tot gisteren leken controllergestuurde RGB-linten waarvan helderheid en kleur met de afstandsbediening kunnen worden aangepast, een wonder. Vandaag zijn er nieuwe armaturen op de markt met nog meer mogelijkheden.

LED-strip op basis van WS2812B

De verschillen tussen adresseerbare LED strips en standaard RGB is de De helderheid en kleurverhouding van elk element is afzonderlijk instelbaar. Dit maakt het mogelijk verlichtingseffecten te verkrijgen die bij andere soorten verlichtingsarmaturen niet mogelijk zijn. De adresseerbare LED-strip wordt op de bekende manier aangestuurd - door middel van pulsbreedtemodulatie. Een kenmerk van het systeem is dat elke LED is uitgerust met zijn eigen PWM-controller. De WS2812B-chip is een driekleurige lichtgevende diode en een regelcircuit, gecombineerd in één behuizing.

Hoe sluit je de WS2812B LED adresseerbare strip aan op de Arduino
Buitenaanzicht van de LED met driver.

De elementen zijn parallel aangesloten op de stroomvoorziening en worden bestuurd via een seriële bus - de uitgang van het eerste element is verbonden met de besturingsingang van het tweede element, enz. In de meeste gevallen zijn de seriële bussen opgebouwd uit twee lijnen, waarvan de ene stroboscopen (klokpulsen) verzendt en de andere - gegevens.

Het uiterlijk van het adresseerbaar lint.
Het uiterlijk van het adresseerbaar lint.

De controle bus van de WS2812B bestaat uit één lijn - deze wordt gebruikt om data over te dragen. De gegevens worden gecodeerd als pulsen met een constante frequentie, maar met verschillende frequenties. Eén puls is één bit.. De duur van elk bit is 1,25 µs, het nulbit bestaat uit een hoog niveau van 0,4 µs en een laag niveau van 0,85 µs. De eenheid verschijnt als een hoog niveau van 0,8µs en een laag niveau van 0,45µs. Een pakket van 24 bits (3 bytes) wordt naar elke LED gestuurd, gevolgd door een pauze als een laag niveau gedurende 50µs. Dit betekent dat de gegevens voor de volgende LED als volgende worden verzonden, en zo verder voor alle elementen in de keten. De gegevensoverdracht wordt afgesloten met een pauze van 100 µs. Dit betekent dat de programmeercyclus van het lint is voltooid en dat de volgende set gegevenspakketten kan worden verzonden.

Stuurgegevens voor het adresseerbare lint.
Gegevens voor adresbandcontrole.

Met dit protocol kan een enkele lijn voor de gegevensoverdracht achterwege blijven, maar is een nauwkeurige timing vereist. Een afwijking van max. 150 ns is toegestaan. Bovendien is de ongevoeligheid voor ruis van deze bus zeer gering. Elke interferentie van voldoende amplitude kan door de controller worden opgepikt als data. Dit legt beperkingen op voor de lengte van de geleiders van het besturingscircuit. Aan de andere kant biedt het de mogelijkheid om om de goede werking van de riem te controleren zonder extra apparatuur. Als er spanning op de armatuur wordt gezet en een vinger raakt het contactgebied van de besturingsbus, kunnen sommige LED's oplichten en willekeurig doven.

Technische kenmerken van de WS2812B-elementen

Om verlichtingssystemen met adresseerbare linten te maken, moet men de belangrijke parameters van de lichtuitstralende elementen kennen.

LED afmetingen5x5 mm
PWM modulatiefrequentie400 Hz
Stroomverbruik bij maximale helderheid60 mA per element
Voedingsspanning5 volt
Deskundig advies
Starikov, Mikhail
Starikov Mikhail
Senior ingenieur elektronica
Vraag stellen
Het stroomverbruik van de armatuur is vrij hoog. Deze wordt niet alleen bepaald door de stroom die nodig is voor de initiatie van de gloei-p-n-overgang, maar ook door de schakelverliezen tijdens de PWM-vorming. Voor een armatuur met 15 elementen zijn de voeding en de geleiders ontworpen voor een stroomsterkte van ten minste 1 ampère.

Arduino en WS2812B

Met het wereldwijd populaire Arduino-platform kunnen sketches (programma's) worden gemaakt voor het aansturen van adresseerbare linten. De mogelijkheden van het systeem zijn ruim genoeg, maar als ze op een bepaald niveau niet meer toereikend zijn, zullen de verworven vaardigheden volstaan om naadloos over te schakelen op C++ of zelfs assembler. Hoewel, het is gemakkelijker om de basiskennis van Arduino te krijgen.

Aansluiten van een WS2812B lint op een Arduino Uno (Nano)

In het begin is een eenvoudige Arduino Uno of Arduino Nano voldoende. Later kunnen complexere borden worden gebruikt om complexere systemen te bouwen. Bij het fysiek aansluiten van de adresseerbare LED strip op het Arduino bord, moet je ervoor zorgen dat aan een paar voorwaarden is voldaan:

  • Wegens de lage ruisimmuniteit moeten de verbindingsdraden van de datakabel zo kort mogelijk zijn (probeer ze binnen 10 cm te houden);
  • Verbind de datalijn met een vrije digitale uitgang van het Arduino-bord - deze zal later door de software worden aangegeven;
  • Vanwege het hoge stroomverbruik is het niet nodig de strip vanaf de printplaat van stroom te voorzien - hiervoor zijn afzonderlijke voedingen voorzien.

De gemeenschappelijke voedingslijn tussen de strip en de Arduino moet worden aangesloten.

Bedradingsschema WS2812B.
Aansluitschema van de WS2812B strip.

Lees ook

Hoe sluit je de LED aan op het Arduino bord

 

Grondbeginselen van WS2812B softwarebesturing

Er is reeds op gewezen dat voor het aansturen van de WS2812B chip pulsen van een bepaalde lengte met grote precisie moeten worden gegenereerd. In de Arduino taal zijn er commando's om korte pulsen te vormen vertragingMicroseconden и micro's. Het probleem is dat de resolutie van deze commando's 4 microseconden is. Dit betekent dat het niet mogelijk is om tijdvertragingen met een bepaalde nauwkeurigheid te genereren. Het is noodzakelijk om C++ of Assembler tools te gebruiken. Of het is mogelijk om de LED strip aan te sturen via Arduino met behulp van bibliotheken die speciaal voor dit doel zijn gemaakt. De inleiding begint met Blink, een programma dat de lichtgevende elementen laat knipperen.

FastLed .

Deze bibliotheek is veelzijdig. Naast het adresseerbare lint ondersteunt het vele apparaten, waaronder SPI-gestuurde linten. Het is zeer krachtig.

Eerst moet je de bibliotheek aansluiten. Dit wordt gedaan voor het setup blok, en de string ziet er als volgt uit:

#include .

De volgende stap is het maken van een matrix voor het opslaan van de kleuren van elke lichtemitterende diode. Het zal de naam strip hebben en dimensie 15 - door het aantal elementen (het is beter om een constante aan deze parameter toe te kennen).

CRGB-strip[15]

In het setup-blok moet u de band specificeren waarmee het script zal werken:

void setup() {

FastLED.addLeds< WS2812B, 7, RGB>(strip, 15);

int g;

}

De RGB-parameter bepaalt de volgorde van de afwisseling van de kleuren, 15 is het aantal LED's, 7 is het nummer van de uitgang die moet worden aangestuurd (het is beter om ook aan de laatste parameter een constante toe te kennen).

Het lusblok begint met een lus die sequentieel schrijft naar elke sectie van de Red (rode gloed) array:

voor (g=0; g< 15;g++)

{strip[g]=CRGB::Red;}

Vervolgens wordt de gegenereerde matrix naar de armatuur gestuurd:

FastLED.show();

Vertraging 1000 milliseconden (een seconde):

vertraging(1000);

Dan kunnen alle elementen op dezelfde manier worden uitgeschakeld, door er zwart in te schrijven.

voor (int g=0; g< 15;g++)

{strip[g]=CRGB::Black;}

FastLED.show();

vertraging(1000);

Schets voor knipperende tape gebaseerd op FastLed.
Een schets voor een op FastLed gebaseerde knipperende strip.

Na het compileren en laden van de schets, zal het lint knipperen met een periode van 2 seconden. Als u elke kleurcomponent afzonderlijk wilt regelen, dan kunt u in plaats van string {strip[g]=CRGB::Red;} meerdere strings worden gebruikt:

{

strip[g].r=100;// het luminescentieniveau van het rode element instellen

strip[g].g=11;// hetzelfde voor groen

strip[g].b=250;// hetzelfde voor blauw

}

NeoPixel

Deze bibliotheek werkt alleen met NeoPixel Ring LED's, maar het is minder intensief en bevat alleen de essentie. In Arduino taal ziet het programma er zo uit:

#include .

Net als in het vorige geval wordt de bibliotheek opgenomen en wordt het lenta object gedeclareerd:

Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// Waarbij 15 het aantal elementen is en 6 de toegewezen output

De lenta wordt geïnitialiseerd in het setup-blok:

void setup() {

lenta.begin ()

}

In het loop-blok lichten alle elementen rood op, wordt een variabele doorgegeven aan de tape en wordt een vertraging van 1 seconde gecreëerd:

for (int y=0; y<15;y++)// 15 - aantal elementen in de lenta

{lenta.setPixelColor(y, lenta.Color(255,0,0))};

{lenta.show();

vertraging(1000);

De lenta stopt met gloeien in het zwart:

voor (int y=0; y< 15;y++)

{ lenta.setPixelColor(y, lenta.Color(0,0,0))};

lenta.show();

vertraging(1000);

Schets voor Blink programma gebaseerd op NeoPixel.
Een schets voor het NeoPixel gebaseerde Blink programma.

Videoles: voorbeelden van visuele effecten met adresseerbare linten.

Als je eenmaal hebt geleerd hoe je LED's kunt laten knipperen, kun je verder gaan met het leren creëren van kleureffecten, waaronder de populaire Rainbow en Northern Lights met vloeiende overgangen. De WS2812B en Arduino adresseerbare LED's bieden hiervoor bijna onbeperkte mogelijkheden.

Opmerkingen:
Nog geen commentaar. Wees de eerste!

Tips voor het lezen

Hoe repareer je zelf een LED armatuur