🛠 Lire un potentiomètre avec le vrai ADC 12 bits de la Due
Objetivos
Aprovechar el argumento de venta de la Due en el lado analógico: su convertidor analógico-digital es de 12 bits (0–4095), frente a los 10 bits de los Arduino AVR. Vas a cablear un potenciómetro, leer su posición… y descubrir la trampa documentada del core: analogRead devuelve por defecto valores de 10 bits (0–1023) para mantener la compatibilidad con AVR. Hay que solicitarlo explícitamente con analogReadResolution(12).
Material
- 1 Arduino Due
- 1 potenciómetro de 10 kΩ (3 patillas: cursor en el medio)
- 3 cables macho-macho
- Cable micro-USB + monitor serie
Código completo
// 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);
}
Verificación esperada
Al girar el potenciómetro hasta el final, el valor bruto debe barrer aproximadamente de 0 a 4095 y el voltaje calculado de 0 a 3,3 V. Si comentas analogReadResolution(12), el rango vuelve a 0–1023: esta es la prueba del defecto de 10 bits del core. El voltaje sigue la posición del cursor de forma lineal.
Errores frecuentes
- Olvidar
analogReadResolution(12)y luego suponer (como en muchos tutoriales) que el rango es 0–4095: tus conversiones de voltaje son incorrectas por un factor de 4. - Alimentar el potenciómetro con 5 V: la referencia del ADC de la Due es de 3,3 V; por encima de 3,3 V en la patilla A0 sales del rango medible — y en las patillas digitales, recordatorio: 3,3 V máximo absoluto.
- Abrir el monitor serie equivocado (Serial vs SerialUSB, ver el tutorial de parpadeo).
- Invertir 3V3 y GND en los extremos del potenciómetro: la lectura se invierte (sin riesgo de destrucción con 10 kΩ).
- Esperar ruido cero: un dedo puesto sobre el potenciómetro inyecta 50 Hz; promedia sobre varias muestras si es necesario.
Otros tutoriales para esta placa
- 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
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinodac-onde.inoArduinoadc-12-bits.inoArduinopwm-12-bits.inoArduinogps-serial1.inoArduino