Comment connecter la bande LED adressable WS2812B à Arduino
Le développement de la technologie d'éclairage à base de LED se poursuit rapidement. Hier encore, les rubans RVB contrôlés par contrôleur, dont la luminosité et la couleur peuvent être ajustées à l'aide d'une télécommande, semblaient être un miracle. Aujourd'hui, des lampes avec encore plus de fonctionnalités sont apparues sur le marché.
Bande LED basée sur WS2812B
La différence entre la bande LED adressable et la bande standard RVB la chose est la luminosité et le rapport de couleur de chaque élément sont ajustés séparément. Cela vous permet d'obtenir des effets d'éclairage fondamentalement inaccessibles aux autres types d'appareils d'éclairage. La lueur de la bande LED adressable est contrôlée d'une manière connue - en utilisant une modulation de largeur d'impulsion. Une caractéristique du système est d'équiper chaque LED de son propre contrôleur PWM. La puce WS2812B est une diode électroluminescente tricolore et un circuit de commande combinés dans un seul boîtier.

Les éléments sont combinés en une bande d'alimentation en parallèle et sont contrôlés via un bus série - la sortie du premier élément est connectée à l'entrée de commande du second, etc. Dans la plupart des cas, les bus série sont construits sur deux lignes, dont l'une transmet des stroboscopes (impulsions d'horloge) et l'autre - des données.

Le bus de contrôle de la puce WS2812B se compose d'une ligne - les données y sont transmises. Les données sont codées sous forme d'impulsions de fréquence constante, mais avec des rapports cycliques différents. Une impulsion - un bit. La durée de chaque bit est de 1,25 µs, le bit zéro est constitué d'un niveau haut d'une durée de 0,4 µs et d'un niveau bas de 0,85 µs. L'unité ressemble à un niveau haut pendant 0,8 µs et à un niveau bas pendant 0,45 µs. Une rafale de 24 bits (3 octets) est envoyée à chaque LED, suivie d'une pause de bas niveau pendant 50 µs. Cela signifie que les données seront transmises pour la prochaine LED, et ainsi de suite pour tous les éléments de la chaîne. Le transfert de données se termine par une pause de 100 µs. Cela indique que le cycle de programmation de la bande est terminé et que le prochain ensemble de paquets de données peut être envoyé.

Un tel protocole permet de se contenter d'une seule ligne pour la transmission des données, mais nécessite une précision dans le maintien des intervalles de temps. L'écart est autorisé pas plus de 150 ns. De plus, l'immunité au bruit d'un tel bus est très faible. Toute interférence d'amplitude suffisante peut être perçue par le contrôleur comme une donnée. Cela impose des restrictions sur la longueur des conducteurs du circuit de commande. D'autre part, cela permet bilan de santé du ruban sans appareils supplémentaires.Si vous mettez la lampe sous tension et que vous touchez la plage de contact du bus de commande avec votre doigt, certaines LED peuvent s'allumer et s'éteindre de manière aléatoire.
Spécifications des éléments WS2812B
Pour créer des systèmes d'éclairage basés sur une bande d'adresse, vous devez connaître les paramètres importants des éléments émetteurs de lumière.
| Dimensions LED | 5x5mm |
| Fréquence de modulation PWM | 400Hz |
| Consommation de courant à luminosité maximale | 60 mA par cellule |
| Tension d'alimentation | 5 volts |
Arduino et WS2812B
La plate-forme Arduino, populaire dans le monde, vous permet de créer des croquis (programmes) pour gérer les bandes d'adresses. Les capacités du système sont assez larges, mais si elles ne suffisent plus à un certain niveau, les compétences acquises seront suffisantes pour basculer sans peine en C++ voire en assembleur. Bien que les connaissances initiales soient plus faciles à obtenir sur l'Arduino.
Connexion du ruban WS2812B à Arduino Uno (Nano)
Dans un premier temps, de simples cartes Arduino Uno ou Arduino Nano suffisent. À l'avenir, des cartes plus complexes pourront être utilisées pour construire des systèmes plus complexes. Lors de la connexion physique de la bande LED adressable à la carte Arduino, plusieurs conditions doivent être respectées :
- en raison de la faible immunité au bruit, les conducteurs de connexion de la ligne de données doivent être aussi courts que possible (vous devez essayer de les faire à moins de 10 cm);
- vous devez connecter le conducteur de données à la sortie numérique libre de la carte Arduino - il sera ensuite spécifié par programme ;
- en raison de la forte consommation d'énergie, il n'est pas nécessaire d'alimenter la bande depuis la carte - des alimentations séparées sont fournies à cet effet.
Le fil d'alimentation commun de la lampe et de l'Arduino doit être connecté.

Principes de base du contrôle de programme WS2812B
Il a déjà été mentionné que pour contrôler les microcircuits WS2812B, il est nécessaire de générer des impulsions d'une certaine longueur, en maintenant une grande précision. Il existe des commandes dans le langage Arduino pour la formation d'impulsions courtes retardMicrosecondes et micros. Le problème est que la résolution de ces commandes est de 4 microsecondes. C'est-à-dire qu'il ne fonctionnera pas pour former des retards temporels avec une précision donnée. Il est nécessaire de passer aux outils C++ ou Assembleur. Et vous pouvez organiser le contrôle de la bande LED adressable via Arduino en utilisant des bibliothèques spécialement créées pour cela. Vous pouvez commencer à vous familiariser avec le programme Blink, qui fait clignoter les éléments électroluminescents.
conduit rapide
Cette bibliothèque est universelle. En plus de la bande d'adresses, il prend en charge une variété de périphériques, y compris les bandes contrôlées par l'interface SPI. Il a de larges possibilités.
Premièrement, la bibliothèque doit être incluse. Ceci est fait avant le bloc de configuration, et la ligne ressemble à ceci :
#include <FastLED.h>
L'étape suivante consiste à créer un tableau pour stocker les couleurs de chaque diode électroluminescente. Il aura le nom de bande et la dimension 15 - par le nombre d'éléments (il est préférable d'attribuer une constante à ce paramètre).
Bande CRGB[15]
Dans le bloc de configuration, vous devez spécifier avec quelle bande le croquis fonctionnera :
void setup() {
FastLED.addLeds< WS2812B, 7, RVB>(bande, 15);
int;
}
Le paramètre RVB définit l'ordre de séquence des couleurs, 15 signifie le nombre de LED, 7 est le numéro de la sortie affectée au contrôle (il est également préférable d'affecter une constante au dernier paramètre).
Le bloc de boucle commence par une boucle qui écrit séquentiellement dans chaque section du tableau Rouge (lueur rouge) :
pour (g=0; g< 15; g++)
{bande[g]=CRGB::Rouge ;}
Ensuite, le réseau formé est envoyé à la lampe :
FastLED.show();
Délai 1000 millisecondes (seconde) :
retard(1000);
Ensuite, vous pouvez désactiver tous les éléments de la même manière en y écrivant du noir.
pour (int g=0; g< 15; g++)
{bande[g]=CRGB::Noir ;}
FastLED.show();
retard(1000);

Après avoir compilé et téléchargé le croquis, la bande clignotera avec une période de 2 secondes. Si vous devez gérer chaque composant de couleur séparément, alors au lieu de la ligne {bande[g]=CRGB::Rouge ;} plusieurs lignes sont utilisées :
{
bande[g].r=100;// régler le niveau de lueur de l'élément rouge
bande[g].g=11;// idem pour le vert
bande[g].b=250;// idem pour le bleu
}
NéoPixel
Cette bibliothèque ne fonctionne qu'avec les anneaux LED NeoPixel Ring, mais elle est moins gourmande en ressources et ne contient que l'essentiel. En langage Arduino, le programme ressemble à ceci :
#include <Adafruit_NeoPixel.h>
Comme dans le cas précédent, la bibliothèque est connectée, et l'objet lenta est déclaré :
Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// où 15 est le nombre d'éléments et 6 est la sortie assignée
Dans le bloc de configuration, la bande est initialisée :
void setup() {
lenta.begin()
}
Dans le bloc de boucle, tous les éléments sont surlignés en rouge, la variable est transmise au flux et un délai de 1 seconde est créé :
pour (int y=0; y<15; y++)// 15 - le nombre d'éléments dans la lampe
{lenta.setPixelColor(y, lenta.Color(255,0,0))} ;
tape.show();
retard(1000);
La lueur s'arrête avec un disque noir :
pour (int y=0; y< 15; y++)
{ lenta.setPixelColor(y, lenta.Color(0,0,0))} ;
tape.show();
retard(1000);

Tutoriel vidéo : Exemples d'effets visuels utilisant des bandes d'adresse.
Une fois que vous avez appris à faire clignoter les LED, vous pouvez continuer à apprendre à créer des effets de couleur, y compris les populaires arc-en-ciel et aurore boréale avec des transitions fluides. Les LED adressables WS2812B et Arduino offrent des possibilités presque illimitées pour cela.
