mercredi 25 mai 2011

Lecture analogique et pont diviseur (Led et potentiomètre)

Introduction
Le board Arduino est équipé de 6 entrées analogiques (de A0 à A6).
Chacune des entrées peut recevoir une tension variant entre 0 et 5 Volts maximum.
Pour cette gamme de tension, l'instruction analogRead() retournera une valeur entre 0 et 1023, soit des paliers de 0.005 volts (5 millivolts).

Il est également possible de faire une lecture de tensions d'entrées plus élevées à condition d'utiliser un pont diviseur de tension. Voir plus loin dans l'article.

Montage
Le montage et le programme suivant modifie la luminosité de la diode Led en PWM (modulation de la largeur d'impulsion) en fonction de la position du potentiomètre.

Le potentiomètre étant branché entre 0 et +5v, la tension de sortie au plot variera donc progressivement entre 0 et 5v.
Tension qui sera lue via la pin A0.

Résultat


Programme
Source: AnalogRead.pde
/*
 *  Lecture d'une entrée analogique (pin A0)
 *  Et controle de la luminosité d'une LED (pin 10).  
 *
 */
 
int pinPot = A0; // Potentiomètre 10k, tension de 0-5v (valeur de 0-1024)
int pinLed = 10; // Led, controle d'éclairage en PWM
int potValue = 0; // Valeur du potentiometre de 0-1024  

void setup(){
  pinMode( pinLed, OUTPUT );
  analogWrite( pinLed, 0 );// Eteint la LED (PWM 0%)
}

void loop(){
  potValue = analogRead( pinPot );
  // ramener la valeur de 0-1024 à 0-255 pour PWM
  int ledPower = potValue/4;
  ledPower = constrain( ledPower, 0, 255 );
  // Modifier la puissance de la LED
  analogWrite( pinLed, ledPower );  
}


Lectures de tensions plus élevées
Si pour une raison ou une autre vous devez lire des tensions supérieures à 5 volts (par exemple 0 à 24 volts), il vous faudra alors utiliser un pont diviseur de tension.
 
Source: Wikipedia

Calcul d'un pont diviseur pour Umax = 24v

Dans l'exemple cité, si la tension a mesurer maximum est 24 volts, fixons Umax = 24v.
La tension maximum de l'entrée analogique est 5 volts, donc U2max= 5v.
Fixons arbitrairement R2 à 1kOhms et calculons la valeur nécessaire pour R1.

R1 = ( (U/U2)*R2 )-R2
R1 = ( (24/5)*1000 )-1000 = 3800 Ohms (3.8 kOhms)


Ainsi, quand la tension est de 24 volts (le maximum) en tête de pont (tension U), la tension maximum sur l'entrée analogique (U2) est de 5v. 


Décodage de la lecture analogique
Quel est la tension à l'entrée du pont si analogRead() retourne la valeur 436?

Méthode 1: la règle de trois
Puisque analogRead retroune une valeur entre 0 et 1023 (soit 1024 valeurs possible) pour une tension variant entre 0 et 24v, il suffit d'appliquer une règle de trois.

(24v/1024)*436 = 10.21 volts.



Méthode 2: utiliser le calcul du pont
Puisque chaque intervalle de digitalRead() représente une tension de 5 millivolts, 436 représente 436 * 0.005 soit 2.18 volts pour U2.
Il est possible de recalculer U à l'aide de la formule suivant:
    U = U2 * (R1 + R2) / R2
ce qui donne:
U = 2.18 * ( 3800 + 1000 ) / 1000
U = 10.46 volts.



La différence entre les deux valeurs provient des erreurs de calcul.
En utilisant un pont diviseur, l'on perd aussi de la précision dans la mesure puisque chaque intervalle représente une variation de tension U de 24v / 1024 = 23 millivolts.

La mesure de U est donc précise à +/- 23 millivolts dans le cas du pont diviseur calculé.