Julien De Bona
Free Software, Cooking, and Everything


Expérience avec une LED tricolore

Publié le 2014-11-14.

Le matériel pour ces expériences vient de l'Ultimate Microcontroller Kit en vente chez Radio Shack. J'en utilise:

  • Un Arduino Uno
  • La breadboard
  • La LED tricolore
  • Les câbles

Faire varier les couleurs

La LED tricolore incluse dans le kit a 4 broches, dans l'ordre:

  1. La cathode rouge
  2. Une anode commune (la plus longue)
  3. La cathode verte
  4. La cathode bleue

Cette configuration nécessite de connecter l'anode à une tension de 5 V, et les 3 cathodes aux broches 9, 10 et 11, qui gèrent PWM; La gestion de l'intensité est l'inverse de ce qu'on ferait avec des LEDs simples: mettre la broche à 0 V va créér une différence de potentiel de 5 V et donner l'intensité maximale; la mettre à 5 V ne donne aucune différence de potentiel et la composante correspondante reste éteinte. Pour protéger les 3 LEDs qui composent le package complet, il suffit d'une seule résistance entre l'anode et l'alimentation. J'ai utilisé la plus faible: 330 Ohms.

Pour faire varier la couleur, charger le sketch suivant dans l'Arduino.

int cycle;
unsigned long lastTime;
void setup() {
    pinMode(9,OUTPUT);
    pinMode(10,OUTPUT);
    pinMode(11,OUTPUT);
    cycle = 0;
    lastTime = millis();
}

void loop() {
    unsigned long now = millis();
    int red,green,blue;
    int total;
    if (now - 50 > lastTime) {
        lastTime = now;
        cycle++;
        cycle %= (6283);
        red   = 127 * (1 + sin(0 + 3 * cycle / 1000.0));
        green = 127 * (1 + sin(1 + 4 * cycle / 1000.0));
        blue  = 127 * (1 + sin(2 + 5 * cycle / 1000.0));
        total = red + green + blue;
        red   = 255.0 * red / total;
        blue  = 255.0 * blue / total;
        green = 255.0 * green / total;
        analogWrite(9,255-red);
        analogWrite(10,255-green);
        analogWrite(11,255-blue);
    }
}

Quelques explications sur le sketch: la variable cycle est incrémentée toutes les 50 ms. Je force la remise à zéro à un multiple de 2 Pi pour être sûr que les transitions soient homogènes. Sur base de cette valeur, je génère trois sinusoïdes. Leurs fréquences sont premières entre elles pour varier les motifs au maximum et leurs phases initiales sont décalées pour éviter de se retrouver par moment avec les 3 composantes éteintes. Les valeurs sont ensuite normalisées pour que leur total soit constamment de 255.

Une fois que j'ai ces sinusoides entre -1 et 1, je les ramène à une valeur entre 0 et 255.  Il faut également veiller à travailler en virgule flotante pour éviter les erreurs d'arrondi.


tags: arduino

Quelques tags ...