Le Convertisseur Analogique Numérique

Introduction :
Un CAN (Convertisseur Analogique Numérique) permet de convertir un signal analogique en une grandeur numérique.

La carte Duemilanove dispose de 6 entrées analogiques (numérotées de 0 à 5), chacune pouvant fournir, en sortie du CAN, une mesure d’une résolution de 10 bits (C’est-à-dire 1024 niveaux de 0 à 1023) à l’aide de la fonction analogRead() du langage Arduino.

Par défaut, ces broches mesurent entre le 0V (valeur 0) et le 5V (valeur 1023), mais il est possible de modifier la référence supérieure de la plage de mesure en utilisant l’instruction analogReference() du langage Arduino ainsi que la broche AREF si nécessaire.
analogReference(DEFAULT) => Référence supérieure = 5V
analogReference(INTERNAL) => Référence supérieure = 1.1V (sur Arduino Duemilanove)
analogReference(EXTERNAL) => Référence supérieure = tension appliquées sur AREF

Remarque : L’instruction analogReference(INTERNAL) ne fonctionne pas avec la carte Arduino Mega

Attention !
Si on applique une tension sur la broche AREF il est préférable de le faire au travers d’une résistance de 5KOhms. Ceci pour se prémunir contre des dégradations internes du microcontrôleur Atmega si la configuration logicielle de l’instruction analogReference est incompatible avec la configuration de l’intensité matérielle. Noter que cette résistance pourra diminuer la tension qui sera réellement utilisée comme référence car il y a une résistance interne de 32KOhms sur la broche AREF. Les deux résistances agissent comme un diviseur de tension, ainsi, par exemple, 2.5V appliqué au travers de la résistance donnera en réalité du 2.2V sur la broche AREF.

Le but des exemples qui suivent, est de lire une valeur sur l’entrée analogique de l’Arduino.
Cette valeur est lue à la sortie du CAN puis est affichée à l’écran de l’ordinateur.

Le montage:
Relier le +5V à l’entrée ANALOG IN 0 de l’Arduino.

Le Programme 1:
/*
Le CAN Programme 1
Ce programme lit l’entrée analogique  0 de l’Arduino puis affiche sa valeur, dans le moniteur série, à l’écran de l’ordinateur.
Pour permettre cet affichage, après avoir compilé puis transféré le programme vers l’Arduino, il faut ouvrir le moniteur série en cliquant sur l’icône ‘’Moniteur Série’’ de l’environnement Arduino.

*/

float valeur=0;

void setup() {
Serial.begin(9600); /* Initialise la communication série à 9600 bauds */
}

void loop() {
valeur = analogRead(0); /* Lit la valeur de l’entrée analogique 0 */
Serial.println(valeur); /* Affiche la valeur du CAN puis passe à la ligne */
delay(1000); /* Attente une seconde avant de recommencer */
}

Interprétation des résultats :
La valeur qui s’affiche dans la fenêtre ‘’Moniteur Série’’ est 1023.
Pour trouver la tension appliquée, il faut utiliser la formule suivante :
tension = valeur * analogReference / 1023
Dans notre cas, analogReference est égal à 5V (valeur par défaut)

Programme 2:
/*
Le CAN Programme 2
Ce programme lit l’entrée analogique 0 de l’Arduino puis, affiche la valeur lue et la tension correspondante, sur 2 colonnes, dans le moniteur série à l’écran de l’ordinateur.
*/

float valeur=0;
float tension=0;

void setup() {
Serial.begin(9600); /* Initialise la communication série à 9600 bauds */
}

void loop() {
valeur = analogRead(0); /* Lit la valeur de l’entrée analogique 0 */
Serial.print(valeur); /* Affiche la valeur du CAN */
Serial.print( »          « ); /* Affiche 10 espaces */
tension = (valeur * 5)/1023; /* Conversion de la valeur en tension (analogReference = 5V) */
Serial.println(tension) ; /* Affiche la tension puis passe à la ligne */
delay(1000); /* Attente une seconde avant de recommencer  */
/*
A la place du strap au +5V, on pourra faire l’essai avec d’autres tensions qui devront impérativement être inférieures à 5V. Elles pourront être obtenues à partir d’un pont diviseur à 2 résistances ou d’un potentiomètre…
*/
}

Programme 3 :
/*
Le CAN Programme 3
Utilisation d’un capteur de température et affichage de la valeur du CAN, de la tension, et de la température, sur 3 colonnes, dans le moniteur série à l’écran de l’ordinateur.

Branchement capteur de température LM35 (Délivre 10mV/°C)
* Vue de face, pin gauche : +Vs (4 à 20V)
* Vue de face, pin centrale : Vout -> reliée à l’entrée analogique N°5 de l’arduino
* Vue de face, pin droite : GND

Afin de gagner en précision nous utilisons la référence interne de 1.1V du CAN
*/

float valeur=0;
float tension=0;
float temperature=0;

void setup() {
Serial.begin(9600); /* Initialise la communication série à 9600 bauds */
analogReference(INTERNAL); /* Utilisation de la référence interne du CAN = 1.1V */
}

void loop() {
valeur = analogRead(5); /* Lit la valeur de l’entrée analogique 5 */
Serial.print(valeur); /* Affiche la valeur du CAN */
Serial.print( »          « ); /* Affiche 10 espaces */
tension = (valeur * 1.1)/1023; /* Convertit la valeur en tension (analogReference = 1.1V) */
Serial.print(tension) ; /* Affiche la tension */
Serial.print( »          « ); /* Affiche 10 espaces */
temperature = tension * 100 ; /* Convertit la tension en température (le LM35 délivre  10mv/°C) */
Serial.println(temperature) ; /* Affiche la température puis passe à la ligne */
delay(1000); /* Attente une seconde avant de recommencer */
}

Bruno le 05/02/2011