🛠 Lire un capteur analogique sur A1
Objetivos
Utilizar las entradas analógicas de la MKR GSM 1400: la tarjeta dispone de 7 entradas A0–A6 con un ADC de 12 bits (ADC_RESOLUTION 12 en la variante del core), y A0 es también la salida DAC. Este tutorial lee un potenciómetro en A1, promedia varias muestras y enciende el LED integrado por encima de un umbral — el patrón básico de cualquier sensor analógico (sonda de nivel, sensor de calidad de agua tipo WaterAid, etc.).
Material
- Tarjeta Arduino MKR GSM 1400
- 1 potenciómetro de 10 kΩ (o cualquier sensor analógico de 0–3,3 V)
- Protoboard y cables jumper
- USB para la alimentación (módulo de radio no utilizado)
Código completo
// 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);
}
Verificación esperada
Al girar el potenciómetro, el valor bruto sigue de 0 a aproximadamente 4095 y el voltaje mostrado permanece cercano a 0–3300 mV. El LED integrado se enciende a mitad de recorrido. El promedio de 16 muestras estabiliza la lectura: sin él, los últimos decimales fluctúan, especialmente cuando el módulo de radio transmite (en esta etapa está inactivo).
Errores frecuentes
- Alimentar el sensor con 5 V y leer sin divisor: el ADC acepta como máximo 3,3 V en el pin; por encima de eso, la medición es incorrecta y se corre el riesgo de dañar la entrada.
- Esperar un rango de 0–1023: el SAMD21 está configurado en 12 bits en este core, no en 10 bits como un Arduino Uno.
- Ruido en la medición: acercar las masas, aumentar el promedio y no comparar dos lecturas sucesivas sin margen (histéresis) alrededor del umbral.
- Confundir A1 (entrada) con A0/DAC0 (la única salida analógica de la tarjeta) como si fuera una salida.
- Olvidar
while (!Serial)y creer que la consola está muerta al iniciar.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
gsm-connexion.inoArduinoenvoi-sms.inoArduinohttp-get.inoArduinohttp-post-capteur.inoArduinoheure-gsm.inoArduinoappels.inoArduino