Sorties analogiques d’Arduino. Intensité lumineuse.

Intensité lumineuse avec leds
Intensité lumineuse avec leds

L’objectif de ce projet nous dirige à pouvoir contrôler l’intensité d’une led usant les sorties PWM (signal à rapport cyclique variable) qui correspondent aux pins digitaux (broches) précédés du symbole « ~ » sur notre plaque.

Pour commencer, on changera l’intensité d’une seule led. Après, on fera de même avec trois diodes ( bleue, verte et rouge), et finalement, on variera l’intensité avec une led RBG, fournie des trois couleurs primaires et des résistances intégrées.

Les ampoules ou diodes led sont des dispositifs analogiques, cela implique qu’elles peuvent présenter plusieurs états; c’est à dire, qu’elles peuvent s’illuminer avec différentes intensités et de façon graduelle.

Le microcontrôleur d’ Arduino Uno détiens des convertisseurs analogiques capables de traduire la valeur reçue à travers l’entrée analogique; mais pour les sorties analogiques il doit se servir du signal PWM. Le principe PWM est de construire un signal qui est alternativement LOW et HIGH et de répéter très vite cette alternance. Une led, par exemple, est donc alternativement allumée et éteinte mais le cycle est tellement rapide qui donne l’illusion d’une diode allumée en permanence. Les sorties PWM sur Arduino sont précédés du symbole « ~« .

Varier l’intensité lumineuse d’une diode électroluminescente (led).

Il est nécessaire:

  • Arduino Uno ou équivalent.
  • Une plaque d’essai ou breadboard.
  • Deux fils.
  • Une led.
  • Une résistance de 220 Ohms.

Pour le schéma de ce projet nous allons connecter l’anode (+) au pin ou broche 9 (sortie PWM), et la cathode (-) on la reliera à la masse avec une résistance:

Varier l'intensité lumineuse d'une diode, led avec Arduino
Connexion d’une diode avec Arduino

code:

int intensite = 0;
int croissance = 5;   //Peut être négatif (décroissance)
void setup(){
  pinMode(9, OUTPUT); // LED connectée au pin 9 (PWM)
}
void loop() {
  analogWrite(9, intensite);
  intensite = intensite + croissance;
  /* Inverser  */
  if (intensite == 0 || intensite == 255) {
    croissance = -croissance;
  }
  delay(40);  // attente
}

Nous avons créé deux variables: une, où on va garder la valeur de l’intensité, et une autre qu’ indiquera combien va s’accroître cette intensité à chaque tour.

Dans la fonction setup() on configure le pin 9 comme sortie avec l’instruction pinMode().

Et dans la boucle loop(), d’abord on va allumer la led avec la valeur de la variable intensité (initialement 0). Après, on ira intensifiant de 5 en 5 la variable. À un moment précis, cette variable sera de 255, c’est pour cela que nous avons programmer une instruction if() qu’inversera la valeur de la variable croissance dès quelle arrive à 255 ou 0. De cette façon, la valeur augmente, mais arrivée à 255, elle diminue à nouveau jusqu’au 0, ainsi cycliquement.

Modifier la luminosité d’une led à souhait à travers l’envoie de l’intensité.

Pour l’exemple suivant nous avons 3 led (rouge, verte, bleue) connectées, chaque une, à travers son régulateur de tension, à un pin PWM différent. L’idée est de modifier la luminosité envoyant l’ instruction par le biais du moniteur série. Notamment, si on veut éteindre la diode rouge, on devrait le faire avec l’instruction r0, et si on veut l’allumer, r255. Pour allumer la diode bleue à mi- intensité, on commanderait b125.

Il est nécessaire:

  • Arduino Uno o équivalent.
  • Une plaque d’essai ou breadboard.
  • 3 fils.
  • 3 led: rouge, verte, bleue.
  • 3 résistances de 220 Ohms.
Modifier la luminosité d'une led  à souhait à travers l'envoie de l'intensité.
Connexion de trois diodes à la plaque d’Arduino

code:

char couleur;   // important que se soit du type char et non byte
byte lueur;

void setup() {
  Serial.begin(9600);
  pinMode(5, OUTPUT); // Pin configuré comme sortie
  pinMode(6, OUTPUT);
  pinMode(9, OUTPUT);
  analogWrite(5, 127); // on établit une lueur initial moyenne
  analogWrite(6, 127);
  analogWrite(9, 127);
}
void loop () {
  // on lit la première lettre reçue par le canal série
  if (Serial.available()>0) {
    couleur=Serial.read();
    if( couleur == 'r' || couleur == 'g' || couleur == 'b' ) {
      delay(5);
      // on tire le numéro qui suit à la première lettre
      lueur=byte(Serial.parseInt());
      if(couleur == 'r') {
        analogWrite(5, lueur);
      }else if(couleur == 'g'){
        analogWrite(6, lueur);
      }else if(couleur == 'b'){
        analogWrite(9, lueur);
      }
    }
  }
  delay(100); // on attend pour recevoir les données série correctement
}

Pour changer l’intensité des diodes on indique la première lettre de la couleur (r, g, b) et, comme deuxième paramètre, on choisit une valeur entre 0 et 255.

Pour simplifier au moment d’introduire les données, on peut garder le même circuit changeant le code: c’est possible de modifier l’intensité en écrivant les trois valeurs de lueur séparées avec des virgules (r, g, b), disons (100, 50, 200).

byte lueurRouge, lueurVerte, lueurBleue;

void setup() {
  Serial.begin(9600);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(9, OUTPUT);
  analogWrite(5, 127);
  analogWrite(6, 127);
  analogWrite(9, 127);
}
void loop () {
  //on lit toutes les lettres reçues par le canal série
  while (Serial.available()>0) {
    //on cherche le suivant nombre entier valide dans les données entrantes
    lueurRouge = Serial.parseInt();
    //on recherche à nouveau
    lueurVerte = Serial.parseInt();
    //on recherche
    lueurBleue = Serial.parseInt();
    //on attend le caractère de nouvelle ligne: marque la fin
    if (Serial.read() == '\n') {
      //on limite les valeurs lues dans l’intervalle 0-255, au cas où
      lueurRouge = constrain(lueurRouge, 0, 255);
      lueurVerte = constrain(lueurVerte, 0, 255);
      lueurBleue = constrain(lueurBleue, 0, 255);
      //on illumine les diodes convenablement
      analogWrite(5, lueurRouge);
      analogWrite(6, lueurVerte);
      analogWrite(9, lueurBleue);
    }
  }
}

Mélange de couleurs. Led RBG.

On va essayer le fonctionnement de la diode led RBG d’anode commune avec 4 broches F5 5MM et le module RBG KY-016 à trois couleurs et résistances intégrées.

Led RBG d'anode commune avec 4 broches F5 5MM
Led RBG d’anode commune

Il est nécessaire:

  • Arduino Uno ou équivalent.
  • Une plaque d’essai ou breadboard.
  • 4 fils.
  • Une led RBG d’anode commune 4 pin F5.
  • 3 résistances de 220 Ohms.
Mélange de couleurs. Led RGB. Connexion led RBG à la plaque d'Arduino.
Connexion led RBG à la plaque d’ Arduino

Dans ce schéma on peut voir comment chaque branche de couleur est connectée à une sortie PWM via une résistance de 220 Ohms. La branche bleue est reliée au pin 11, la rouge est reliée au 10, et la verte se connecte au pin 9. L’anode commune est liée à la masse.

Code:

int LedVerte = 9;
int LedRouge = 10;
int LedBleue = 11;

void setup() {
  pinMode(LedRouge, OUTPUT);
  pinMode(LedVerte, OUTPUT);
  pinMode(LedBleue, OUTPUT);
}

void loop() {
  // Rouge
  analogWrite(LedRouge, 255);
  analogWrite(LedVerte, 0);
  analogWrite(LedBleue, 0);
  delay(2000);
  // Verte
  analogWrite(LedRouge, 0);
  analogWrite(LedVerte, 255);
  analogWrite(LedBleue, 0);
  delay(2000);
  // Bleue
  analogWrite(LedRouge, 0);
  analogWrite(LedVerte, 0);
  analogWrite(LedBleue, 255);
  delay(2000);
}

Maintenant, nous allons essayer le module RGB KY-016 à trois couleurs. Souvenez-vous que ce module incorpore les résistances nécessaires.

Module RGB KY-016 à trois couleurs pour Arduino
Module RGB KY-016 à trois couleurs

Il est nécessaire:

  • Arduino Uno ou équivalent.
  • Une plaque d’essai ou breadboard.
  • 4 fils.
  • Un module led RBG KY-016 trois couleurs et résistances.
Cablage module RGB KY-016.
Cablage du module RGB KY-016

Code:

const int PinLedRouge = 9;
const int PinLedVerte = 10;
const int PinLedBleue = 11;
 
void setup() 
{
  Serial.begin(9600);    
  pinMode(PinLedVerte, OUTPUT);
  pinMode(PinLedRouge, OUTPUT);
  pinMode(PinLedBleue, OUTPUT);
}
 
void loop() {
  // Verte
  Serial.println("Verte!");
  digitalWrite(PinLedRouge, LOW);
  digitalWrite(PinLedVerte, HIGH);
  digitalWrite(PinLedBleue, LOW);
  delay(500);
  // Rouge
  Serial.println("Rouge!");
  digitalWrite(PinLedRouge, HIGH);
  digitalWrite(PinLedVerte, LOW);
  digitalWrite(PinLedBleue, LOW);
  delay(500);
  // Bleue
  Serial.println("Bleue!");
  digitalWrite(PinLedRouge, LOW);
  digitalWrite(PinLedVerte, LOW);
  digitalWrite(PinLedBleue, HIGH);
  delay(500);
}
Articles similaires
Laisser un commentaire