La LED RVB permet d’obtenir un large panel de couleurs. Elle est composée de trois mini LEDs, rouge, verte et bleue (d’où leur nom RVB ou RGB, en anglais); suffisamment proches pour que leurs lumières se mélangent. De ce fait, elle se pilote de la même façon que trois LEDs indépendantes.
Une LED RVB peut être utilisé, par exemple, pour créer une ambiance lumineuse à la maison ou pour donner des informations à l’utilisateur sur l’état d’un système (Vert – tout va bien, Bleu – traitement, Rouge – il y a une erreur).
Matériel
- Arduino x1
- Câbles M/M x3
- Carte de prototypage x1
- Résistance 220 Ohm x1
- Led RVB x1
Schéma de montage d’une LED RVB
Les broches de contrôle des couleurs (R,V,B) sont connectées à des sorties PWM de la carte Arduino. Si vous utilisez d’autres sorties que les sorties PWM (les sorties numériques), les couleurs transitoires n’apparaîtront pas et la LED passera d’une couleur à un autre.
Généralement, les valeurs de courant supporté par les LEDs ne sont pas disponibles. N’oubliez pas de mettre une résistance entre la cathode et la masse de l’Arduino pour protéger la LED.
Code de gestion d’une LED RVB
Dans cette exemple, nous passons d’une couleur à l’autre progressivement. Pour cela, nous faisons varier les valeurs R,G,B que nous envoyons aux broches correspondantes.
Dans ce cas, il est plus pratique et lisible d’utiliser une fonction qui attribue la valeur PWM à la sortie correcte pour chaque couleur. Pour ce faire, nous créons la fonction lightRGB qui prend 3 entiers en entrée, qui sont la commande pwm, et écrivons cette valeur sur les broches RVB.
void lightRGB(int r, int g, int b){ analogWrite(RED, r); analogWrite(GREEN, g); analogWrite(BLUE, b); }
Une fois la fonction créée, elle peut être utilisée dans le code principal (fonction loop) et contrôler trois sorties avec une ligne de code. Voici le code complet.
// Pins #define BLUE 3 #define GREEN 5 #define RED 6 #define delayTime 10 // fading time int MAX_LUM = 255; int redVal,greenVal,blueVal; void setup() { pinMode(RED, OUTPUT); pinMode(GREEN, OUTPUT); pinMode(BLUE, OUTPUT); digitalWrite(RED, HIGH); digitalWrite(GREEN, LOW); digitalWrite(BLUE, LOW); } void loop() { redVal = MAX_LUM; // choose a Val between 1 and 255 to change the color. greenVal = 0; blueVal = 0; for(int i = 0; i < MAX_LUM; i += 1) // fades out red bring green full when i=255 { redVal -= 1; greenVal += 1; lightRGB(redVal, greenVal, blueVal); delay(delayTime); } redVal = 0; greenVal = MAX_LUM; blueVal = 0; for(int i = 0; i < MAX_LUM; i += 1) // fades out green bring blue full when i=255 { greenVal -= 1; blueVal += 1; lightRGB(redVal, greenVal, blueVal); delay(delayTime); } redVal = 0; greenVal = 0; blueVal = MAX_LUM; for(int i = 0; i < MAX_LUM; i += 1) // fades out blue bring red full when i=255 { // The following code has been rearranged to match the other two similar sections blueVal -= 1; redVal += 1; lightRGB(redVal, greenVal, blueVal); delay(delayTime); } } void lightRGB(int r, int g, int b){ analogWrite(RED, r); analogWrite(GREEN, g); analogWrite(BLUE, b); }
Contrôler une LED RGB semble trivial mais c’est un excellent exercice lorsque vous commencez à jouer avec Arduino. Un RVB peut être peu utile pour créer des effets de lumière. Dans ce cas, vous devrez peut-être utiliser des bandes de LED adressables.
Application
- Modifier la couleur de la LED en fonction de la température de la pièce
- Créer une lampe qui change de couleur pilotée par une télécommande IR
Source
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie
Je ne comprends pas à quel fonction sert ce passage ,
void lightRGB(int r, int g, int b){
analogWrite(RED, r);
analogWrite(GREEN, g);
analogWrite(BLUE, b);
pourriez-vous m’éclairer ? Merci beaucoup
Bonjour, c’est une fonction qui sert à définir la couleur d’une led RGB avec une seule ligne de code.
Bonjour,
Est-ce que cela fonctionne t’il avec une bande lumineuse type led RGB avec un arduino
pour effectuer un changement couleur ?
Si non, pouvez-vous me donner l’info pour ruban leds.
Cordialement
Merci d’avance
Cela devrait fonctionner oui