batterie_lipo.ino
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);
}