Anschließen eines WS2812B adressierbaren LED-Streifens an einen Arduino
Die Entwicklung der LED-Beleuchtungstechnik schreitet schnell voran. Bis gestern schienen controllergesteuerte RGB-Bänder, deren Helligkeit und Farbe per Fernbedienung eingestellt werden können, wie ein Wunder zu sein. Heute gibt es neue Leuchten auf dem Markt, die noch mehr Möglichkeiten bieten.
LED-Streifen auf der Basis von WS2812B
Die Unterschiede zwischen adressierbaren LED-Streifen und Standard RGB ist die Die Helligkeit und das Farbverhältnis jedes Elements ist separat einstellbar. Dadurch lassen sich Lichteffekte erzielen, die bei anderen Beleuchtungsarten nicht möglich sind. Die Ansteuerung der adressierbaren LED-Leiste erfolgt auf bekannte Weise - mittels Pulsweitenmodulation. Eine Besonderheit des Systems ist, dass jede LED mit einem eigenen PWM-Controller ausgestattet ist. Der WS2812B-Chip ist eine dreifarbige Leuchtdiode und ein Steuerkreis, die in einem Gehäuse kombiniert sind.
Die Elemente sind parallel an die Stromversorgung angeschlossen und werden über einen seriellen Bus gesteuert - der Ausgang des ersten Elements ist mit dem Steuereingang des zweiten Elements verbunden, usw. In den meisten Fällen sind die seriellen Busse auf zwei Leitungen aufgebaut, von denen eine die Strobes (Taktimpulse) und die andere die Daten überträgt.
Der Steuerbus des WS2812B besteht aus einer Leitung - er wird zur Datenübertragung genutzt. Die Daten werden in Form von Impulsen mit konstanter Frequenz, aber mit unterschiedlichen Frequenzen kodiert. Ein Impuls ist ein Bit.. Die Dauer jedes Bits beträgt 1,25 µs, das Nullbit besteht aus einem hohen Pegel von 0,4 µs und einem niedrigen Pegel von 0,85 µs. Die Einheit erscheint mit einem hohen Pegel von 0,8µs und einem niedrigen Pegel von 0,45µs. An jede LED wird ein Paket von 24 Bit (3 Byte) gesendet, gefolgt von einer Pause als Low-Pegel für 50µs. Das bedeutet, dass die Daten für die nächste LED als nächstes übertragen werden, und so weiter für alle Elemente in der Kette. Die Datenübertragung wird durch eine 100 µs-Pause beendet. Dies bedeutet, dass der Zyklus der Farbbandprogrammierung abgeschlossen ist und der nächste Satz von Datenpaketen gesendet werden kann.
Dieses Protokoll erlaubt den Verzicht auf eine einzige Leitung für die Datenübertragung, erfordert aber ein genaues Timing. Eine Abweichung von max. 150 ns ist zulässig. Darüber hinaus ist die Störfestigkeit dieses Busses sehr gering. Jede Störung mit ausreichender Amplitude kann vom Steuergerät als Daten aufgefangen werden. Dies führt zu Einschränkungen bei den Leitungslängen der Steuerschaltung. Andererseits bietet sie die Möglichkeit die Funktionstüchtigkeit des Gurtes zu überprüfen ohne zusätzliche Geräte. Wenn die Leuchte mit Strom versorgt wird und ein Finger den Kontaktbereich des Steuerbusses berührt, können einige LEDs zufällig aufleuchten und erlöschen.
Technische Eigenschaften der WS2812B-Elemente
Um Beleuchtungssysteme mit adressierbaren Bändern zu erstellen, müssen Sie die wichtigen Parameter der lichtemittierenden Elemente kennen.
LED-Abmessungen | 5x5 mm |
PWM-Modulationsfrequenz | 400 Hz |
Stromverbrauch bei maximaler Helligkeit | 60mA pro Element |
Versorgungsspannung | 5 Volt |
Arduino und WS2812B
Die weltweit beliebte Arduino-Plattform ermöglicht die Erstellung von Skizzen (Programmen) zur Steuerung von adressierbaren Bändern. Die Möglichkeiten des Systems sind breit genug, aber wenn sie auf irgendeiner Ebene nicht mehr ausreichen, reichen die erworbenen Fähigkeiten aus, um nahtlos zu C++ oder sogar Assembler zu wechseln. Allerdings ist es einfacher, sich die Grundkenntnisse von Arduino anzueignen.
Anschließen eines WS2812B basierten Bändchens an einen Arduino Uno (Nano)
Für den Anfang genügt ein einfaches Arduino Uno oder Arduino Nano Board. Später können komplexere Platinen verwendet werden, um komplexere Systeme aufzubauen. Beim physischen Anschluss des adressierbaren LED-Streifens an das Arduino-Board müssen Sie sicherstellen, dass einige Bedingungen erfüllt sind:
- Wegen der geringen Störfestigkeit sollten die Verbindungsleiter der Datenleitungen so kurz wie möglich sein (versuchen Sie, sie innerhalb von 10 cm zu verlegen);
- Schließen Sie die Datenleitung an einen freien digitalen Ausgang des Arduino-Boards an - er wird später von der Software angezeigt;
- Aufgrund des hohen Stromverbrauchs ist es nicht notwendig, die Leiste von der Platine aus zu versorgen - für diesen Zweck sind separate Netzteile vorgesehen.
Die gemeinsame Stromversorgungsleitung zwischen der Leiste und dem Arduino muss angeschlossen werden.
Grundlagen der WS2812B Software-Steuerung
Es wurde bereits erwähnt, dass man zur Steuerung der WS2812B-Chips Impulse einer bestimmten Länge mit hoher Präzision erzeugen muss. In der Arduino-Sprache gibt es Befehle zur Bildung von kurzen Impulsen delayMicroseconds и micros. Das Problem ist, dass die Auflösung dieser Befehle 4 Mikrosekunden beträgt. Dies bedeutet, dass es nicht möglich ist, Zeitverzögerungen mit einer bestimmten Genauigkeit zu erzeugen. Es ist notwendig, C++- oder Assembler-Tools zu verwenden. Es ist auch möglich, den adressierbaren LED-Streifen über Arduino mit Hilfe von speziell für diesen Zweck erstellten Bibliotheken zu steuern. Die Einführung beginnt mit Blink, einem Programm, das die lichtemittierenden Elemente blinken lässt.
FastLed .
Diese Bibliothek ist vielseitig. Zusätzlich zu den adressierbaren Bändern unterstützt es viele Geräte, einschließlich SPI-gesteuerter Bänder. Sie ist sehr leistungsfähig.
Zuerst müssen Sie die Bibliothek anschließen. Dies geschieht vor dem Setup-Block, und die Zeichenkette sieht wie folgt aus:
#include
Der nächste Schritt besteht darin, ein Array zu erstellen, in dem die Farben der einzelnen Leuchtdioden gespeichert werden. Er hat den Namen strip und die Dimension 15 - die Anzahl der Elemente (es ist besser, diesem Parameter eine Konstante zuzuweisen).
CRGB-Streifen[15]
Im Setup-Block müssen Sie das Band angeben, mit dem das Skript arbeiten soll:
void setup() {
FastLED.addLeds< WS2812B, 7, RGB>(strip, 15);
int g;
}
Der RGB-Parameter legt die Reihenfolge des Farbwechsels fest, 15 steht für die Anzahl der LEDs, 7 für die Nummer des Ausgangs, der gesteuert werden soll (es ist besser, auch dem letzten Parameter eine Konstante zuzuweisen).
Der Schleifenblock beginnt mit einer Schleife, die nacheinander in jeden Abschnitt des Arrays Red (rotes Leuchten) schreibt:
for (g=0; g< 15;g++)
{strip[g]=CRGB::Red;}
Anschließend wird das erzeugte Array an die Leuchte gesendet:
FastLED.show();
Verzögerung 1000 Millisekunden (eine Sekunde):
delay(1000);
Dann können alle Elemente auf die gleiche Weise ausgeschaltet werden, indem man sie schwarz schreibt.
for (int g=0; g< 15;g++)
{strip[g]=CRGB::Black;}
FastLED.show();
delay(1000);
Nach dem Kompilieren und Laden der Skizze blinkt das Menüband 2 Sekunden lang. Wenn Sie jede Farbkomponente separat steuern wollen, müssen Sie statt der Zeichenkette {strip[g]=CRGB::Red;} mehrere Zeichenfolgen verwendet werden:
{
strip[g].r=100;// die Lumineszenzstufe des roten Elements einstellen
strip[g].g=11;// dasselbe für Grün
strip[g].b=250;// dasselbe für Blau
}
NeoPixel
Diese Bibliothek funktioniert nur mit NeoPixel Ring LEDs, ist aber weniger ressourcenintensiv und enthält nur das Wesentliche. In Arduino-Sprache sieht das Programm wie folgt aus:
#include
Wie im vorherigen Fall wird die Bibliothek eingebunden und das Lenta-Objekt deklariert:
Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// Dabei ist 15 die Anzahl der Elemente und 6 die zugewiesene Leistung
Das Lenta wird im Setup-Block initialisiert:
void setup() {
lenta.begin ()
}
Im Schleifenblock leuchten alle Elemente rot, eine Variable wird an das Band übergeben und eine Verzögerung von 1 Sekunde wird erzeugt:
for (int y=0; y<15;y++)// 15 - Anzahl der Elemente in der Lenta
{lenta.setPixelColor(y, lenta.Color(255,0,0))};
{lenta.show();
delay(1000);
Die Lenta leuchtet nicht mehr schwarz:
for (int y=0; y< 15;y++)
{ lenta.setPixelColor(y, lenta.Color(0,0,0))};
lenta.show();
delay(1000);
Videolektion: Beispiele für visuelle Effekte mit adressierbaren Farbbändern.
Wenn Sie gelernt haben, wie man LEDs blinken lässt, können Sie weiter lernen, wie man Farbeffekte erzeugt, einschließlich der beliebten Regenbogen- und Nordlichter mit fließenden Übergängen. Die WS2812B und die adressierbaren Arduino-LEDs bieten hierfür nahezu unbegrenzte Möglichkeiten.