Débuter avec les Led sur Arduino. Piloter, faire varier l'intensité lumineuse, changer de couleur (RGB) • Domotique et objets connectés à faire soi-même

Il est très facile de débuter avec l’Arduino et la programmation C++ avec des circuits et du code simple pour piloter des LED. Dans cet article, nous allons passer en revue les aspects suivants des LED (ou DEL en Français)

Comment alimenter une Led depuis un Arduino ?

La tension d’alimentation varie en fonction du type de LED (de sa couleur) et de sa dimension (3mm, 5mm…).

D’autre part la tension de sortie des cartes de développement (Arduino, ESP32, ESP8266, Raspberry Pi…) peut être de 5V ou 3,3V. Il faudra donc adapter le circuit en ajoutant une résistance entre la broche de sortie de l’Arduino (ou ESP32, ESP8266) et la broche positive de la LED. Voici un tableau récapitulatif de la tension d’alimentation typique en fonction de la couleur et du diamètre de la LED.

Attention, les tensions indiquées dans ce tableau sont des valeurs générales. Vérifiez la tension d’alimentation préconisée par le fabricant pour concevoir votre circuit.

Couleur Longueur d’onde (nm) Tension (V) pour diamètre  3mm Tension(V) pour diamètre  5mm
Rouge 625-630  1,9-2,1 2,1-2,2
Bleu 460-470 3,0-3,2 3,2-3,4
Vert 520-525 2,0-2,2 2,0-2,2
Jaune 585-595 2,0-2,2 3,0-3,2
Blanc 460-470 3,0-3,2 1,9-2,1

Plus d’assortiments de LED, LED RGB WS2812, LED ultra lumineuses, LED SMD à souder

Comment calculer la résistance de protection d’une LED

Chaque LED accepte une certaine plage de tension d’alimentation. Il faudra donc placer avant la LED une résistance pour “consommer” le surplus de courant.
R = ( U – Ul ) / I
R   Valeur de la résistance en Ohm (Ω)
U   Tension de l’alimentation. C’est par exemple la tension délivrée par l’Arduino ou un transformateur
Ul Tension d’alimentation de la led (V)
I     Intensité de la led (A)

Plus d’assortiments de résistances

Voici un tableau avec les valeurs des résistances calculées pour quelques LED courantes avec une tension d’alimentation de 5V (la plupart des cartes Arduino), 3.3V (ESP32, ESP8266, Raspberry Pi, nouveaux Arduino…) et 12V (transformateur).

5V 3,3V 12V
Couleur Plage d’alimentation (V) Intensité nominale (A) Tension max Résistance (Ω) Résistance (Ω) Résistance (Ω)
Rouge 2,1-2,3 0,02 2,3 135 35 485
Orange 3,2-3,4 0,02 3,3 85 435
Jaune 2,1-2,3 0,02 2,3 135 35 485
Vert 3,1-3,3 0,02 3,3 85 435
Bleu 3,0-3,2 0,02 3,2 90 440
Rose 3,2-3,4 0,02 3,4 80 430
U.V. 3,2-3,4 0,02 3,4 80 430
Blanc 3,2-3,4 0,02 3,4 80 430

Allumer / éteindre une LED avec un bouton poussoir

Dans ce premier exemple nous allons apprendre comment allumer et éteindre une LED  l’aide d’un bouton poussoir.

Matériel nécessaire

Pour réaliser le montage, vous aurez besoin du matériel suivant

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

Circuit

Ce circuit permet d’allumer ou d’éteindre une LED à l’aide d’un bouton poussoir. L’état de la LED (allumé/éteint) est inversé par le programme Arduino à chaque appui sur le bouton poussoir (micro-switch).

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 à l’aide de 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);
          }
      }
  }
}

Pour 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.

Ce sont les broches 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.

Pour faire varier l’intensité lumineuse, nous allons utiliser un potentiomètre qui n’est rien d’autre qu’une résistance variable.

Matériel nécessaire

Pour réaliser le montages, vous aurez besoin du matériel suivant

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

Circuit

Un potentiomètre est une résistance variable. Le potentiomètre va permettre d’obtenir un signal variable que l’on utilisera pour faire varier l’intensité lumineuse de la LED. Le câblage du potentiomètre est très simple, il suffit de l’alimenter avec une tension de 5V. On récupère en sortie une tension qui varie en fonction de la position du curseur rotatif. On utilisera le convertisseur analogique / numérique de l’Arduino pour convertir cette tension en un signal numérique qui sera proportionnel à la position du curseur.

Code Arduino

On lit sur la broche analogique A0 de l’Arduino la tension délivrée par le potentiomètre toutes les 100 ms.

Le convertisseur analogique / numérique de l’Arduino renvoi un signal numérique qui varie entre 0 et 1023

Comme la sortie PWM nécessite une valeur comprise entre 0 et 254 (8 bits) on utilise la fonction map qui permet de remettre à l’échelle le signal du potentiomètre.

/*
   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);
}

Une Led RVG / RGB (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

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.

Code

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);
          }
      }
  }
}

Une sélection d’assortiments de Led pour débuter.

Plus d’assortiments de LED, LED RGB WS2812, LED ultra lumineuses, LED SMD à souder

Mises à jour

24/07/2020 Actualisation du tutoriel

Avez-vous aimé cet article ?