LED RGB #Arduino2

Dans ce tutoriel vous allez apprendre à controller la couleur d'une LED RGB (Red, Blue, Green) avec un Arduino et 3 potentiomètres en utilisant la technique de modulation par largeur d'impulsions (PWM)

Tutoriel écrit par Guy geek et consulté 24199 fois

1

Ce dont vous aurez besoin

  • Un Arduino UNO
  • 3 résistances de 220 Ohms
  • 3 potentiomètres de 10 kOhms
  • Une LED RGB

Partie 1: controller la couleur d'une LED

Ouvrez l'IDE Arduino ou téléchargez-le si vous ne l'avez pas encore installé.
Copiez-collez le programme suivant dans un nouveau sketch:

// Init the Pins used for PWM
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 11;
 
// Init the Pins used for 10K pots
const int redPotPin = 0;
const int greenPotPin = 1;
const int bluePotPin = 2;
 
// Init our Vars
int currentColorValueRed;
int currentColorValueGreen;
int currentColorValueBlue;
 
void setup()
{
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
}
 
void loop()
{
// Read the voltage on each analog pin then scale down to 0-255 and inverting the value for common anode
  currentColorValueRed = (255 - map( analogRead(redPotPin), 0, 1024, 0, 255 ) );
  currentColorValueBlue = (255 - map( analogRead(bluePotPin), 0, 1024, 0, 255 ) );
  currentColorValueGreen = (255 - map( analogRead(greenPotPin), 0, 1024, 0, 255 ) );
 
// Write the color to each pin using PWM and the value gathered above
  analogWrite(redPin, currentColorValueRed);
  analogWrite(bluePin, currentColorValueBlue);
  analogWrite(greenPin, currentColorValueGreen);
 
}

Réalisez le circuit suivant : 

Dans la réalité, ça donne ça : 

Sur le schéma j'utilise une breadboard. Très pratique pour réaliser des circuits sans souder. Pour comprendre son fonctionnement vous pouvez aller voir ce tutoriel

Branchez ensuite votre Arduino en USB et téléversez votre programme. 
Magie ! Vous pouvez controller la couleur de votre LED en tournant les potentiomètres !

Partie 2: explications

Les variables : 

Au tout début du programme, une dizaine de lignes sont consacrées à la déclaration de variables. Si vous ne savez pas ce qu'est une variable, c'est un peu comme un seau dans lequel on vient stocker des éléments. Ces éléments peuvent être des mots ("String"), des entiers ("int"), des décimaux ... On utilise les variables pour enregistrer une information dont on aura besoin plus tard. Le langage de l'Arduino nous impose de définir le type d'éléments qu'une variable va pouvoir contenir. Un peu comme nous collions sur notre seau  une étiquette précisant le type d'objets qu'il peut contenir : de l'eau, des cailloux, du sable ... Et l'Arduino déteste que l'on mette des cailloux dans un seau destiné à de l'eau. Si vous définissez une variable d'entier (int) et que vous y stockez un mot, vous aurez un message d'erreur. 
La déclaration d'une variable se fait toujours de la même façon.
On commence par définir le type, par exemple "int", puis le nom de la variable "redPin" et enfin sa valeur ici "9".
Le nom est totalement arbitraire et sert uniquement à rendre le programme plus lisible. On aurait pu choisir "pinRouge" ou  "voiture". Il y a seulement quelques règles à respecter : Le nom d'une variable ne doit pas contenir d'espaces ou de symboles bizarres, doit être en minuscule, commencer chaque nouveau mot par une majuscule,  être le plus explicite possible sur sa fonction.
Une fois la variable déclarée, le mot "redPin" sera toujours remplacé par le chiffre "9", d'autant plus que la déclaration a été précédée du mot clef "const" qui permet de prévenir l'Arduino que la variable ne changera jamais (on ne touchera pas au contenu de notre seau). 
Ceci nous permet de coder notre programme sans nous soucier de la pin où est branchée notre Led rouge. 

Les LEDS RGB et la fonction analogWrite: 

Au premier coup d'oeil, les LEDS RGB (ou RVB en français) ressemblent à de simples LEDS. Elles sont en réalité composées de 3 LEDS, une rouge, une verte et une bleue ! 
Les LEDS RGB possèdent 4 branches et peuvent être à "anode commune" ou "cathode commune". Dans le premier cas, la branche la plus longue doit être reliée de façon permanente au + 5V de votre Arduino.  Dans le deuxième ("cathode commune"), la branche la plus longue doit être reliée au port GND (0V). Dans tous les cas les 3 autres branches servent à commander la couleur verte pour la plus grande, bleu et rouge pour la plus petite. 

En contrôlant la luminosité de chacune des LEDS de façon indépendante, on mélange les couleurs comme sur une palette de peinture. Ce système RVB (initiales de Rouge-Vert-Bleu) permet d'obtenir par mélange toutes les couleurs et est utilisé absolument partout : TV, écran LCD, capteurs ...

Si nous appliquons la même tension sur toutes les bornes (sur les 3 LEDS), la couleur résultante est le blanc. Si nous coupons la LED bleue, la couleur résultante est le jaune. 
Petit problème : en allumant ou éteignant les 3 bornes de notre LED RGB, nous ne pourrons obtenir que 7 couleurs (les 7 qui apparaissent sur l'image ci-dessus). Il faut pouvoir mélanger les luminosités de façon plus subtile.

Pour pouvoir controller la tension aux bornes des 3 branches RVB de la LED de façon plus précise, il faut utiliser les pins PWM (marqués par un ~) et la fonction analogWrite qui permet de définir une tension entre 0 et 255 (0 correspondant à 0V et 255 à 5V).

La fonction analogWrite fonctionne de la même manière que la fonction digitalWrite de mon premier tutoriel à la différence qu'elle permet de graduer la valeur de sortie appliquée à la pin. C'est la différence entre les mondes "analogiques" et "numériques". Le monde numérique est celui des ordinateurs : il n'y a que des 0 et des 1, de la lumière ou du noir, du son ou pas de son, 0V (LOW) ou 5V (HIGH). Le monde analogique est plus proche de notre monde, moins binaire, il y a des 0, des 0,33, des 2, des couleurs, de la musique, des signaux avec une infinité de formes.  Bref en "digital", une sortie ne peut égale à 0 ou 5V, en "analog", elle peut prendre n'importe quelle valeur entre 0 et 5V.
Par exemple : pour obtenir de l'orange, il faut beaucoup de rouge (255, le maximum), un peu de vert (mettons 170), pas du tout de bleu (0). Cela nous donne en couleur RGB : (255,170,0) et en fonction Arduino  :

analogWrite(redPin, 255
analogWrite(greenPin,170)
analogWrite(bluePin, 0);

Pour vérifier une couleur directement sur votre navigateur internet, vous pouvez utiliser une application de palette en ligne comme celle-ci. Simple non ?

Les potentiomètres et le fonction analogRead:

Dans ce tutoriel nous utilisons des potentiomètres pour controller la couleur de la LEDS. Nous aurions pu nous contenter d'écrire dans notre programme la couleur de la LED que nous souhaitons... mais cela permet de rendre le programme plus "interactif".
Un potentiomètre est une resistance variable à trois bornes. Lorsque le tourne dans un sens, la resistance augmente, dans l'autre elle diminue. Grâce à la fonction analogRead et les pins "Analog IN" il est possible de lire la valeur de cette resistance. Cette valeur, comprise entre 0 et 1024 est ensuite convertie en une valeur entre 0 et 255 par la fonction map qui réalise une règle de 3. 
0 devient 0, 1024 devient 255 et 512 devient 127 environ...
La valeur finale est stockée dans une variable temporaire qui va ensuite être utilisée pour définir la quantité de couleur de chaque pin de notre LED.

Partie 3 : s'entrainer

Voici quelques idées d'améliorations pour vous entrainer :

  • Imaginez une couleur, retrouvez son code RGB sur internet, puis modifiez le programme pour l'afficher sur la LED, sans utiliser les potentiomètres
  • Faites clignoter la LED une seconde en rouge, puis une seconde en vert, puis une seconde en bleu en utilisant la fonction delay(1000)
  • Placez la LED dans une balle de ping-pong

Et n'hésitez pas à poser des questions en commentaire !

Commentaires

Photos d'internautes