Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Comment contrôler les LED adressables individuellement WS2812B à l'aide d'Arduino

Dans ce didacticiel, nous apprendrons à contrôler des LED RVB adressables individuellement ou une bande LED WS2812B à l'aide d'Arduino. Vous pouvez regarder la vidéo suivante ou lire le didacticiel écrit ci-dessous pour plus de détails.

Aperçu

Nous allons d'abord expliquer le principe de fonctionnement à travers quelques exemples de base, puis jeter un œil au projet Arduino vraiment cool utilisant ces LED, une table basse LED interactive DIY. La table basse comprend des LED WS2812B, des capteurs de proximité infrarouges pour détecter des objets et un module Bluetooth HC-05 pour contrôler les couleurs via une application Android personnalisée. Ce projet est en fait une collaboration entre moi et Marija de la chaîne YouTube Creativity Hero.

Fonctionnement des LED WS2812B

Commençons par regarder de plus près la bande LED. Il se compose de LED RVB de type 5050 dans lesquelles le circuit intégré de pilote de LED WS2812B très compact est intégré.

En fonction de l'intensité des trois LED rouges, vertes et bleues individuelles, nous pouvons simuler la couleur de notre choix.

Ce qui est génial avec ces LED, c'est que nous pouvons contrôler même toute la bande LED avec une seule broche de notre carte Arduino. Chaque LED a trois connecteurs à chaque extrémité, deux pour l'alimentation et un pour les données. La flèche indique le sens du flux de données. Le pad de sortie de données de la LED précédente est connecté au pad d'entrée de données de la LED suivante. Nous pouvons couper la bande à la taille que nous voulons, ainsi que distancer les LED à l'aide de quelques fils.

En ce qui concerne l'alimentation, ils fonctionnent sur 5V et chaque LED rouge, verte et bleue consomme environ 20mA, soit un total de 60mA pour chaque LED à pleine luminosité. Notez que lorsque l'Arduino est alimenté via USB, la broche 5 V ne peut gérer qu'environ 400 mA, et lorsqu'elle est alimentée à l'aide du connecteur d'alimentation cylindrique, la broche 5 V peut gérer environ 900 mA.

Si vous utilisez plus de LED et que la quantité de courant qu'elles consomment dépasse les limites mentionnées ci-dessus, vous devez utiliser une alimentation 5V séparée. Dans ce cas, vous devez également connecter les deux lignes de masse entre elles. De plus, il est recommandé d'utiliser une résistance d'environ 330 Ohms entre l'Arduino et la broche de données de la bande LED afin de réduire le bruit sur cette ligne, ainsi qu'un condensateur d'environ 100 uF entre le 5 V et la masse pour lisser l'alimentation. .

Exemples de LED Arduino et WS2812B

Exemple 1

Maintenant, à titre d'exemple, je vais utiliser une longue bande de 20 LED, connectée à l'Arduino via une résistance de 330 Ohms et alimentée par une alimentation 5V séparée, comme expliqué ci-dessus. Pour la programmation de l'Arduino, nous utiliserons la bibliothèque FastLED. Il s'agit d'une bibliothèque excellente et bien documentée qui permet un contrôle facile des LED WS2812B.

Vous pouvez obtenir les composants nécessaires pour cet exemple à partir des liens ci-dessous :

  • Bande LED WS2812B  ………………….. 
  • Carte Arduino ……………………………
  • Alimentation CC 5 V 6 A ……………… 

Voici le code source Arduino pour le premier exemple :

#include <FastLED.h>

#define LED_PIN     7
#define NUM_LEDS    20

CRGB leds[NUM_LEDS];

void setup() {

  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
  
}

void loop() {
  
  leds[0] = CRGB(255, 0, 0);
  FastLED.show();
  delay(500);  
  leds[1] = CRGB(0, 255, 0);
  FastLED.show();
  delay(500);
  leds[2] = CRGB(0, 0, 255);
  FastLED.show();
  delay(500);
  leds[5] = CRGB(150, 0, 255);
  FastLED.show();
  delay(500);
  leds[9] = CRGB(255, 200, 20);
  FastLED.show();
  delay(500);
  leds[14] = CRGB(85, 60, 180);
  FastLED.show();
  delay(500);
  leds[19] = CRGB(50, 255, 20);
  FastLED.show();
  delay(500);
}Code language: Arduino (arduino)

Description :  Nous devons donc d'abord inclure la bibliothèque FastLED, définir la broche à laquelle les données de la bande LED sont connectées, définir le nombre de LED, ainsi que définir un tableau de type CRGB. Ce type contient les LED, avec trois membres de données d'un octet pour chacun des trois canaux de couleur rouge, vert et bleu.

Dans la section de configuration, nous avons juste besoin d'initialiser le FastLED avec les paramètres définis ci-dessus. Maintenant, c'est la boucle principale, nous pouvons contrôler nos LED comme nous le voulons. En utilisant la fonction CRGB, nous pouvons régler n'importe quelle LED sur n'importe quelle couleur en utilisant trois paramètres de couleur rouge, verte et bleue. Pour que le changement se produise sur les LED, nous devons appeler la fonction FastLED.show().

Exemple 2

En utilisant des boucles "for", nous pouvons facilement créer des animations.

Voici le code source Arduino pour le deuxième exemple :

#include <FastLED.h>

#define LED_PIN     7
#define NUM_LEDS    20

CRGB leds[NUM_LEDS];

void setup() {

  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);

}

void loop() {

  for (int i = 0; i <= 19; i++) {
    leds[i] = CRGB ( 0, 0, 255);
    FastLED.show();
    delay(40);
  }
  for (int i = 19; i >= 0; i--) {
    leds[i] = CRGB ( 255, 0, 0);
    FastLED.show();
    delay(40);
  }
}Code language: Arduino (arduino)

Ici, la première boucle "for" allume les 20 LED en bleu, de la première à la dernière LED avec un retard de 40 millisecondes. La boucle « for » suivante rallume les 20 LED, mais cette fois en couleur rouge et dans l'ordre inverse, de la dernière à la première LED.

La bibliothèque FastLED propose de nombreuses autres fonctions qui peuvent être utilisées pour créer des animations et des jeux de lumière vraiment intéressants. Il ne reste donc qu'à votre imagination de faire briller votre prochain projet LED.

Table basse LED interactive utilisant les LED WS2812B

Jetons maintenant un coup d'œil au projet de table basse LED interactive DIY que j'ai mentionné au début. C'était donc un projet de collaboration entre moi et Marija de Creativity Hero.

Vous pouvez consulter l'article de son site Web où elle explique tout le processus de fabrication de la table, à partir de la découpe et de l'assemblage de la construction en bois, jusqu'à la soudure et la connexion de toutes les pièces électroniques ensemble. Ici, je vais vous expliquer comment fonctionne la partie électronique, comment construire l'application Android personnalisée et programmer la carte Arduino.

Voici le schéma de circuit complet de ce projet.

Ainsi, la table se compose de 45 LED adressables, de 45 capteurs de proximité infrarouges et d'un module Bluetooth HC-05, tous connectés à une carte Arduino Mega. Le circuit est alimenté par une alimentation 5V 6A.

Vous pouvez obtenir les composants nécessaires pour cet exemple à partir des liens ci-dessous :

  • Bande LED WS2812B  ………………….. 
  • Capteur de proximité infrarouge …………………… 
  • Module Bluetooth HC-05 …….…… 
  • Carte Arduino ……………………………
  • Alimentation CC 5 V 6 A ……………… 

En relation : Comment utiliser une LED RVB avec Arduino | Tutoriel

Codes sources

Voici le code Arduino pour ce projet et si nous excluons la fonction de contrôle des couleurs Bluetooth, nous pouvons remarquer que le code est en fait très simple.

#include "FastLED.h"

#define NUM_LEDS 45
#define LED_PIN 2
#define COLOR_ORDER GRB

CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds<WS2812, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);
  FastLED.setBrightness(brightness);
  // Set the 45 proximity sensors pins as inputs, from digital pin 3 to pin 48
  for (int pinNo = 0 + 3; pinNo <= 45 + 3; pinNo++) {
    pinMode(pinNo, INPUT);
  }
}

void loop() {
  for (int pinNo = 0; pinNo <= NUM_LEDS-1; pinNo++) {
    leds[pinNo] = CRGB( 0, 255, 0);    // Set all 45 LEDs to green color 
    // If an object is detected on top of the particular sensor, turn on the particular led
    if ( digitalRead(pinNo + 3) == LOW ) {
      leds[pinNo] = CRGB( 0, 0, 255); // Set the reactive LED to bluee
    }
  }
  FastLED.show(); // Update the LEDs
  delay(20);
}Code language: Arduino (arduino)

Description : Nous devons d'abord définir les paramètres de base comme expliqué précédemment et définir les 45 broches des capteurs de proximité comme entrées.

Dans la boucle principale utilisant une seule boucle "for", nous définissons toutes les LED sur une couleur particulière et vérifions également si le capteur de proximité a détecté un objet. Si c'est vrai, ou un état logique BAS dans ce cas, la couleur réactive particulière sera définie sur la LED particulière. À la fin, en utilisant la fonction FastLED.show(), nous mettons à jour les couleurs des LED.

Pour inclure la fonction de contrôle des couleurs Bluetooth, nous devons ajouter quelques lignes de code supplémentaires et créer l'application Android. J'ai déjà des tutoriels séparés sur l'utilisation du module Bluetooth HC-05 avec Arduino et sur la création de votre propre application Android à l'aide de l'application en ligne MIT App Inventor, vous pouvez donc toujours les consulter pour plus de détails.

Voici comment fonctionne l'application Android. Il se compose d'une image de palette de couleurs à partir de laquelle nous pouvons sélectionner les couleurs, de deux boutons de contrôle à partir desquels nous pouvons sélectionner si la couleur choisie sera appliquée aux LED réactives ou d'arrière-plan et d'un curseur pour régler la luminosité.

Si nous jetons un coup d'œil aux blocs de l'application, nous pouvons voir ce qui se passe lorsque nous touchons la toile où l'image de la palette de couleurs est placée. En utilisant les blocs .GetPixelColor, nous obtenons les valeurs Rouge, Vert et Bleu pour la couleur sélectionnée et en utilisant le bloc Bluetooth SendText, nous envoyons ces informations à l'Arduino sous forme de texte.

En fonction de la case à cocher sélectionnée, nous envoyons un premier caractère ou un marqueur différent qui aide lors de la réception du texte sur l'Arduino. La même chose se produit lorsque nous modifions la position du curseur, une valeur de 10 à 100 est envoyée à l'Arduino sous forme de texte, avec le marqueur "3" devant.

Vous pouvez télécharger l'application Android ci-dessous, ainsi que le fichier de projet MIT App Inventor :

DIY_Reactive_LED_Table_Control

1 fichier(s) 0,00 Ko Télécharger

Fichier de projet de l'inventeur de l'application DIY_Reactive_LED_Table_Control MIT

1 fichier(s) 208,06 Ko Télécharger

Voici le code Arduino :

#include <SoftwareSerial.h>

#include "FastLED.h"

#define NUM_LEDS 45
#define LED_PIN 2
#define COLOR_ORDER GRB

CRGB leds[NUM_LEDS];

SoftwareSerial Bluetooth(53, 52); // Arduino(RX, TX) - Bluetooth (TX, RX)

// Initial background color 
int backR = 100;
int backG = 50;
int backB = 10;

// Initial reactive color 
int reactiveR = 10;
int reactiveG = 50;
int reactiveB = 100;

int brightness = 50; // Initial brightness

String dataIn = "";

void setup() {
  FastLED.addLeds<WS2812, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);
  FastLED.setBrightness(brightness);
  Serial.begin(38400);
  Bluetooth.begin(38400); // Default baud rate of the Bluetooth module

  for (int pinNo = 0 + 3; pinNo <= 45 + 3; pinNo++) {
    pinMode(pinNo, INPUT);
  }
}

void loop() {
  if (Bluetooth.available() > 0) {
    dataIn = Bluetooth.readString();
    delay(20);
    if (dataIn.startsWith("1")) {
      delay(10);
      String stringR = dataIn.substring(dataIn.indexOf("R") + 1, dataIn.indexOf("G"));
      reactiveR = stringR.toInt();
      String stringG = dataIn.substring(dataIn.indexOf("G") + 1, dataIn.indexOf("B"));
      reactiveG = stringG.toInt();
      String stringB = dataIn.substring(dataIn.indexOf("B") + 1, dataIn.indexOf("E"));
      reactiveB = stringB.toInt();
    }
    else if (dataIn.startsWith("2")) {
      String stringR = dataIn.substring(dataIn.indexOf("R") + 1, dataIn.indexOf("G"));
      backR = stringR.toInt();
      String stringG = dataIn.substring(dataIn.indexOf("G") + 1, dataIn.indexOf("B"));
      backG = stringG.toInt();
      String stringB = dataIn.substring(dataIn.indexOf("B") + 1, dataIn.indexOf("E"));
      backB = stringB.toInt();
    }
    else if (dataIn.startsWith("3")) {
      String stringBrightness = dataIn.substring(dataIn.indexOf("3") + 1, dataIn.length());
      brightness = stringBrightness.toInt();
      FastLED.setBrightness(brightness);
    }
  }

  for (int pinNo = 0; pinNo <= NUM_LEDS-1; pinNo++) {
    leds[pinNo] = CRGB( backR, backG, backB);
    if ( digitalRead(pinNo + 3) == LOW ) {
      leds[pinNo] = CRGB( reactiveR, reactiveG, reactiveB);
    }
  }
  FastLED.show();
  delay(20);
}Code language: Arduino (arduino)

Description : Nous devons d'abord définir la communication série entre l'Arduino et le module Bluetooth HC-05, ou les broches auxquelles le module est connecté. Dans la section de configuration, nous devons définir le débit en bauds auquel ce module fonctionne. Ensuite, dans la boucle principale à l'aide de la fonction Bluetooth.available (), nous vérifions s'il y a des données entrantes du Smartphone. Si c'est vrai, en utilisant la fonction Bluetooth.readString(), nous recevons les données sous forme de chaîne. Ensuite, en utilisant la fonction .startsWith(), nous vérifions le premier caractère ou le marqueur et savons ainsi si nous voulons changer la couleur réactive, l'arrière-plan ou la luminosité.

En utilisant la fonction .substring(), nous extrayons les valeurs Rouge, Vert et Bleu du texte reçu et les convertissons en nombres entiers. Ces valeurs sont ensuite utilisées dans la boucle "for" ci-dessous qui définit la couleur et allume les LED comme expliqué précédemment. De la même manière, nous ajustons la luminosité des LED.

C'est donc tout pour ce tutoriel. N'hésitez pas à poser des questions dans la section des commentaires ci-dessous.


Processus de fabrication

  1. Comment pirater des télécommandes infrarouges
  2. Télécommande universelle utilisant Arduino, 1Sheeld et Android
  3. Centre de contrôle Arduino
  4. Utiliser l'IoT pour contrôler à distance un bras robotique
  5. Arduino avec Bluetooth pour contrôler une LED !
  6. Contrôler Arduino Rover à l'aide de Firmata et de la manette Xbox One
  7. Comment mesurer la masse de la Terre à l'aide d'Arduino
  8. Arduino quadrupède
  9. Comment faire une boussole en utilisant Arduino et Processing IDE