batterie-lipo.ino
Autonomía bajo control: lectura periódica de la tensión de la batería LiPo del MKR GSM 1400 con umbrales de aviso. El módem 2G provoca picos de corriente, así que vigilar VBAT evita reinicios a mitad de transmisión.
Hardware
Una Arduino MKR GSM 1400 (microcontrolador SAMD21, módem celular 2G/GPRS, antena externa, alimentada por batería LiPo en el conector J6 o por USB). Una LiPo de 3,7 V en el conector de batería de la placa (celda sola) o cargando por USB; sin sensor externo.
Cableado
Batería LiPo en el conector de batería de la placa (respeta la polaridad), antena colocada para medidas realistas.
Funcionamiento
El SAMD21 mide VBAT con un divisor interno; readVbat() del core devuelve la tensión real. Los umbrales 4,0/3,8/3,5 V corresponden a los niveles clásicos de una LiPo.
Ejecución
En el IDE de Arduino, instala el paquete Arduino SAMD Boards, selecciona la placa MKR GSM 1400 y carga. Los ejemplos de red suponen una SIM de datos activa insertada, la antena enroscada y cobertura 2G todavía disponible en tu zona.
Variantes
Apaga el módem (gsm.shutdown()) por debajo de 3,5 V, añade un registrador en SD o traza la curva de descarga para calibrar tu autonomía real.
batterie-lipo.ino
// Suivi de la batterie LiPo branchee sur le connecteur J6 du MKR.
#include <MKRGSM.h>
#include <battery_soc.h> // exemple de l'IDE : estimation state-of-charge
GSM gsm;
const long PERIODE = 30000; // lecture toutes les 30 s
unsigned long dernier = 0;
void setup() {
Serial.begin(9600);
while (!Serial);
analogReadResolution(10); // 10 bits pour VBAT sur SAMD21
Serial.println(F("Suivi batterie LiPo (J6)"));
}
void loop() {
if (millis() - dernier < PERIODE) return;
dernier = millis();
int brut = analogRead(VBAT); // diviseur interne 2/3
float vbus = 3.3 * brut / 1023.0 * 1.5;
float vbat = readVbat(); // helper du package SAMD
Serial.print("VBAT brut="); Serial.print(brut);
Serial.print(" ~"); Serial.print(vbus, 2); Serial.print(" V | ");
Serial.print("LiPo "); Serial.print(vbat, 2);
Serial.print(" V -> ");
if (vbat > 4.0) Serial.println(F("chargee"));
else if (vbat > 3.8) Serial.println(F("normale"));
else if (vbat > 3.5) Serial.println(F("faible, recharge!"));
else Serial.println(F("CRITIQUE, debranche le modem"));
}