Lorsqu’on développe ses propres objets connectés, on a souvent besoin de les faire fonctionner sur piles ou batterie LiPo. Seul problème, on ne connait pas l’énergie restant ni la tension d’alimentation. Heureusement, l’Arduino, les modules ESP8266 et même le Raspberry possèdent tous au moins un convertisseur analogique/numérique avec lequel on va pouvoir estimer ces deux grandeurs.
Un fois intégré à un serveur domotique, on pourra mettre en place un scénario ou une notification pour indiquer qu’il est temps de remplacer les piles ou recharger la batterie.
Sommaire
Comment mesurer la tension délivrée par une batterie ?
Pour écrire cet article, je n’ai pas réinventé la roue. Je me suis inspiré de cet excellent article publié par skyduino (que je remercie au passage). Nous aurons besoin de deux résistances et d’une carte disposant d’au moins une entrée analogique. J’ai utilisé une carte ESP8266 Wemos D1 Mini présentée précédemment.
Pour mesurer la tension délivrée par une batterie, nous allons réaliser un pont diviseur dont la formule suivante :
Vs = Vin * ( R2 / ( R1 + R2) )
Il faut ensuite tenir compte des caractéristiques de l’Arduino ou de la carte ESP8266. En effet, le convertisseur A/N (ADC) d’un Arduino est capable de supporter une tension de 20 Volts alors que la tension admissible par un ESP8266 est différente d’un fabricant à l’autre (quand elle est indiquée par le fabriquant !!). Voici quelques exemples :
Fabricant
Modèle |
Tension max. admissible sur A0 | Documentation |
Adafruit
Huzzah ESP8266 |
1.8 Volts | Consulter |
Wemos
D1 mini |
3.3 Volts | Consulter |
Sparkfun
ESP8266 Thing |
? | Consulter |
Seeed
NodeMCU v2 |
? | Consulter |
En fonction de la carte employée, il va donc falloir ajuster le pont diviseur de tension et donc choisir les résistances en conséquence. L’idée est de diminuer la tension délivrée par la batterie (ou les piles) pour ne pas dépasser la tension admissible par le convertisseur, sans trop le diminuer pour avoir une mesure précise…ouff
J’ai fait quelques petits calculs pour trouver des combinaisons de résistances en fonction de la tension admissible par le convertisseur A/N des cartes. J’ai cherché des combinaisons avec des résistances qui sont disponibles dans le Starter Kit Arduino. J’ai fait les calculs pour quelques tensions d’alimentation courantes : 2xAA, 3xAA, 4xAA, régulateur de tension LD1117V33, batterie LiPO, chargeur 5V.
Type d’alimentation |
1,8V max. | 3.3V max. | 20V max. | |
R1 = 1000 ohms
R2= 220 ohms |
R1 = 220 ohms
R2 = 220 ohms |
R1 = 1000 ohms
R2 = 4700 ohms |
||
3V | 2xAA | 0,541V | 1,500V | 2,474V |
3,3V | Pont LD1117V33 | 0,595 V | 1,650V | 2,721V |
3,7V | Batterie LiPo | 0,667V | 1,850V | 3,051V |
4,5V | 3xAA | 0,811V | 2,250V | 3,711V |
5V | Chargeur | 0,902V | 2,500V | 4,123V |
6,5V | 4xAA | 1,172V | 3,250V | 4,650V |
Coeff. diviseur du pont | 0,18 | 0,5 | 0,82456 |
Code couleur des résistances employées :
- 220 ohms : rouge, rouge, brun
- 1000 ohms : brun, noir, rouge
- 4700 ohms : jaune, violet, rouge
Voici le branchement à réaliser. Branchez la résistance R1 sur l’alimentation +5V (ici, on test l’alimentation 5V de la carte Wemos D1). Reliez la résistance R2 sur la broche GND et la sonde de mesure comme sur le schéma.
Vous pouvez également mesurer la tension délivrée par une autre batterie. Dans ce cas, reliez les masses ensemble (batterie + carte).
Mesurer la tension du batterie avec ESP Easy
Pour ceux qui préfèrent utiliser ESP Easy pour programmer rapidement, voici comment mesurer la tension délivrée par une batterie et la publier ur un serveur domotique à l’aide de MQTT. Si vous découvrez ESP Easy, je vous invite à lire cet article de présentation. De même, si vous débutez avec MQTT, vous pouvez commencer ici.
Connectez vous à la carte ESP et allez dans l’onglet Devices puis cliquez sur Edit de l’une des 4 lignes.
- Dans le combo Device, sélectionnez Analog input
- Donnez un nom (le même pour toutes les tâches pour simplifier les Topics MQTT)
- Donnez un numéro. Inutile sous Jeedom par exemple mais si vous n’indiquez pas un numéro (ou 0), rien ne fonctionne
- Cochez Send Data
Dans un premier temps, saisissez simplement %value% puis sur submit. Actualisez ensuite la page en appuyant sur Device. On obtient la valeur renvoyée par le convertisseur A/N, une valeur comprise entre 0 (pour 0V) et 1023 (pour 3.3V).
Valeur renvoyée par le convertisseur A/N
Maintenant commençons par calculer la valeur théorique mesurée par la sonde en sortie de pont. On l’obtient ainsi :
Value * ( Tension Max. A0 / 1024 )
Dans le cas de la Wemos, la tension max au borne du convertisseur étant de 3,3V, on aura donc pour un niveau 788
788 * ( 3,3 / 1024 ) = 2,54 Volts
Exact !
Mesure de la tension en sortie du pont diviseur
Comme on sait que le pont à un coefficient diviseur de 0,5 pour la Wemos D1 Mini, on a donc
Tension Réelle = ( Value * ( 3,3 / 1024 ) ) / 0,5
ou pour être plus précis
Tension Réelle = ( Value * ( 3,3 / 1024 ) ) / ( R2 / ( R1 + R2 ) )
Il ne reste plus qu’à l’intégrer dans ESP Easy. Passez la tâche en édition en saisissez la formule suivante en remplaçant R1 et R2 par la valeur de vos résistances ou le coefficient diviseur s’il est exact.
(%value%*(3.3/1024))/0.5
C’est terminé, vous avez maintenant une mesure (correcte) de la tension délivrée par la carte.
Tension théorique calculée à l’aide d’ESP Easy
Vérifions un peu si on mesure la même chose avec un multimètre directement branché aux bornes de la carte .
Mesure de la tension réelle délivrée à la broche +5V de la Wemos D1 Mini
C’est pas trop mal !
Code Arduino (compatible ESP8266) pour mesurer la tension
Adaptez le code suivant et téléverser le dans un Arduino.
/* * Testeur de batterie par pont diviseur * Projets DIY - Mai 2016 - http://www.projetsdiy.fr * Lire l'article complet : * Licence : */ /* Constantes */ const float TMaxA0 = 3.3; // Tension maximale admissible par le convertisseur A/N de la carte (consulter la documentation du fabriquant) const float coeff_pont = 0.5; // R1 / ( R1 + R2 ) R1 et R2 en ohms /* setup() */ void setup() { /* Initialisation du port série */ Serial.begin(9600); Serial.println("Testeur Niveau Batterie"); Serial.println(coeff_pont); } /* loop() */ void loop() { /* Mesure du niveau renvoyé par le convertisseur A/N */ unsigned int raw_bat = analogRead(A0); //Serial.println(raw_bat); /* Calcul de la tension réel */ float tension_bat = ((raw_bat * ( TMaxA0 / 1024)) / coeff_pont); /* Affichage */ Serial.println(tension_bat); delay(2000); }
Vous pouvez maintenant surveiller le niveau de batterie de vos objets connectés DIY et même prévoir des scénarios pour déclencher une alerte lorsque le niveau de batterie est devenu trop faible.
- ESP32, broches GPIO et fonctions associées. I/O, PWM, RTC, I2C, SPI, ADC, DAC
- ESP32-CAM. Broches et équipements ESP-EYE, AI Thinker, TTGO T-Camera, M5Stack Timer Camera…
- ESP32-CAM. Quel modèle choisir ? ESP-EYE, AI Thinker, TTGO T-Camera, M5Stack Timer Camera…
- M5Stack Atomic GPS. Tracker ESP32 TinyGPS++, export GPX sur carte SD, visualisation sur Google Maps ou VSCode
- Home Assistant. Installer le snap sur NAS Synology sur une machine virtuelle Ubuntu
- ESP32-CAM. Souder l’antenne externe pour améliorer la portée et la stabilité du flux vidéo
Avez-vous aimé cet article ?