batterie_lipo.ino

Arduino Nicla Sense ME · Fichier : batterie_lipo.ino · Langage : Arduino · Usage : Gérer la charge de la batterie LiPo

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);
}

← Retour à la fiche