lamp.housecope.com
Rug

Adresseerbare LED-strip WS2812B verbinden met Arduino

Gepubliceerd: 02.08.2021
0
2578

De ontwikkeling van verlichtingstechnologie op basis van LED's gaat snel. Gisteren leken controllergestuurde RGB-linten, waarvan de helderheid en kleur kunnen worden aangepast met een afstandsbediening, een wonder. Tegenwoordig zijn er lampen met nog meer functies op de markt verschenen.

Ledstrip gebaseerd op WS2812B

Het verschil tussen de adresseerbare ledstrip en de standaard RGB het ding is helderheid en kleurverhouding van elk element worden afzonderlijk aangepast. Hiermee kunt u lichteffecten krijgen die fundamenteel ontoegankelijk zijn voor andere soorten verlichtingsapparaten. De gloed van de adresseerbare LED-strip wordt op een bekende manier aangestuurd - met behulp van pulsbreedtemodulatie. Een kenmerk van het systeem is om elke LED uit te rusten met een eigen PWM-controller. De WS2812B-chip is een driekleurige lichtgevende diode en een stuurcircuit gecombineerd in één pakket.

Adresseerbare LED-strip WS2812B verbinden met Arduino
Het uiterlijk van de LED met de driver.

De elementen worden parallel gecombineerd tot een vermogensband en worden bestuurd via een seriële bus - de uitgang van het eerste element is verbonden met de stuuringang van het tweede, enz. In de meeste gevallen zijn seriële bussen gebouwd op twee lijnen, waarvan er één stroboscopen (klokpulsen) verzendt en de andere - gegevens.

Uiterlijk van de adresstrook.
Uiterlijk van de adresstrook.

De besturingsbus van de WS2812B-chip bestaat uit één lijn - er worden gegevens doorheen verzonden. De gegevens worden gecodeerd als pulsen met een constante frequentie, maar met verschillende werkcycli. Eén puls - één bit. De duur van elke bit is 1,25 µs, de nulbit bestaat uit een hoog niveau met een duur van 0,4 µs en een laag niveau van 0,85 µs. De eenheid ziet eruit als een hoog niveau voor 0,8 µs en een laag niveau voor 0,45 µs. Een 24-bit (3-byte) burst wordt naar elke LED gestuurd, gevolgd door een lage pauze van 50 µs. Dit betekent dat er gegevens worden verzonden voor de volgende LED, enzovoort voor alle elementen van de keten. De gegevensoverdracht eindigt met een pauze van 100 µs. Dit geeft aan dat de bandprogrammeercyclus is voltooid en dat de volgende set datapakketten kan worden verzonden.

Gegevens om de adresband te beheren.
Gegevens om de adresband te beheren.

Een dergelijk protocol maakt het mogelijk om met één lijn rond te komen voor gegevensoverdracht, maar vereist nauwkeurigheid bij het handhaven van tijdsintervallen. De afwijking is maximaal 150 ns toegestaan. Bovendien is de ruisimmuniteit van een dergelijke bus zeer laag. Elke storing met voldoende amplitude kan door de regelaar als data worden waargenomen. Dit legt beperkingen op aan de lengte van de geleiders van het stuurcircuit. Aan de andere kant maakt dit het mogelijk lint gezondheid check zonder extra apparaten.Als u de lamp van stroom voorziet en het contactvlak van de besturingsbus met uw vinger aanraakt, kunnen sommige LED's willekeurig oplichten en uitgaan.

Specificaties van WS2812B-elementen

Om verlichtingssystemen te maken op basis van een adresband, moet u de belangrijke parameters van lichtgevende elementen kennen.

LED-afmetingen5x5mm
PWM modulatie frequentie400 Hz
Stroomverbruik bij maximale helderheid60 mA per cel
Voedingsspanning:5 volt

Arduino en WS2812B

Het Arduino-platform, populair in de wereld, stelt u in staat om schetsen (programma's) te maken voor het beheer van adresbanden. De mogelijkheden van het systeem zijn breed genoeg, maar als ze op een bepaald niveau niet meer voldoende zijn, zullen de verworven vaardigheden voldoende zijn om pijnloos over te schakelen naar C++ of zelfs naar assembler. Hoewel de eerste kennis gemakkelijker op de Arduino te krijgen is.

WS2812B-lint aansluiten op Arduino Uno (Nano)

In de eerste fase zijn eenvoudige Arduino Uno- of Arduino Nano-kaarten voldoende. In de toekomst kunnen complexere borden worden gebruikt om complexere systemen te bouwen. Bij het fysiek aansluiten van de adresseerbare LED-strip op het Arduino-bord, moeten verschillende voorwaarden in acht worden genomen:

  • vanwege de lage ruisimmuniteit moeten de verbindingsgeleiders van de datalijn zo kort mogelijk zijn (u moet proberen ze binnen 10 cm te maken);
  • je moet de datageleider aansluiten op de vrije digitale uitgang van het Arduino-bord - deze wordt dan programmatisch gespecificeerd;
  • vanwege het hoge stroomverbruik is het niet nodig om de tape van het bord te voorzien - hiervoor zijn aparte voedingen aanwezig.

De gemeenschappelijke stroomdraad van de lamp en Arduino moet worden aangesloten.

Aansluitschema WS2812B.
WS2812B tape-aansluitschema.

Lees ook

Hoe LED op Arduino-bord aan te sluiten

 

WS2812B Basisprincipes van programmabesturing

Er is al vermeld dat om de WS2812B-microschakelingen te besturen, het noodzakelijk is om pulsen met een bepaalde lengte te genereren, met behoud van een hoge nauwkeurigheid. Er zijn commando's in de Arduino-taal voor het vormen van korte pulsen vertragingMicroseconden en micro's. Het probleem is dat de resolutie van deze commando's 4 microseconden is. Dat wil zeggen, het zal niet werken om tijdvertragingen met een bepaalde nauwkeurigheid te vormen. Het is noodzakelijk om over te schakelen naar C++ of Assembler-tools. En u kunt de besturing van de adresseerbare LED-strip organiseren via Arduino met behulp van speciaal daarvoor gemaakte bibliotheken. U kunt kennis maken met het programma Blink, waarbij de lichtgevende elementen knipperen.

snelle led

Deze bibliotheek is universeel. Naast de adrestape ondersteunt het een verscheidenheid aan apparaten, inclusief tapes die worden bestuurd door de SPI-interface. Het heeft brede mogelijkheden.

Ten eerste moet de bibliotheek worden opgenomen. Dit wordt gedaan vóór het setup-blok en de regel ziet er als volgt uit:

#include <FastLED.h>

De volgende stap is het maken van een array om de kleuren van elke lichtgevende diode op te slaan. Het heeft de naamstrip en afmeting 15 - door het aantal elementen (het is beter om een ​​constante aan deze parameter toe te wijzen).

CRGB-strook[15]

In het setup-blok moet je specificeren met welke tape de schets zal werken:

ongeldige setup() {

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

intg;

}

De RGB-parameter stelt de kleurvolgorde in, 15 betekent het aantal LED's, 7 is het nummer van de uitgang die is toegewezen voor besturing (het is ook beter om een ​​constante toe te wijzen aan de laatste parameter).

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

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

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

Vervolgens wordt de gevormde array naar de lamp gestuurd:

FastLED.show();

Vertraging 1000 milliseconden (seconde):

vertraging (1000);

Dan kun je alle elementen op dezelfde manier uitzetten door er zwart in te schrijven.

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

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

FastLED.show();

vertraging (1000);

Een schets voor een flitsband op basis van FastLed.
Een schets voor een flitsband op basis van FastLed.

Na het compileren en uploaden van de schets, knippert de tape met een periode van 2 seconden. Als u elke kleurcomponent afzonderlijk moet beheren, dan in plaats van de lijn {strip[g]=CRGB::Rood;} verschillende regels worden gebruikt:

{

strip[g].r=100;// stel het gloeiniveau van het rode element in

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

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

}

NeoPixel

Deze bibliotheek werkt alleen met NeoPixel Ring LED-ringen, maar is minder arbeidsintensief en bevat alleen de essentie. In Arduino-taal ziet het programma er als volgt uit:

#include <Adafruit_NeoPixel.h>

Net als in het vorige geval is de bibliotheek verbonden en wordt het lenta-object gedeclareerd:

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

In het setup-blok wordt de band geïnitialiseerd:

ongeldige setup() {

lenta.begin()

}

In het lusblok worden alle elementen rood gemarkeerd, de variabele wordt doorgegeven aan de feed en er wordt een vertraging van 1 seconde gecreëerd:

voor (int y=0; y<15; y++)// 15 - het aantal elementen in de lamp

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

band.show();

vertraging (1000);

De gloed stopt met een zwarte plaat:

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

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

band.show();

vertraging (1000);

Schets voor het Blink-programma op basis van NeoPixel.
Schets voor het Blink-programma op basis van NeoPixel.

Videozelfstudie: voorbeelden van visuele effecten met behulp van adresbanden.

Als je eenmaal hebt geleerd hoe je de LED's moet laten knipperen, kun je doorgaan met het maken van kleureffecten, waaronder de populaire Rainbow en Aurora Borealis met vloeiende overgangen. Adresseerbare LED's WS2812B en Arduino bieden hiervoor bijna onbeperkte mogelijkheden.

Opmerkingen:
Er zijn nog geen reacties. Wees de eerste!

We raden je aan om te lezen

Zelf een LED-lamp repareren