batterie_lipo.ino

Arduino Nicla Sense ME · Archivo : batterie_lipo.ino · Lenguaje : Arduino · Uso : Gérer la charge de la batterie LiPo

El cargador BQ25120 del Sense ME se maneja por software: este sketch fija la corriente de carga en 100 mA, desactiva la sonda NTC si la LiPo no la trae y muestra voltaje y porcentaje de la célula de 3,7 V. La base de toda aplicación a batería.

Hardware

Una Arduino Nicla Sense ME (nRF52832, solo BLE) con hub Bosch BHI260AP, BMM150, BMP390, BME688, LED RGB en driver I2C y cargador LiPo. Una LiPo de una célula 3,7 V en el conector ACH de 3 puntos (J4) y una fuente USB o VIN de 3,5-5,5 V para cargar.

Cableado

Célula + al conector ACH J4 (respeta la polaridad), 0 V al centro. USB o VIN alimenta la placa Y recarga la célula vía el BQ25120.

Funcionamiento

nicla::begin desbloquea los registros del cargador; enableCharging(100) limita la corriente (0,5C seguro para 200 mAh); getBatteryVoltagePercentage estima el nivel por tensión. El NTC es opcional en la célula.

Ejecución

Programación desde Arduino IDE (core ArduinoCore-mbed); librerías Arduino_BHY2 y Nicla_System; USB por puente serie.

Variantes

Ajustar la corriente a 0,5C de tu célula, cortar la carga bajo 0 °C (exigencia LiPo), o dormir en deep sleep entre medidas para apuntar a los 460 µA de reposo anunciados.

batterie_lipo.ino

// Le chargeur BQ25120 est un arbre à commandes logiciel (docs-db) :
// nicla:: pilote courant de charge, NTC, timer de sécurité.
// Alimenter en USB ou VIN pendant la charge.

#include "Nicla_System.h"

void setup() {
  Serial.begin(115200);
  nicla::begin();

  // LiPo sans sonde NTC : désactiver la lecture NTC sinon erreur
  nicla::setBatteryNTCEnabled(false);

  // 100 mA = ~0,5C pour une cellule 200+ mAh (valeur sûre)
  nicla::enableCharging(100);
}

void loop() {
  static unsigned long t = 0;
  if (millis() - t > 5000) {
    t = millis();

    int pct = nicla::getBatteryVoltagePercentage();
    float vbat = nicla::getCurrentBatteryVoltage();

    Serial.print("Batterie : ");
    Serial.print(pct); Serial.print(" %  ");
    Serial.print(vbat, 2); Serial.println(" V");

    if (pct < 10) {
      nicla::leds.begin();
      nicla::leds.setColor(red);   // alarme batterie critique
    }
  }
  delay(10);
}

← Volver a la ficha