View  Edit  Attributes  History  Attach  Print  Search

ACCUEIL | ARDUINO > S'INSTALLER > DEBUTER > APPROFONDIR | PROCESSING | MECATRONIQUE | MATERIEL | OUTILS | TESTS | Plus...|
Python > Shell > ATELIERS Python + Qt > PyQt apps > PyQt+Arduino | Mes Robots | RepRap | Mes lib'Arduino | Mes shields Arduino | Mes distros | Les Mini-PC |
ATELIERS ARDUINO| VIDEOS | COMPRENDRE | REFERENCES | CODER | TECHNIQUE | GNU/LINUX | LIENS | Rien à voir |

Faire varier la luminosité d'une LED

ARDUINO - INITIATION - IMPULSIONS
Par X. HINAULT - Créé le 15/02/2010

Présentation

Ce programme très simple permet de faire varier la luminosité d'une LED sur une broche d'une carte Arduino. Ce programme exploite l'instruction analogWrite(broche, largeur) qui permet de générer très simplement une impulsion PWM (Pulse Width Modulation en anglais ou Modulation de Largeur d'Impulsion (MLI) en français). Cette instruction permet de moduler la largeur d'impulsion, la fréquence restant fixe aux alentours de 490 hz par défaut.

IMPORTANT : L'instruction analogWrite() n'est disponible que sur les broches 3, 5,6,9,10,11. Et les broches 5,6 sont perturbées par les instructions millis() et delay() (utilise le même timer interne que PWM). Donc éviter leur utilisation en PWM si possible.

D'après : http://arduino.cc/en/Tutorial/AnalogInput
Voir également : http://arduino.cc/en/Tutorial/PWM

Pour Comprendre

Une impulsion PWM est une impulsion (ou onde) carrée, c'est à dire que le niveau de l'onde est soit HAUT soit BAS. Cette impulsion se répète dans le temps de façon continue.

Une telle onde, comme toute onde est caractérisée par sa période, c'est à dire la durée entre 2 impulsions. La définition d'une onde PWM (Pulse Width Modulation en anglais ou Modulation de Largeur d'Impulsion (MLI) en français) se fait en modifiant la largeur du niveau HAUT par rapport à la durée de la période : la largeur du niveau HAUT est appelée « duty cycle ».

Avec l'instruction analogWrite(broche, largeur), on va pouvoir générer une impulsion PWM avec une largeur de « duty cycle » voulue :

  • si valeur = 0, le duty cycle sera de 0% de la période
  • si valeur = 255, le duty cycle sera de 100% de la période
  • si valeur = 127, le duty cycle sera de 50% de la période
  • si valeur = n, le duty cycle sera de (n/255)*100% de la période.

Matériel Nécessaire

L'espace de développement Arduino

  • ... pour éditer, compiler le programme et programmer la carte Arduino.

Le matériel suivant pour réaliser le montage associé

  • une plaque d'essai pour montage sans soudures,
  • des straps,
  • une LED rouge 5mm,
  • une résistance 1/4w de 200 Ohms environ,

Instructions de montage

  • Connecter sur la broche 2 (configurée en sortie) une LED et sa résistance (270 Ohms) en série connectée au 0V

Le schéma théorique du montage


Le schéma théorique du montage

Le circuit du montage

  • IMPORTANT : L'instruction analogWrite () n'est disponible que sur les broches 3, 5,6,9,10,11 (notée PWM sur le brochage ci-dessous). Et les broches 5,6 sont perturbées par les instructions millis() et delay() (utilise le même timer interne que PWM). Donc éviter leur utilisation en PWM si possible.

Le schéma du montage à réaliser

Explication du programme

Structure globale du programme

Ce programme simple comprend :

  • une entête déclarative
  • une partie « configuration » qui ne sera exécutée qu'une fois (fonction setup( ) )
  • une partie constituée d'une boucle sans fin que le programme répètera à l'infini ( fonction loop( ) ) : c'est le coeur du programme.

Déroulement du programme

Le programme se déroule de la façon suivante :

  • Après avoir pris en compte les instructions de la partie déclarative,
  • puis après avoir exécuté la partie configuration ( fonction setup( ) ),
  • le programme bouclera sans fin ( fonction loop ( ) ), exécutant de façon répétée le code compris dans la boucle sans fin.

Le déroulement du programme

Au niveau de la partie déclarative :

Déclaration des constantes de broches

  • Déclaration des constantes pour les broches utilisées dans le programme :

const int LED=3; //declaration constante de broche 

Déclaration des variables globales

  • Déclaration des variables globales du programmes :

int i=0; // variable de boucle

Au niveau de la fonction d'initialisation setup( ) :

configuration des broches utilisées :

  • Configuration des broches en sortie :

pinMode(LED, OUTPUT); //met la broche en sortie 

Au niveau de la boucle principale, la fonction loop ( ) :

  • On réalise une première boucle qui fait progressivement augmenter la largeur de l'impulsion sur la broche utilisée : la luminosité de la LED augmente.

for (i=0; i<=255;i++){ // boucle for compte de 0 à 255

analogWrite(LED,i); // génère une impulsion sur la broche de largeur i = la luminosité augmente

delay(10); // pause de 10 ms entre chaque "cran"

} // fin de la boucle for

  • On réalise une seconde boucle qui fait diminuer progressivement la largeur de l'impulsion : la luminosité de la LED diminue.

for (i=0; i<=255;i++){ // boucle for compte de 0 à 255

analogWrite(LED,255-i); // génère une impulsion sur la broche de largeur 255-i 
                        // = la luminosité baisse

delay(10); // pause de 10 ms entre chaque "cran"

} // fin de la boucle for

  • La luminosité de la LED va ainsi varier de façon continue, augmentant puis diminuant de façon répétée.

Se reporter aux commentaires présents dans le programme pour plus de détails.

Mise en oeuvre du programme

Préparation du montage et programmation de la carte Arduino :

  • Commencer par réaliser le montage indiqué sur plaque d'expérimentation
  • Ensuite, programmer la carte Arduino avec ce programme (en bas de page) selon la procédure habituelle

Fonctionnement

  • La luminosité de la LED connectée sur la broche se met à varier tout simplement.

Le programme complet en langage Arduino :

A copier/coller directement dans l'éditeur Arduino


// --- Programme Arduino ---
// par X. HINAULT - 01/2010 

// --- Que fait ce programme ? ---
/* Fait varier la luminosité d'une LED connectée sur la broche 3*/

// --- Fonctionnalités utilisées ---

// --- Circuit à réaliser ---
// Connecter une LED et sa résistance sur la broche 3 (configurée en sortie)

//**************** Entête déclarative *******
// A ce niveau sont déclarées les librairies, les constantes, les variables...

// --- Inclusion des librairies utilisées ---

// --- Déclaration des constantes ---

// --- constantes des broches ---

const int LED=3; //declaration constante de broche 

// --- Déclaration des variables globales ---
int i=0; // variable de boucle

// --- Initialisation des fonctionnalités utilisées ---

//**************** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme

void setup()   { // debut de la fonction setup()

// --- ici instructions à exécuter au démarrage --- 

pinMode(LED, OUTPUT); //met la broche en sortie 



} // fin de la fonction setup()
// ********************************************************************************

//*************** FONCTION LOOP = Boucle sans fin = coeur du programme *************
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension

void loop(){ // debut de la fonction loop()

for (i=0; i<=255;i++){ // boucle for compte de 0 à 255

analogWrite(LED,i); // génère une impulsion sur la broche de largeur i = la luminosité augmente

delay(10); // pause de 10 ms entre chaque "cran"

} // fin de la boucle for

for (i=0; i<=255;i++){ // boucle for compte de 0 à 255

analogWrite(LED,255-i); // génère une impulsion sur la broche de largeur 255-i 
                        // = la luminosité baisse

delay(10); // pause de 10 ms entre chaque "cran"

} // fin de la boucle for

// --- ici instructions à exécuter par le programme principal --- 

} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
// ********************************************************************************

// --- Fin programme ---