🛠 Lire un potentiomètre avec le vrai ADC 12 bits de la Due
Objectifs
Exploiter l'argument de vente de la Due côté analogique : son convertisseur analogique-numérique est 12 bits (0–4095), contre 10 bits sur les Arduino AVR. Vous allez câbler un potentiomètre, lire sa position… et découvrir le piège documenté du core : analogRead renvoie par défaut des valeurs 10 bits (0–1023) pour rester compatible AVR. Il faut le demander explicitement avec analogReadResolution(12).
Matériel
- 1 Arduino Due
- 1 potentiomètre 10 kΩ (3 broches : curseur au milieu)
- 3 fils mâche-mâche
- Câble micro-USB + moniteur série
Code complet
// Lecture 12 bits d'un potentiomètre sur A0
// Fils : potentiomètre broche gauche -> 3V3, curseur -> A0, broche droite -> GND
void setup {
analogReadResolution(12); // sans cette ligne : 0..1023 (défaut 10 bits !)
SerialUSB.begin(115200); // moniteur sur le port Native
}
void loop {
int brut = analogRead(A0); // 0..4095 en 12 bits
float tension = brut * 3.3f / 4095.0f; // base 3,3 V (Vref de la Due)
SerialUSB.printf("brut=%d soit %.3f V\n", brut, tension);
delay(50);
}
Vérification attendue
En tournant le potentiomètre à fond, la valeur brute doit balayer environ 0 à 4095 et la tension calculée 0 à 3,3 V. Si vous commentez analogReadResolution(12), la plage retombe à 0–1023 : c'est la preuve du défaut 10 bits du core. La tension suit la position du curseur de façon linéaire.
Erreurs fréquentes
- Oublier
analogReadResolution(12)puis supposer (comme dans beaucoup de tutoriels) que la plage est 0–4095 : vos conversions tension sont fausses d'un facteur 4. - Alimenter le potentiomètre en 5 V : la référence de l'ADC de la Due est 3,3 V, au-delà de 3,3 V sur la broche A0 vous sortez de la plage mesurable — et sur les broches numériques, rappel : 3,3 V max absolu.
- Ouvrir le mauvais moniteur série (Serial vs SerialUSB, voir le tuto clignotement).
- Inverser 3V3 et GND aux extrémités du potentiomètre : la lecture devient inversée (sans risque de destruction avec 10 kΩ).
- Attendre du bruit zéro : un doigt posé sur le potentiomètre injecte du 50 Hz ; moyennez sur plusieurs échantillons si besoin.
Autres tutoriels pour cette carte
- Faire clignoter la LED de l'Arduino Due et apprivoiser ses deux ports USB
- Allumer une LED externe en respectant les broches 3,3 V et 9 mA de la Due
- Générer une vraie tension analogique avec les DAC 12 bits (broches 66 et 67)
- Dialoguer avec un GPS (ou tout module TTL) sur Serial1 sans bloquer la boucle
- Scanner les deux bus I2C de la Due (Wire sur 20/21, Wire1 sur 70/71)
- Monter la Due sur un bus CAN 500 kbit/s avec un transceiver externe
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinodac-onde.inoArduinoadc-12-bits.inoArduinopwm-12-bits.inoArduinogps-serial1.inoArduino