🛠 Lire un capteur analogique et générer une tension avec le DAC
Objectifs
Exploiter le vrai convertisseur analogique-numérique (7 entrées, résolution configurable 8/10/12 bits) et la sortie analogique réelle DAC 10 bits sur A0 — un vrai luxe absent des Arduino Uno. On lit un potentiomètre sur A1 et on génère une tension continue ou une rampe sur A0.
Matériel
- 1 × Arduino MKR WiFi 1010
- 1 × potentiomètre 10 kΩ (broches sur 3,3 V, A1, GND)
- 1 × multimètre sur A0 (optionnel mais parlant)
- Rappel : alimentation capteur en 3,3 V maximum, la carte n'est pas 5 V tolérante
Code complet
// 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);
}
Vérification attendue
En tournant le potentiomètre, la valeur brute suit 0–4095 (résolution 12 bits) et la tension calculée 0–3,3 V. Le multimètre branché sur A0 affiche la même tension que le curseur : le DAC produit une vraie tension lisse, pas un haché PWM filtré. Serial.printf fonctionne nativement sur SAMD.
Erreurs fréquentes
- Confondre
analogWriteResolutionetanalogReadResolution: elles sont distinctes, le DAC est 10 bits, l'ADC configurable jusqu'à 12. - Oublier
pinMode(PIN_DAC, OUTPUT)avant d'utiliser A0 en sortie : aucune tension ne sort. - Alimenter le capteur en 5 V depuis le pin « 5V » (passe-plat non régulé) et dépasser la pleine échelle de l'ADC référencée à 3,3 V.
- Attendre 0 ou 4095 pile au minimum/maximum du potentiomètre : le rail réel sature un peu avant, c'est normal.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
scan-wifi.inoArduinoconnexion-wpa2.inoArduinohttp-get.inoArduinoserveur-web-led.inoArduinohorloge-ntp.inoArduinoudp-diffusion.inoArduino