🛠 Lire un capteur analogique : potentiomètre et ADC 10 bits
Objetivos
Descubrir el convertidor analógico-digital (ADC) de 10 bits del ATmega32u4: analogRead devuelve un entero de 0 a 1023 proporcional a la tensión en el pin, entre 0 V y 5 V. También aprenderá la particularidad de las entradas analógicas de la Leonardo: 12 entradas A0 a A11, de las cuales A6 a A11 comparten (multiplexan) los pines digitales 4, 6, 8, 9, 10 y 12 — la numeración del núcleo Arduino es, de hecho, fuente de confusión en estos pines.
Material
- 1 Arduino Leonardo + cable micro-USB
- 1 potenciómetro (10 kΩ típico)
- 3 cables: cursor hacia A0, un extremo hacia 5V, el otro hacia GND
Código completo
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);
}
Verificación esperada
Al girar el potenciómetro a mano, los valores mostrados siguen: aproximadamente 0 en un extremo, aproximadamente 1023 en el otro, y la tensión calculada permanece entre 0 y 5 V. Si el valor salta mucho en reposo, es normal: una entrada analógica no conectada a una fuente de baja impedancia capta ruido.
Errores frecuentes
- Usar A6-A11 sin saber que comparten los pines digitales 4/6/8/9/10/12: si también usa estos pines en modo digital, el comportamiento se vuelve incoherente (numeraciones duplicadas en el núcleo, cf. issue #187 de ArduinoCore-avr).
- Alimentar el sensor con 3V3: posible, pero la escala de medición sigue siendo 0-5 V; una referencia incoherente distorsiona el cálculo de voltios.
- Esperar una resolución de 12 bits: el ADC del ATmega32u4 es de 10 bits, no de 12 como en un ESP32.
- Olvidar la masa común: un sensor alimentado por una fuente externa debe compartir GND con la placa.
Otros tutoriales para esta placa
- 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
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinoclavier-auto-tape.inoArduinosouris-cercle.inoArduinotelecommande-media.inoArduinobouton-clic-souris.inoArduino