🛠 Gestion de batterie LiPo : jauge, charge et seuils bas
Objetivos
La Boron integra todo lo necesario para una LiPo de celda única: cargador, conector de batería y LED de estado (encendido = carga, apagado = completado, parpadeo a 1 Hz = fallo, parpadeo rápido = batería desconectada), además de un indicador de nivel TI sobre I2C accesible mediante la API FuelGauge (getVCell, getSoC). Este tutorial avanzado implementa una telemetría de batería robusta: lectura periódica, alerta en la nube por debajo de un umbral y estrategias para sobrevivir a la descarga profunda — una LiPo totalmente descargada ya ha «bloqueado» la nube de tarjetas comunitarias (retorno a 10 SOS, re-claim DFU necesario).
Material
- 1× Particle Boron + LiPo 3,7 V (verifique la polaridad del conector JST: «no todas las LiPo siguen la misma convención», advertencia oficial de la hoja de datos)
- Cable micro-USB para la fase de carga
- Particle CLI + dispositivo conectado
Código completo
// 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 el LED de carga parpadea rápidamente sin batería, desactive la carga de forma persistente mediante SystemPowerFeature::DISABLE_CHARGING (Power Manager) en lugar de PMIC.disableCharging, ya que el Power Manager la vuelve a aplicar tras un reinicio.
Verificación esperada
Conectada por USB con una LiPo vacía: el LED de carga está encendido, el porcentaje sube regularmente y los eventos batterie se siguen. Desconecte el USB: la tensión medida corresponde al reposo de la LiPo. Simule un umbral bajo (soc < 35): el evento batterie-alerte se publica una sola vez gracias a la anti-repetición, y se rearma tras la recarga.
Errores frecuentes
- Polaridad de la LiPo invertida en la primera conexión: riesgo de destrucción inmediata; controle el conector y el cable antes de la primera puesta en tensión.
- Ignorar el parpadeo a 1 Hz (fallo de carga): la batería nunca se llena y la autonomía anunciada es falsa.
- Dejar que la LiPo baje por debajo de ~3 V: descarga profunda, tarjetas observadas en bucle de 10 SOS que requieren un re-flash DFU y un re-claim del dispositivo.
- Confiar únicamente en
getSoCjusto después de una carga: el indicador se recalibra en un ciclo completo de carga-descarga; cruce los datos congetVCell. - Cargar a través de un puerto USB de 500 mA con un modelo 2G/3G: los picos del SARA-U201 alcanzan 1,8 A en 2G y hacen caer la alimentación; estos modelos requieren 2 A o una LiPo conectada.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-evenement.inoArduinofonction-distance.inoArduinocapteur-dht.inoArduinoruban-neopixel.inoArduinopwm-respiration.inoArduino