Contrôler une DEL

Sortie numérique

Une DEL peut être contrôlée par une sortie numérique. Une sortie numérique permet régler la tension présente à la plupart des broches de la carte Arduino.

Cette tension peut être réglée à deux niveaux :

  • HIGH : règle la tension de sortie à 5V (pôle positif)
  • LOW : règle la tension de sortie à 0V (pôle négatif/GND)

Pour régler la tension électrique de sortie d'une broche, on utilise ces blocs de code :

  1. Configurer la broche numeroBoche en mode sortie avec OUTPUT :
pinMode( numeroBoche , OUTPUT );
  1. Pour règler la tension de sortie à 5V (pôle positif) :
digitalWrite( numeroBoche, HIGH );
  1. Pour règler la tension de sortie à 0V (pôle négatif/GND) :
digitalWrite( numeroBoche, LOW );

Circuit

Segment de circuit

Voici un segment de circuit qui permet de connecter la DEL à l'Arduino :

Segment de circuit pour contrôler une DEL

Schéma du circuit

Voici le même segment de circuit mais placé dans le un schéma plus complet :

Schéma du circuit de l'exemple pour contrôler une DEL

Illustration du circuit

Voici l'illustration du schéma précédent :

Illustration du circuit de l'exemple pour contrôler une DEL del_arduino

Comparaison avec le circuit d'alimentation simple

Dans les images suivantes, nous présentons une comparaison entre l'alimentation directe sans contrôle de la DEL avec le contrôle par Arduino.

Comparaison du circuit d'alimentation simple à gauche avec celui de contrôle à droite

Comparaison du circuit d'alimentation simple à gauche avec celui de contrôle à droite

Code pour faire clignoter la DEL


int maDelBroche = 13;  // BROCHE CONNECTÉE À LA DEL

int maDelValeur = LOW;  // VALEUR INITIALE DE LA DEL

unsigned long monChronoDepart = 0;  // VARIABLE POUR CHRONOMÈTRER LE CLIGNOTEMENT

void setup() {
  pinMode(maDelBroche, OUTPUT);  // SORTIE NUMERIQUE
  digitalWrite(maDelBroche, maDelValeur); // APPLIQUER LA VALEUR A LA DEL
}

void loop() {
  
  if (millis() - monChronoDepart >= 100) { // SI LE CHRONOMÈTRE DÉPASSE 100 MS
    monChronoDepart = millis(); // REDÉMARRER LE CHRONOMÈTRE

    maDelValeur = !(maDelValeur); // INVERSER LA VALEUR AVEC LE SYMBOL !
    digitalWrite(maDelBroche, maDelValeur); // APPLIQUER LA VALEUR A LA DEL

  }
}

Sortie «analogique»/modulation de largeur d'impulsion (PWM)

Un sortie «analogique» permet de simuler une variation de tension électrique. Par exemple, un sortie analogique peut être utilisée pour faire varier la luminosité d'une DEL et effectuer des effets de fondu.

Pour simuler cette variation de tension, nous utilisons la modulation de largeur d'impulsion, Pulse Width Modulation (PWM) en anglais. Il s'agit de faire alterner à grande fréquence les périodes hautes (allumée) et basses (éteinte) de la broche. En d'autre termes, cela signifie que la DEL clignote très très vite. Tellement vite que l'oeil ne percevra qu'une lumière continue qui varie d'intensité.

Simulation de variation de tension à l'aide de modulation de largeur d'impulsion

Pour utiliser une sortie analogique, on utilise cette paire de blocs de code :

  1. Configurer la broche maBroche en mode sortie avec OUTPUT :
pinMode( maBroche , OUTPUT );
  1. Contrôler la modulation de largeur d'impulsion, qui est entre 0 et 255, de la broche maBroche avec analogWrite() :
int maValeurPWM = 255; // VALEUR ENTRE 0 et 255
analogWrite( maBroche, maValeurPWM );

Information complémentaire sur les sorties analogiques/la modulation de largeur d’impulsion (PWM)

Broches PWM

Les broches capables de supporter modulation de largeur d'impulsions sont identifiées par un «~» ou le mot «PWM». Il s'agit des broches 3, 5, 6, 9, 10 et 11 pour l'Arduino Nano. Broches qui peuvent être configurées en sortie analogique

Code pour simuler une chandelle

Dans cet exemple, nous simulons une chandelle en faisant varier aléatoirement l'intensité d'une DEL.

Aléatoire

La fonction random() permet de générer un entier int entre un minimum et un maximum. Il est très important de remarquer que la valeur maximale est exclue des valeurs possibles; si le miminum est 0 et le maximum est 5, les valeurs possibles sont 0,1,2,3,4 (sans le 5).

Exemple d'utilisation de random():

int monMin = 0;
int monMax = 256;
int maValeurAleatoire = random( monMin , monMax );

Composants

Circuit

  • Un Arduino avec une sortie analogique.
  • Une DEL.
  • Une résistance pour limiter l'intensité du courant qui traverse la DEL.
  • Important : La DEL doit être connectée à une sortie analogique de l'Arduino.
  • Voir le circuit plus haut pour référence.

Code

int maBrocheDel = 9;

unsigned long monChrono;

void setup() {
  pinMode(maBrocheDel, OUTPUT);
}

void loop() {

  if ( millis() - monChrono >= 20 ) {
    monChrono = millis();

    int monMin = 0;
    int monMax = 256;
    int maValeurAleatoire = random( monMin , monMax );

    analogWrite(maBrocheDel, maValeurAleatoire);

  }
}