🛠 Gestion de batterie LiPo : jauge, charge et seuils bas

Particle Boron · avance · Schéma : IMG-particle-boron-avance-2-boron-gestion-batterie.svg — Boron reliée à une LiPo avec chargeur intégré, LED de statut de charge, jauges tension et pourcentage lues par FuelGauge.

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

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

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales