int N = analogRead(A0); // retourne un nombre compris entre 0 et 1023
float V = N * 5.0 / 1024.0; // Valeur en Volts de la tension sur A0
Dans l'instruction ci-dessus, Il est important que les opérandes soient de type
float pour empêcher le compilateur d'effectuer une division
entière, d'ou l'utilisation de
'5.0' et non pas '5'
Un convertisseur analogique-numérique (CAN ou ADC: Analog to Digital Converter ) est un dispositif électronique qui transforme un signal analogique en une valeur numérique entière exploitable par un système numérique.
Pour simplifier nous allons considérer un ADC qui fournit une valeur numérique sur deux bits
V = N × 5 / 1024
analogReference(DEFAULT); // Vref = 5V , errmax = 2.44 mV
analogReference(INTERNAL); // Vref = 1.1 V , errmax = 0.537 mV
analogReference(EXTERNAL); // Vref = entrée AREF , errmax = Vref/1024/2
Chaque 1/2 seconde, on prend une mesure de l 'entrée A0 et on affiche le résultat sur le moniteur Série
void setup() {
Serial.begin(9600);
}
void loop() {
int N = analogRead(A0);
float V = N * 5.0 / 1024.0;
Serial.print("N = ");
Serial.print(N);
Serial.print(" => V = ");
Serial.print(V);
Serial.println(" Volts");
delay(500);
}
Chaque 1/2 seconde, on mesure les 6 entrées analogiques et on affiche le résultat sur un afficheur LCD
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 10, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2);
}
void loop() {
float V;
lcd.clear();
V = analogRead(A0) * 5.0 / 1024.0;
lcd.print(V);
lcd.print(" ");
V = analogRead(A1) * 5.0 / 1024.0;
lcd.print(V);
lcd.print(" ");
V = analogRead(A2) * 5.0 / 1024.0;
lcd.print(V);
lcd.setCursor(0, 1);
V = analogRead(A3) * 5.0 / 1024.0;
lcd.print(V);
lcd.print(" ");
V = analogRead(A4) * 5.0 / 1024.0;
lcd.print(V);
lcd.print(" ");
V = analogRead(A5) * 5.0 / 1024.0;
lcd.print(V);
delay(500);
}

void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("\r\nMesure d'une tension de 0.5V = 500mV");
analogReference(DEFAULT);
int N = analogRead(A0);
float V = N * 5000.0 / 1024.0;
Serial.print("Vref=5V => ");
Serial.print(V, 3);
Serial.print(" mV => erreur = ");
Serial.print(500 - V, 3);
Serial.println(" mV");
analogReference(INTERNAL);
N = analogRead(A0);
V = N * 1100.0 / 1024.0;
Serial.print("Vref=1.1V => ");
Serial.print(V, 3);
Serial.print(" mV => erreur = ");
Serial.print(500 - V, 3);
Serial.println(" mV"); delay(1000);
}

L'ADC de l'Arduino ne peut numériser que les tensions comprises entre 0V et 5V. Si le signal analogique à numériser est trop faible, il faut l'amplifier avant de le numériser. S'il contient une portion négative, il faut le décaler vers le haut pour que toute ses valeur soient positives. Si le signal est trop grand, il faut l'atténuer pour qu'il rentre dans l'intervalle [0V , 5V]
En résumer, avant de numériser un signal, il faut s'assurer que sa valeur minimale est >= à 0V et que sa valeur maximale est <= 5V.
Les montages ci-dessous peuvent servir à la réalisation de cette tâche


