batterie-lipo.ino

Arduino MKR GSM 1400 · Archivo : batterie-lipo.ino · Lenguaje : Arduino · Uso : Surveiller la tension de la batterie LiPo alimentant la carte

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"));
}

← Volver a la ficha