batterie-lipo.ino

Arduino MKR GSM 1400 · Fichier : batterie-lipo.ino · Langage : Arduino · Usage : Surveiller la tension de la batterie LiPo alimentant la carte

Autonomie sous contrôle : lecture périodique de la tension de la batterie LiPo branchée sur J6 du MKR GSM 1400, avec seuils d'alerte. Le modem 2G appelant des pointes de courant, suivre VBAT évite les coupures brutales en pleine transmission.

Matériel requis

Une Arduino MKR GSM 1400 (microcontrôleur SAMD21, modem cellulaire 2G/GPRS, antenne externe, alimentation par batterie LiPo sur le connecteur J6 ou par USB). Une batterie LiPo 3,7 V chargée sur le connecteur J2 (cellule seule), ou en charge via USB ; aucun capteur externe.

Câblage

Batterie LiPo sur le connecteur J2 de la carte (respectez la polarité), antenne en place pour les mesures réalistes.

Fonctionnement

Le SAMD21 mesure VBAT via un diviseur interne ; readVbat() du core renvoie la tension réelle. Les seuils 4,0/3,8/3,5 V correspondent aux paliers classiques d'une LiPo lithium-polymère.

Exécution

Dans l'IDE Arduino, installez le package Arduino SAMD Boards, sélectionnez la carte MKR GSM 1400, puis téléversez. Les exemples réseau supposent une carte SIM data active insérée, broche antenne vissée, et un réseau 2G encore couvert dans votre région.

Variantes

Coupez le modem (gsm.shutdown()) sous 3,5 V, ajoutez un enregistreur sur carte SD, ou tracez la courbe de décharge dans un tableur pour calibrer votre autonomie réelle.

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

← Retour à la fiche