Les exercices de l'Atelier des Outils Pour le Numérique

Un vu-mètre

L'objectif de cet exercice est de vous familiariser avec les lectures analogiques et de conforter vorte expérience en écriture numérique. Nous introduisons également la notion de tableau pour stocker des valeurs entières.

L'exemple choisi permet de simuler un vu-mètre qui sera actionné non pas par un niveau sonore comme on peut en voir habituellement, mais par un potentiomètre classique.

Montage associé

Pour cet exercice vous devez disposer du matériel ci-dessous.

TypeQuantité
Platine Arduino1
Plaque à essais1
Fil de câblage9
Résistance de 330 Ω4
LED (couleurs variées)4
Potentiomètre1

Le montage à réaliser est le suivant :

Un vu-mètre.

Correction et commentaires

/**
 * Réalisation d'un vu-mètre.
 */

// L'utilisation de variables globales permet d'alléger le code
byte leds[4] = {6,9,10,11} ;
int i ;

void setup() {
  // Passer par un tableau permet d'utiliser une boucle
  // pour l'initialisation.
  for (i=0 ; i<4 ; i++) {
    pinMode(leds[i],OUTPUT) ;
    digitalWrite(leds[i],LOW) ;
  }
}

void loop() {
  i = analogRead(A0) ;

  if ( i >= 256 ) digitalWrite(leds[0],HIGH) ;
  else digitalWrite(leds[0],LOW) ;
  if ( i >= 512 ) digitalWrite(leds[1],HIGH) ;
  else digitalWrite(leds[1],LOW) ;
  if ( i >= 768 ) digitalWrite(leds[2],HIGH) ;
  else digitalWrite(leds[2],LOW) ;
  if ( i >= 1000 ) digitalWrite(leds[3],HIGH) ;
  else digitalWrite(leds[3],LOW) ;
}
				
Exemple de code pour réaliser un vu-mètre.

Le code associé reste simple. Après avoir initialisé notre matériel en définissant les ports de sortie, nous entrons dans la fonction loop() qui va constamment lire la valeur du potentiomètre à l'aide d'analogRead(). Rappelons que cette fonction retourne une valeur entière dans l'intervalle [0;1023]. C'est lié à l'utilisation du convertisseur analogique / numérique du microcontrôleur qui a une résolution de 10 bits (210 = 1024).

La valeur lue est stockée dans une variable (i dans notre cas) pour pouvoir être comparée à nos seuils. Il est plus judiscieux de procéder comme cela plutôt que de refaire un appel à analogRead() à chaque test. En effet, la valeur peut changer entre temps et le résultat serait faussé. De plus, la convertion analogique / numérique prend du temps et cela ralentirait notre programme.

Enfin, la suite de test est là pour savoir quelle LED allumer ou éteindre en fonction de la valeur lue sur le potentiomètre. Remarquez bien que c'est une suite de if sans else entre chacun d'eux. C'est cela qui permet d'avoir l'effet vu-mètre où toutes les LED associées à une valeur de seuil inférieure à la valeur lue sont allumées. Vous pouvez essayer de rajouter ces else pour voir le résultat obtenu.