Accueil / Arduino / LED : piloter, faire varier l’intensité, LED RGB (Arduino)

LED : piloter, faire varier l’intensité, LED RGB (Arduino)

Dans cet article, nous allons passer en revue les aspects suivants des LED (ou DEL en Français)

Allumer / éteindre une LED avec un bouton poussoir

Cet exemple s’adresse aux débutants. Nous allons apprendre comment allumer et éteindre une LED en appuyant sur un bouton poussoir.

Matériel nécessaire

Pour réaliser le montage, vous aurez besoin du matériel suivant (liens commerciaux) :

arduino uno r3 Arduino Uno R3 x1 caddy
breadboard breadboard  (400 points) x1 caddy
led 3mm DEL (couleur au choix) x1 caddy
jumper dupont Des câbles Dupont caddy
bouton-poussoir Bouton poussoir x1 caddy
resistance 220ohms Résistance 220 ohm x1 caddy
resistance 10kohms Résistance 10000 ohms (10 kΩ)  x1 caddy

Tout le matériel nécessaire pour réaliser cet exemple est disponible dans le Starter Kit Arduino.

Circuit

led_simple_par bouiton poussoir_bb

arduino switch on off led push button

Code

Le code suivant permet d’allumer et d’éteindre la led en appuyant sur un bouton poussoir. Voici comment le code fonctionne.

L’Arduino lit en continu un changement d’état du bouton. Comme ce n’est pas un bouton ON/OFF, il faut gérer le changement d’état de la variable intermédiaire buttonState. Pour cela, on enregistre le temps (avec la commande millis()) dans la variable lastDebounceTime. Si le temps entre 2 clics sur le bouton est supérieur à la variable debounceDelay, alors on change l’état de buttonState et on inverse l’état de la sortie pilotant la Led.

/*
   Allumer et éteindre une Led à l'aide d'un bouton poussoir utilisé comme un bouton On/Off
   Switch on/off a led with a push button
   Projets DIY - mars 2016 - http://www.projetsdiy.fr
*/

//Constantes
const int ledPin = 3; 
const int boutonPin = 2;
int lastDebounceTime = 0;
int lastButtonState = 0;
int debounceDelay = 10;    // Filtre : plus le délai est important moins on détectera des clic rapide sur le bouton
int ledState = 0;
int buttonState = 0;
int reading = 0;

void setup() {     
  // Initialise le Pin comme une sortie | Initialize the digital pin as an output with pinMode()
  pinMode(ledPin, OUTPUT); 
}

void loop() {
  reading = digitalRead(boutonPin);  	// On lit l'état du bouton | Button state reading
  if (reading != lastButtonState) {		// L'état est différent par rapport à la boucle précédente | State is different
     lastDebounceTime = millis(); 		// Enregistre le temps | record time
     lastButtonState = reading;			// enregistre l'état | record the new state
  } 
  // On change l'état de la led uniquement si le temps écoulé entre deux appuis sur le bouton > debounceDelay
  // LED status is changed only if the time between two presses of the button > debounceDelay
  if ((millis() - lastDebounceTime) > debounceDelay) {
      if (buttonState != lastButtonState) {
          buttonState = lastButtonState;
          if (buttonState == HIGH) {
              ledState = !ledState;
              digitalWrite(ledPin, ledState);
          }
      }
  }
}

Faire varier l’intensité lumineuse d’une LED

pwmPour faire varier l’intensité lumineuse d’une Led, nous allons utiliser une sortie PWM (Pulse Width Modulation) de l’Arduino. L’Arduino Uno dispose de 6 sorties digitales qui peuvent être utilisées comme sorties PWM (3,5,6,9,10 et 11). Le schéma ci-contre montre comment fonctionne un signal PWM. Lorsqu’on envoi la valeur 255 sur le Pin de la Led, celle-ci reçoit en continue une tension de 5V/. Ensuite, lorsqu’on diminue la valeur, l’Arduino génère un signal carré, c’est à dire que pendant un certain temps, la tension est de 5 et, durant une autre période elle est de 0V. Plus on diminue la valeur, plus le temps entre deux pics à 5V sera long. Finalement, plus la valeur diminue, moins la Led va s’allumer longtemps. La fréquence étant suffisamment rapide, l’oeil à l’illusion que l’intensité de la Led diminue. Vous pourrez la voir légèrement clignoter en diminuant suffisamment le potentiomètre.

Matériel nécessaire

Pour réaliser le montages, vous aurez besoin du matériel suivant (liens commerciaux) :

arduino uno r3 Arduino Uno R3 x1 caddy
breadboard Breadboard  (400 points) x1 caddy
led 3mm DEL (couleur au choix) x1 caddy
jumper dupont Des câbles Dupont caddy
resistance 220ohms Résistance 220 ohm x1 caddy

Tout le matériel nécessaire pour réaliser cet exemple est disponible dans le Starter Kit Arduino.

Circuit

varier intensité led potentiometre fade led potentiometer

arduino fade led intensity potentiometer

Code

L’Arduino lit en continue la valeur du potentiomètre (entre 0 et 1023) toutes les 100 ms. La fonction map remet à l’échelle la valeur envoyée à la sortie PWM entre 0 et 254.

/*
   Faire varier l'intensité lumineuse d'une led à l'aide d'un potentiomètre
   How to fade a led intensity with a potentiometer
   Projets DIY - mars 2016 - http://www.projetsdiy.fr
*/

//Constantes
const int ledPin = 3; 
const int potPin = 0;    // Analog input pin that the potentiometer is attached to
int potValue = 0;  		 // value read from the pot
int valPWM = 0;

void setup() {     
  Serial.begin(9600);
  // Initialise le Pin comme une sortie | Initialize the digital pin as an output with pinMode()
  pinMode(ledPin, OUTPUT); 
}

void loop() {
  potValue = analogRead(potPin); 			// Valeur du potentiomètre | Read the pot value
  valPWM = map(potValue, 0, 1023, 0, 254);	// Remise à l'échelle entre 0 et 254 
  analogWrite(ledPin, valPWM);				// Ecrit sur la sortie PWM la valeur remise à l'échelle | Scale to the PWM range
  Serial.println(valPWM); 					// Pour connaître la valeur envoyée à la sortie PWM  | Write the PWLM value
  delay(100);
}

Utiliser une Led RVG (RBG)

Unled rvb rgbe Led RVG (Rouge – Vert – Bleu ou Red – Green – Blue) possède 4 pins, un pour chaque couleur et une cathode commune. Une Led RVG contient en fait 3 Leds (une pour chaque couleur) qui une fois combinées produisent une couleur. Pour le circuit, vous devez considérer que vous câblez 3 Leds différentes. Il vous faudra donc 3 résistances (une pour chaque couleur primaire). Le diagramme suivant montre le repérage de chaque Pin (celui-ci semble varier d’un fabricant à l’autre !).

Matériel nécessaire

Pour réaliser le montages, vous aurez besoin du matériel suivant (liens commerciaux) :

arduino uno r3 Arduino Uno R3 x1 caddy
breadboard Breadboard  (400 points) x1 caddy
led rvb 3mm DEL RVB (RGB) x1 caddy
jumper dupont Des câbles Dupont caddy
resistance 220ohms Résistance 220 ohm x3 caddy

Tout le matériel nécessaire pour réaliser cet exemple est disponible dans le Starter Kit Arduino.

Circuit

Attention. Le pin correspondant à chaque couleur peut varier d’un fabricant à l’autre. Le code ci-dessous vous aidera à identifier le Pin de chaque couleur correspondant à votre Led.

rgb led_bb

 

arduino rgb led individual colorCode

Le code suivant vous permet d’allumer chaque couleur indépendamment les unes des autres. J’ai utilisé le code du 1er exemple. Le code n’est pas optimal mais suffisant pour s’amuser avec la Led RVB et vérifier le Pin correspondant à chaque couleur.

/*
   Comment utiliser une Led RVB
   How to use an RGB Led
   Projets DIY - mars 2016 - http://www.projetsdiy.fr
*/

//Constantes
const int btRed = 2;
const int btGreen = 3;
const int btBlue = 4;
const int RED_PIN = 11;
const int GREEN_PIN = 9;
const int BLUE_PIN = 10;
int lastDebounceTime = 0;
int lastButtonState = 0;
int debounceDelay = 100;    // Filtre : plus le délai est important moins on détectera un clic rapide sur le bouton
int ledStateRed = 0;
int ledStateGreen = 0;
int ledStateBlue = 0;
int buttonState = 0;
int reading = 0;

void setup() {     
  // Initialise le Pin comme une sortie | Initialize the digital pin as an output with pinMode()
  pinMode(RED_PIN, OUTPUT); 
  pinMode(GREEN_PIN, OUTPUT);
  pinMode(BLUE_PIN, OUTPUT);
}

void loop() {
  
  // Rouge | Red
  reading = digitalRead(btRed);  		
  if (reading != lastButtonState) {		
     lastDebounceTime = millis(); 		
     lastButtonState = reading;		
  } 

  if ((millis() - lastDebounceTime) > debounceDelay) {
      if (buttonState != lastButtonState) {
          buttonState = lastButtonState;
          if (buttonState == HIGH) {
              ledStateRed = !ledStateRed;
              digitalWrite(RED_PIN, ledStateRed);
          }
      }
  }

  // Vert | Green
  reading = digitalRead(btGreen);  	
  if (reading != lastButtonState) {		
     lastDebounceTime = millis(); 		
     lastButtonState = reading;		
  } 
  if ((millis() - lastDebounceTime) > debounceDelay) {
      if (buttonState != lastButtonState) {
          buttonState = lastButtonState;
          if (buttonState == HIGH) {
              ledStateGreen = !ledStateGreen;
              digitalWrite(GREEN_PIN, ledStateGreen);
          }
      }
  }
  
  // Bleu | Blue
  reading = digitalRead(btBlue);  	
  if (reading != lastButtonState) {		
     lastDebounceTime = millis(); 		
     lastButtonState = reading;		
  } 
  if ((millis() - lastDebounceTime) > debounceDelay) {
      if (buttonState != lastButtonState) {
          buttonState = lastButtonState;
          if (buttonState == HIGH) {
              ledStateBlue = !ledStateBlue;
              digitalWrite(BLUE_PIN, ledStateBlue);
          }
      }
  }
}