🛠 Lire un capteur analogique sur A0
Objectifs
Lire un capteur analogique (potentiomètre, thermistance, capteur de lumière) sur l'entrée A0 du MKR NB 1500. Le SAMD21 possède un ADC 10 bits (0–1023) limité à 3,3 V, et A0 (PA02) est aussi la sortie DAC du microcontrôleur : la même broche sait mesurer et générer une tension analogique.
Matériel
- 1 carte MKR NB 1500 + câble micro-USB
- 1 potentiomètre 10 kΩ : une extrémité au 3,3 V, l'autre au GND, le curseur sur A0
- Éventuellement un capteur 3,3 V à la place du potentiomètre (jamais de signal > 3,3 V sur A0)
Code complet
// Lecture ADC + boucle DAC — MKR NB 1500
const uint8_t SENSOR_PIN = A0; // PA02 : entrée ADC0 + sortie DAC (DAC0)
void setup {
Serial.begin(9600);
while (!Serial);
analogReadResolution(10); // ADC SAMD21 : 10 bits par defaut
}
void loop {
int raw = analogRead(SENSOR_PIN); // 0..1023 pour 0..3,3 V
uint32_t mv = (uint32_t)raw * 3300UL / 1023UL; // tension en millivolts
Serial.print("raw="); Serial.print(raw);
Serial.print(" -> "); Serial.print(mv); Serial.println(" mV");
analogWrite(DAC0, raw); // reemet la même tension en 0..3,3 V
delay(500);
}
Vérification attendue
Tournez le potentiomètre : la valeur affichée passe de 0 à 1023 et les millivolts suivent. En reliant A0 (via un condensateur 100 nF vers GND pour lisser) à une autre entrée analogique, la tension recopiée par le DAC se retrouve identique — la boucle mesure/restitution fonctionne.
Erreurs fréquentes
- Appliquer 5 V sur A0 (capteur 5 V sans diviseur) : au-delà de 3,3 V on sature, pire on risque d'endommager le SAMD21.
- Attendre une résolution de 12 bits : l'ADC est 10 bits,
analogReadrenvoie 0–1023. - Oublier que la broche passe en mode DAC dès qu'on appelle
analogWrite(DAC0, ...): il faut la reconfigurer pour relire ensuite. - Mesures qui « dansent » de plusieurs crans : normal sans découplage ; ajoutez une moyenne sur N lectures.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
attente-lte-nbiot.inoArduinochoix-bande.inoArduinopublish-mqtt-minimal.inoArduinoeconomie-energie.inoArduinogeoloc-cellules.inoArduinotest-coverage.inoArduino