🛠 Lire un capteur analogique : potentiomètre et ADC 10 bits
Objectifs
Découvrir le convertisseur analogique-numérique (ADC) 10 bits de l'ATmega32u4 : analogRead renvoie un entier de 0 à 1023 proportionnel à la tension sur la broche, entre 0 V et 5 V. Vous apprendrez aussi la particularité des entrées analogiques de la Leonardo : 12 entrées A0 à A11, dont A6 à A11 partagées (multiplexées) avec les broches numériques 4, 6, 8, 9, 10 et 12 — la numérotation du cœur Arduino est d'ailleurs source de confusion sur ces broches.
Matériel
- 1 Arduino Leonardo + câble micro-USB
- 1 potentiomètre (10 kΩ typique)
- 3 fils : curseur vers A0, une extrémité vers 5V, l'autre vers GND
Code complet
const uint8_t POT_PIN = A0; // A0-A5 : broches analogiques « classiques »
void setup {
Serial.begin(9600); // Serial = USB CDC sur Leonardo
while (!Serial) { }
}
void loop {
int brut = analogRead(POT_PIN); // 0..1023 (ADC 10 bits)
float tension = brut * (5.0 / 1023.0); // tension approximative en volts
int pourcent = map(brut, 0, 1023, 0, 100);
Serial.print("brut="); Serial.print(brut);
Serial.print(" ~"); Serial.print(tension);
Serial.print(" V ("); Serial.print(pourcent); Serial.println(" %)");
delay(100);
}
Vérification attendue
En tournant le potentiomètre à la main, les valeurs affichées suivent : environ 0 en butée d'un côté, environ 1023 dans l'autre, et la tension calculée reste entre 0 et 5 V. Si la valeur saute beaucoup au repos, c'est normal : une entrée analogique non reliée à une source basse impédance capte du bruit.
Erreurs fréquentes
- Utiliser A6-A11 sans savoir qu'elles partagent les broches numériques 4/6/8/9/10/12 : si vous utilisez aussi ces broches en numérique, le comportement devient incohérent (numérotations dupliquées dans le cœur, cf. issue #187 d'ArduinoCore-avr).
- Alimenter le capteur en 3V3 : possible, mais l'échelle de mesure reste 0-5 V ; une référence incohérente fausse le calcul de volts.
- Attendre une résolution de 12 bits : l'ADC de l'ATmega32u4 vaut 10 bits, pas 12 comme sur un ESP32.
- Oublier la masse commune : un capteur alimenté par une source externe doit partager GND avec la carte.
Autres tutoriels pour cette carte
- Faire clignoter la LED intégrée (broche 13)
- Bouton et console série : Serial (USB) vs Serial1 (broches 0/1)
- Clavier USB : taper du texte avec la bibliothèque Keyboard
- Souris USB : déplacer le curseur avec la bibliothèque Mouse
- Asservir un servo moteur avec un potentiomètre (PWM)
- Programmer aux registres : interruption Timer/Counter1
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinoclavier-auto-tape.inoArduinosouris-cercle.inoArduinotelecommande-media.inoArduinobouton-clic-souris.inoArduino