Arduino - Bande de LED WS2812B
Dans ce tutoriel, nous allons apprendre à utiliser Arduino pour contrôler une bande LED RGB WS2812B. Avec une seule broche Arduino :
- Arduino peut contrôler la couleur de chaque LED sur la bande de LED individuellement.
- Arduino peut changer la luminosité de chaque LED sur la bande de LED individuellement.
Préparation du matériel
Or you can buy the following sensor kits:
1 | × | DIYables Sensor Kit (30 sensors/displays) | |
1 | × | DIYables Sensor Kit (18 sensors/displays) |
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.
À propos de la bande LED RGB WS2812B
Brochage
La bande de LED RGB WS2812B possède trois broches :
- Broche GND : doit être connectée à GND (0V)
- Broche VCC : doit être connectée à 5V de l'alimentation externe
- Broche Din : est la broche qui reçoit le signal de commande. Elle doit être connectée à une broche Arduino.
※ Note:
L'ordre des broches peut varier selon les fabricants. Utilisez TOUJOURS les étiquettes imprimées sur la bande LED.
Diagramme de câblage
This image is created using Fritzing. Click to enlarge image
Comment programmer pour la bande LED RGB WS2812B
Il existe deux bibliothèques qui peuvent être utilisées pour contrôler la bande de LED WS2812B :
- Bibliothèque Adafruit NeoPixel.
- Bibliothèque FastLED.
Ce tutoriel utilisera la bibliothèque Adafruit NeoPixel.
- Déclarez un objet WS2812B
#define PIN_WS2812B 4 // Broche Arduino qui se connecte à WS2812B
#define NUM_PIXELS 30 // Le nombre de LEDs (pixels) sur WS2812B
Adafruit_NeoPixel WS2812B(NUM_PIXELS, PIN_WS2812B, NEO_GRB + NEO_KHZ800);
- Initialise le WS2812B
WS2812B.begin(); // INITIALISER l'objet de bande WS2812B (REQUIS)
- Définissez la couleur de chaque LED individuelle (appelée pixel).
WS2812B.setPixelColor(pixel, WS2812B.Color(255, 0, 0));
- Réglez la luminosité de toute la bande.
WS2812B.setBrightness(100); // une valeur de 0 à 255
※ Note:
- WS2812B.setBrightness() est utilisé pour tous les pixels sur la bande LED. Pour régler la luminosité de chaque pixel individuellement, nous pouvons ajuster la valeur de la couleur.
- Les valeurs définies par WS2812B.setBrightness() et WS2812B.setPixelColor() ne prennent effet que lorsque WS2812B.show() est appelé.
Code Arduino
Le code ci-dessous effectue :
- Transformez les pixels en vert un par un avec un délai entre chaque pixel
- Éteignez tous les pixels pendant deux secondes
- Allumez tous les pixels en rouge simultanément pendant deux secondes
- Répétez le processus ci-dessus à l'infini
/*
* Ce code Arduino a été développé par newbiely.fr
* Ce code Arduino est mis à disposition du public sans aucune restriction.
* Pour des instructions complètes et des schémas de câblage, veuillez visiter:
* https://newbiely.fr/tutorials/arduino/arduino-ws2812b-led-strip
*/
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
#define PIN_WS2812B 4 // Arduino pin that connects to WS2812B
#define NUM_PIXELS 30 // The number of LEDs (pixels) on WS2812B
#define DELAY_INTERVAL 250 // 250ms pause between each pixel
Adafruit_NeoPixel WS2812B(NUM_PIXELS, PIN_WS2812B, NEO_GRB + NEO_KHZ800);
void setup() {
WS2812B.begin(); // INITIALIZE WS2812B strip object (REQUIRED)
}
void loop() {
WS2812B.clear(); // set all pixel colors to 'off'. It only takes effect if pixels.show() is called
// turn pixels to green one by one with delay between each pixel
for (int pixel = 0; pixel < NUM_PIXELS; pixel++) { // for each pixel
WS2812B.setPixelColor(pixel, WS2812B.Color(0, 255, 0)); // it only takes effect if pixels.show() is called
WS2812B.show(); // send the updated pixel colors to the WS2812B hardware.
delay(DELAY_INTERVAL); // pause between each pixel
}
// turn off all pixels for two seconds
WS2812B.clear();
WS2812B.show(); // send the updated pixel colors to the WS2812B hardware.
delay(2000); // off time
// turn on all pixels to red at the same time for two seconds
for (int pixel = 0; pixel < NUM_PIXELS; pixel++) { // for each pixel
WS2812B.setPixelColor(pixel, WS2812B.Color(255, 0, 0)); // it only takes effect if pixels.show() is called
}
WS2812B.show(); // send the updated pixel colors to the WS2812B hardware.
delay(2000); // on time
// turn off all pixels for one seconds
WS2812B.clear();
WS2812B.show(); // send the updated pixel colors to the WS2812B hardware.
delay(2000); // off time
}
Étapes rapides
- Naviguez vers l'icône Libraries sur la barre gauche de l'IDE Arduino.
- Recherchez "NeoPixel NeoPixel", puis trouvez la bibliothèque WS2812B par Adafruit
- Cliquez sur le bouton Install pour installer la bibliothèque NeoPixel.
- Copiez le code ci-dessus et ouvrez-le avec Arduino IDE
- Cliquez sur le bouton Upload dans Arduino IDE pour téléverser le code vers Arduino
- Observez l'effet de la LED
※ Note:
Pour tout effet LED complexe, nous proposons le service de programmation payant