batterie_lipo.ino
Le BQ25120 du Sense ME se pilote en logiciel : ce sketch fixe le courant de charge à 100 mA, désactive la sonde NTC si la LiPo n’en a pas, et affiche tension et pourcentage de la cellule 3,7 V. Le socle de toute application sur batterie.
Matériel requis
Une Arduino Nicla Sense ME (nRF52832 dans un module ANNA-B112, BLE seul, pas de Wi-Fi) avec hub capteurs Bosch BHI260AP, magnétomètre BMM150, baromètre BMP390, capteur de gaz BME688, LED RVB sur pilote I2C et chargeur LiPo BQ25120. Une LiPo simple cellule 3,7 V sur le connecteur ACH 3 points (J4) et une source USB ou VIN 3,5-5,5 V pour charger.
Câblage
Cellule + sur le connecteur ACH J4 (respecter la polarité !), 0 V au centre. L’USB ou VIN alimente la carte ET recharge la cellule via le BQ25120.
Fonctionnement
nicla::begin débloque les registres du chargeur ; enableCharging(100) limite le courant (0,5C sûr pour 200 mAh) ; getBatteryVoltagePercentage estime le niveau par la tension. Le NTC est optionnel sur la cellule.
Exécution
Programmation via Arduino IDE (core ArduinoCore-mbed, target NICLA_SENSE_ME) ; bibliothèques Arduino_BHY2 (capteurs) et Nicla_System (LED, chargeur) ; USB via pont série SAMD11.
Variantes
Ajuster le courant à 0,5C de votre cellule, couper la charge en dessous de 0 °C (exigence LiPo), ou consommer en deep sleep entre deux mesures pour viser les 460 µA de standby annoncés.
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);
}