🛠 Gestion de batterie LiPo : jauge, charge et seuils bas
Objectifs
La Boron intègre tout le nécessaire pour une LiPo mono-cellule : chargeur, connecteur batterie et LED de statut (allumée = charge, éteinte = terminée, clignotement 1 Hz = défaut, clignotement rapide = batterie débranchée), plus une jauge de carburant TI sur I2C accessible par l'API FuelGauge (getVCell, getSoC). Ce tutoriel avancé met en place une télémétrie batterie robuste : lecture périodique, alerte cloud sous seuil, et stratégies pour survivre à la décharge profonde — une LiPo à plat a déjà « briké » le cloud de cartes communautaires (retour en 10 SOS, re-claim DFU nécessaire).
Matériel
- 1× Particle Boron + LiPo 3,7 V (vérifiez la polarité du connecteur JST : « toutes les LiPo ne suivent pas la même convention », avertissement officiel du datasheet)
- câble micro-USB pour la phase de charge
- Particle CLI + device connecté
Code complet
// Boron — telemetrie batterie avec alerte de seuil
#include "Particle.h"
SYSTEM_THREAD(ENABLED);
FuelGauge fuel;
const float SEUIL_CRITIQUE = 20.0; // % de charge
const float SEUIL_BAS = 35.0;
uint32_t cycle = 0;
bool alerteEnvoyee = false;
void setup {
Serial.begin(9600);
Particle.variable("soc", cycle); // derniere valeur lue
}
void loop {
if (waitFor( => Cellular.ready, 30000)) {
float v = fuel.getVCell;
float soc = fuel.getSoC;
char msg[96];
snprintf(msg, sizeof(msg), "V=%.2f SoC=%.1f", v, soc);
Particle.publish("batterie", msg, PRIVATE);
if (soc < SEUIL_BAS && !alerteEnvoyee) {
snprintf(msg, sizeof(msg), "SOC=%.0f%% U=%.2fV", soc, v);
Particle.publish("batterie-alerte", msg, ALWAYS);
alerteEnvoyee = true;
}
if (soc > SEUIL_CRITIQUE + 20) alerteEnvoyee = false; // hysteresis
Serial.printf("%.2f V / %.1f %%\n", v, soc);
}
delay(60000); // 1 minute pour le test ; 1 h en production (+ sommeil)
}
Si la LED de charge rapide-clignote sans batterie, désactivez le chargement de façon persistante via SystemPowerFeature::DISABLE_CHARGING (Power Manager) plutôt que PMIC.disableCharging, que le Power Manager réapplique au reset.
Vérification attendue
Branchée sur USB avec LiPo vide : la LED de charge est allumée, le pourcentage monte régulièrement et les événements batterie suivent. Débranchez le USB : la tension mesurée correspond au repos de la LiPo. Simulez un seuil bas (soc < 35) : l'événement batterie-alerte est publié une seule fois grâce à l'anti-répétition, puis se réarme après recharge.
Erreurs fréquentes
- Polarité LiPo inversée au premier branchement : risque de destruction immédiate ; contrôlez fiche et câble avant la première mise sous tension.
- Ignorer le clignotement 1 Hz (défaut de charge) : la batterie n'est jamais pleine et l'autonomie annoncée est fausse.
- Laisser la LiPo descendre sous ~3 V : décharge profonde, cartes observées en boucle 10 SOS nécessitant un re-flash DFU et un re-claim du device.
- Se fier à
getSoCseul juste après une charge : la jauge se recalibre en cycle complet charge-décharge ; croisez avecgetVCell. - Charger via un port USB 500 mA avec un modèle 2G/3G : les pics du SARA-U201 atteignent 1,8 A en 2G et font chuter l'alim ; ces modèles exigent 2 A ou une LiPo branchée.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-evenement.inoArduinofonction-distance.inoArduinocapteur-dht.inoArduinoruban-neopixel.inoArduinopwm-respiration.inoArduino