Comment connecter une bande de LED adressables WS2812B à un Arduino
Le développement de la technologie d'éclairage à base de LED se poursuit à un rythme soutenu. Jusqu'à hier, les rubans RVB dont la luminosité et la couleur peuvent être réglées par télécommande semblaient relever du miracle. Aujourd'hui, il existe sur le marché de nouveaux luminaires offrant encore plus de possibilités.
Bande LED basée sur WS2812B
Les différences entre les bandes LED adressables et les bandes standard RGB est le La luminosité et le rapport de couleur de chaque élément sont réglables séparément.. Cela permet d'obtenir des effets lumineux qui ne sont pas disponibles pour d'autres types d'appareils d'éclairage. La bande de LED adressable est commandée de la manière habituelle - par modulation de largeur d'impulsion. Une des caractéristiques du système est que chaque LED est équipée de son propre contrôleur PWM. La puce WS2812B est une diode électroluminescente tricolore et un circuit de contrôle, réunis dans un seul boîtier.
Les éléments sont connectés en parallèle à l'alimentation et sont commandés par un bus série - la sortie du premier élément est connectée à l'entrée de commande du deuxième élément, etc. Dans la plupart des cas, les bus série sont construits sur deux lignes, dont l'une transmet des strobes (impulsions d'horloge) et l'autre - des données.
Le bus de contrôle du WS2812B se compose d'une ligne - il est utilisé pour transférer des données. Les données sont codées sous forme d'impulsions à fréquence constante, mais avec des fréquences différentes. Une impulsion correspond à un bit.. La durée de chaque bit est de 1,25 µs, le bit zéro est constitué d'un niveau haut de 0,4 µs et d'un niveau bas de 0,85 µs. L'unité apparaît comme un niveau haut de 0,8µs et un niveau bas de 0,45µs. Un paquet de 24 bits (3 bytes) est envoyé à chaque LED, suivi d'une pause en tant que niveau bas pendant 50µs. Cela signifie que les données de la LED suivante seront transmises ensuite, et ainsi de suite pour tous les éléments de la chaîne. Le transfert de données est terminé par une pause de 100 µs. Cela signifie que le cycle de programmation du ruban est terminé et que le prochain ensemble de paquets de données peut être envoyé.
Ce protocole permet de se passer d'une seule ligne pour le transfert de données, mais nécessite un timing précis. Une déviation de 150 ns maximum est autorisée. En outre, l'immunité au bruit de ce bus est très faible. Toute interférence d'une amplitude suffisante peut être captée par le contrôleur comme une donnée. Cela impose des limitations sur la longueur des conducteurs du circuit de commande. D'autre part, elle offre la possibilité de pour vérifier le bon fonctionnement de la ceinture sans dispositifs supplémentaires. Si le luminaire est alimenté et qu'un doigt touche la zone de contact du bus de commande, certaines DEL peuvent s'allumer et s'éteindre de manière aléatoire.
Caractéristiques techniques des éléments WS2812B
Pour créer des systèmes d'éclairage avec des rubans adressables, vous devez connaître les paramètres importants des éléments émetteurs de lumière.
Dimensions des LED | 5x5 mm |
Fréquence de modulation PWM | 400 Hz |
Consommation de courant à la luminosité maximale | 60mA par élément |
Tension d'alimentation | 5 volts |
Arduino et WS2812B
La plateforme Arduino, mondialement populaire, permet la création de sketches (programmes) pour contrôler les rubans adressables. Les capacités du système sont suffisamment larges, mais si, à un niveau quelconque, elles ne sont plus suffisantes, les compétences acquises seront suffisantes pour passer sans problème au C++ ou même à l'assembleur. Cependant, il est plus facile d'acquérir les connaissances de base avec Arduino.
Connexion d'un ruban à base de WS2812B à un Arduino Uno (Nano)
Dans un premier temps, une simple carte Arduino Uno ou Arduino Nano est suffisante. Plus tard, des cartes plus complexes peuvent être utilisées pour construire des systèmes plus complexes. Lorsque vous connectez physiquement la bande de LED adressables à la carte Arduino, vous devez vous assurer que quelques conditions sont remplies :
- En raison de la faible immunité au bruit, les conducteurs de connexion de la ligne de données doivent être aussi courts que possible (essayez de les faire à moins de 10 cm) ;
- Connectez la ligne de données à une sortie numérique libre de la carte Arduino - elle sera indiquée plus tard par le logiciel ;
- En raison de la forte consommation d'énergie, il n'est pas nécessaire d'alimenter la bande à partir de la carte - des alimentations séparées sont prévues à cet effet.
La ligne d'alimentation commune entre la bande et l'Arduino doit être connectée.
Principes de base du contrôle logiciel du WS2812B
Il a déjà été mentionné que pour contrôler la puce WS2812B, il est nécessaire de générer des impulsions d'une certaine longueur avec une grande précision. Dans le langage Arduino, il existe des commandes pour former de courtes impulsions delayMicrosecondes и micros. Le problème est que la résolution de ces commandes est de 4 microsecondes. Cela signifie qu'il n'est pas possible de former les délais avec une précision donnée. Il est nécessaire d'utiliser les outils C++ ou Assembler. Il est également possible de contrôler la bande de LED adressables via Arduino à l'aide de bibliothèques spécialement créées à cet effet. L'introduction commence par Blink, un programme qui fait clignoter les éléments émetteurs de lumière.
FastLed
Cette bibliothèque est polyvalente. En plus du ruban adressable, il prend en charge de nombreux dispositifs, notamment les rubans contrôlés par SPI. C'est très puissant.
Vous devez d'abord connecter la bibliothèque. Ceci est fait avant le bloc de configuration, et la chaîne ressemble à ceci :
#include
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 la bande avec laquelle le script va fonctionner :
void setup() {
FastLED.addLeds< WS2812B, 7, RGB>(strip, 15) ;
int g ;
}
Le paramètre RGB définit l'ordre d'alternance des couleurs, 15 signifie le nombre de LED, 7 est le numéro de la sortie affectée au contrôle (il est préférable d'affecter également une constante au dernier paramètre).
Le bloc de boucle commence par une boucle qui écrit séquentiellement dans chaque section du tableau Red (lueur rouge) :
pour (g=0 ; g< 15;g++)
{bande[g]=CRGB::Red;}
Ensuite, le tableau généré est envoyé au luminaire :
FastLED.show() ;
Délai de 1000 millisecondes (une seconde) :
delay(1000) ;
Ensuite, tous les éléments peuvent être désactivés de la même manière, en y inscrivant du noir.
pour (int g=0 ; g< 15;g++)
{bande[g]=CRGB::Black;}
FastLED.show() ;
delay(1000) ;
Après avoir compilé et chargé le sketch, le ruban clignote pendant 2 secondes. Si vous voulez contrôler chaque composante de couleur séparément, au lieu de la chaîne de caractères {bande[g]=CRGB::Red;} plusieurs chaînes de caractères sont utilisées :
{
strip[g].r=100;// définir le niveau de luminescence de l'élément rouge
strip[g].g=11;// même chose pour le vert
strip[g].b=250;// même chose pour le bleu
}
NeoPixel
Cette bibliothèque ne fonctionne qu'avec les NeoPixel Ring LEDs, mais elle est moins gourmande en ressources et ne contient que l'essentiel. En langage Arduino, le programme ressemble à ceci :
#include
Comme dans le cas précédent, la bibliothèque est incluse 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.
Le lenta est initialisé dans le bloc de configuration :
void setup() {
lenta.begin ()
}
Dans le bloc de boucle, tous les éléments sont allumés en rouge, une variable est transmise à la bande et un délai de 1 seconde est créé :
for (int y=0 ; y<15;y++)// 15 - nombre d'éléments dans le lenta
{lenta.setPixelColor(y, lenta.Color(255,0,0))} ;
{lenta.show() ;
delay(1000) ;
Le lenta cesse de briller en noir :
for (int y=0 ; y< 15;y++)
{ lenta.setPixelColor(y, lenta.Color(0,0,0))} ;
lenta.show() ;
delay(1000) ;
Leçon vidéo : exemples d'effets visuels utilisant des rubans adressables.
Une fois que vous avez appris à faire clignoter des LED, vous pouvez continuer à apprendre à créer des effets de couleur, y compris les populaires arc-en-ciel et aurores boréales avec des transitions fluides. Le WS2812B et les LED adressables d'Arduino offrent des possibilités presque illimitées à cet égard.