🛠 Lire un capteur analogique et générer une tension avec le DAC
Objetivos
Aprovechar el verdadero convertidor analógico-digital (7 entradas, resolución configurable de 8/10/12 bits) y la salida analógica real DAC de 10 bits en A0 — un verdadero lujo ausente en los Arduino Uno. Leemos un potenciómetro en A1 y generamos una tensión continua o una rampa en A0.
Material
- 1 × Arduino MKR WiFi 1010
- 1 × potenciómetro de 10 kΩ (pines en 3,3 V, A1, GND)
- 1 × multímetro en A0 (opcional pero ilustrativo)
- Recordatorio: alimentación del sensor a 3,3 V máximo, la placa no es tolerante a 5 V
Código completo
// ADC sur A1 (12 bits), DAC sur A0 (10 bits).
const uint8_t PIN_ANA = A1;
const uint8_t PIN_DAC = A0;
void setup {
Serial.begin(115200);
analogReadResolution(12); // ADC: 8/10/12 bits configurables
analogWriteResolution(10); // DAC: 10 bits
pinMode(PIN_DAC, OUTPUT); // A0 = sortie analogique vraie (DAC)
}
void loop {
int raw = analogRead(PIN_ANA);
float volts = raw * 3.3f / 4095.0f;
analogWrite(PIN_DAC, map(raw, 0, 4095, 0, 1023)); // miroir 10 bits
Serial.printf("raw=%u (%.2f V) -> DAC %u\n", raw, volts,
map(raw, 0, 4095, 0, 1023));
delay(100);
}
Verificación esperada
Al girar el potenciómetro, el valor bruto sigue 0–4095 (resolución de 12 bits) y la tensión calculada 0–3,3 V. El multímetro conectado a A0 muestra la misma tensión que el cursor: el DAC produce una verdadera tensión suave, no una PWM filtrada. Serial.printf funciona nativamente en SAMD.
Errores frecuentes
- Confundir
analogWriteResolutionyanalogReadResolution: son distintas, el DAC es de 10 bits, el ADC configurable hasta 12. - Olvidar
pinMode(PIN_DAC, OUTPUT)antes de usar A0 como salida: no sale ninguna tensión. - Alimentar el sensor a 5 V desde el pin «5V» (paso directo no regulado) y superar la escala completa del ADC referenciada a 3,3 V.
- Esperar 0 o 4095 exactamente en el mínimo/máximo del potenciómetro: el riel real satura un poco antes, es normal.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
scan-wifi.inoArduinoconnexion-wpa2.inoArduinohttp-get.inoArduinoserveur-web-led.inoArduinohorloge-ntp.inoArduinoudp-diffusion.inoArduino