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)
Sommaire
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)
Banggood.com
12,99€
14,99€
En Stock
actualisé le 2 novembre 2022 12 h 06 min
Banggood.com
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 ?