🛠 Lire un capteur analogique sur A1
Objectifs
Utiliser les entrées analogiques de la MKR GSM 1400 : la carte dispose de 7 entrées A0–A6 avec un ADC 12 bits (ADC_RESOLUTION 12 dans la variante du core), et A0 est aussi la sortie DAC. Ce tutoriel lit un potentiomètre sur A1, moyenne plusieurs échantillons et allume la LED embarquée au-delà d'un seuil — le patron de base de tout capteur analogique (sonde de niveau, capteur de qualité d'eau type WaterAid, etc.).
Matériel
- Carte Arduino MKR GSM 1400
- 1 potentiomètre 10 kΩ (ou tout capteur analogique 0–3,3 V)
- Breadboard et câbles jumper
- USB pour l'alimentation (module radio non utilisé)
Code complet
// Capteur analogique sur A1, ADC 12 bits, moyenne mobile + seuil LED
const uint8_t CAPTEUR = A1;
const uint16_t SEUIL = 2048; // milieu de l'echelle 12 bits (0..4095)
uint16_t lireMoyenne(uint8_t broche, uint8_t n) {
uint32_t somme = 0;
for (uint8_t i = 0; i < n; i++) {
somme += analogRead(broche);
delay(2);
}
return somme / n;
}
void setup {
analogReadResolution(12); // 12 bits par defaut, explicite ici
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(9600);
while (!Serial) {}
}
void loop {
uint16_t v = lireMoyenne(CAPTEUR, 16);
// Tension approximative : ADC alimente en 3,3 V, pleine echelle 4095.
float mv = v * 3300.0f / 4095.0f;
Serial.print("A1 brut : "); Serial.print(v);
Serial.print(" ~"); Serial.print(mv);
Serial.println(" mV");
digitalWrite(LED_BUILTIN, v > SEUIL ? HIGH : LOW);
delay(200);
}
Vérification attendue
En tournant le potentiomètre, la valeur brute suit de 0 à environ 4095 et la tension affichée reste proche de 0–3300 mV. La LED embarquée s'allume à mi-course. La moyenne sur 16 échantillons stabilise la lecture : sans elle, les dernières décimales dansent, surtout quand le module radio émet (à ce stade il est inactif).
Erreurs fréquentes
- Alimenter le capteur en 5 V puis lire sans diviseur : l'ADC accepte au maximum 3,3 V sur la broche, au-delà on mesure faux et on risque d'endommager l'entrée.
- Attendre une plage 0–1023 : le SAMD21 est configuré en 12 bits sur ce core, pas en 10 bits comme un Arduino Uno.
- Bruit de mesure : rapprocher les masses, augmenter la moyenne, et ne pas comparer deux lectures successives sans marge (hystérésis) autour du seuil.
- Confondre A1 (entrée) et A0/DAC0 (seule sortie analogique de la carte) pour une sortie.
- Oublier
while (!Serial)et croire que la console est morte au démarrage.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
gsm-connexion.inoArduinoenvoi-sms.inoArduinohttp-get.inoArduinohttp-post-capteur.inoArduinoheure-gsm.inoArduinoappels.inoArduino