arduino pro mini et surveillance du niveau de la batterie

Bonjour à tous,

je veux remonter vers domoticz le niveau de la batterie qui alimente une sonde de température.
La sonde est installée sur un pro mini 3.3V et je régule la tension d’une 18650 avec un POLOLU-2122 3.3V Step-Up/Step-Down Voltage Regulator S7V8F3 /fba.

J’ai trouvé un bout de code qui avait l’avantage d’être compréhensible par moi, il se trouve sur cette page.
http://www.frantic.ovh/?p=167

Mais un doute m’étreint (raisonnablement), comme la mesure se fait sur l’arduino derrière le Pololu Step-Up/Step-Down celui-ci (l’arduino) ne connaitra jamais le vrai niveau de la batterie ?

Merci.

Il n'y a aucun doute à avoir c'est faisable.
La tension de l'accu est supérieure à celle du microcontroleur donc on ne peut pas appliquer directement la tension de l'accu sur une entrée analogique.

Il suffit de calculer un pont de résistance pour diviser la tension de l'accu afin qu'à pleine charge on applique jamais plus de 3V (il faut toujours se garder une marge de sécurité) sur l'entrée analogique.

En suivant l'article que tu cites j'ai vu qu'il donnait un schéma électrique pour le faire.

Oui, évidemment il faut prendre la tension aux bornes de la batterie (en la ramenant sur la plage de tension attendue par l'ADC). Sinon tu mesures une tension régulée.
Maintenant, la pro mini 3,3V tourne à 8MHz. A cette fréquence, le micro peut fonctionner sans régulateur sur la plage de tension délivrée par un accus Li-Ion.
Donc tu pourrais très bien supprimer le régulateur et alimenter la carte directement avec l'accus. Et là tu pourras utiliser le principe de mesure de la tension que tu as trouvé. En plus tu diminueras la consommation de l'ensemble (encore que le régulateur ne consomme pas énormément).

Comme ceci :

Le dossier complet avec le code : ICI

Voir 11.2. Le nouveau schéma

Le lien vers le sketch MYSENSORS : sous le schéma.

18650 : c'est vraiment surdimensionné. Ma sonde température se contente d'une 16340 de 225mAH depuis plus d'un an.

@+

Merci à tous pour vous réponses,

Je vais donc opter pour le pont diviseur et changer la bme280 pour une dallas DS18B20 et sa résistance de 4.7k pour l'extérieur.

Je suis incapable de calculer la valeur du pont diviseur avec la formule cabalistique (l’inconvénient d'avoir quitté l'école à 14 ans pour aller passer un cap de de cuisto) mais je présume que ces valeurs sont données pour une tension (3.7v) et qu'il n'y a pas de différences que j’utilise une 18650 ou une 16340 et que je peux rester sur ce que tu indique, Henri, sur ton site; Une résistance de 1M 1% et une résistance de 330K 1% ?
Merci.

Sur la page http://www.frantic.ovh/?p=167, il explique que sa méthode de mesure permet de se passer de pont diviseur.
Ce n'est pas adapté à ton cas, car il mesure en fait la tension VCC du micro-contrôleur.

OK si l'alimentation se fait par piles (2 piles de 1.5V = 3V)

Dans ton cas tu auras 4.2V à pleine charge. Dangereux pour le NRF24L01 (3.6V) ou RFM95 (3.7V).

Tu ne peux donc te passer de régulateur (c'est bien de t'en être aperçu), et tu es donc obligé de passer par un pont diviseur.

Tu ne pourras pas utiliser la librairie Vcc qui mesure le VCC de l'ARDUINO.

Utilise plutôt ceci :

//      float v = vcc.Read_Volts();
// à remplacer par ceci
#define VREF                  1.1  // à mesurer au multimètre sur la broche VREF

  unsigned int adc = analogRead(0);
  Serial.print("ADC: ");
  Serial.println(adc);
  // 0.248 = rapport du pont diviseur. voir plus bas
  float v = adc * VREF / 1023 / 0.248;

1M 1% et une résistance de 330K 1%

Ue = tension d'entrée (3.7V nominaux mais 4.2V à pleine charge)
Us = tension de sortie
Sur mon schéma :
R2 = 1M
R3 = 330K
Le rapport du pont diviseur est de 330000 / (1000000 + 330000) = 0.248
Us = Ue * R3 / (R2 + R3) = 4.2 * 330000 / (1000000 + 330000) = 1,042V
1.04V est en dessous de 1.1V -> OK

Il n'y a rien de cabalistique.

J'utilise la référence interne de l'ATMEGA328 : 1.1V
Le code que tu cites aussi : Arduino_Vcc/Vcc.cpp at master · Yveaux/Arduino_Vcc · GitHub

Mais il y a plusieurs problèmes :

Ton régulateur à découpage pompe trop de jus sur la batterie.
Maximum quiescent current: 0.1 mA
100µA c'est pas trop mal, mais un régulateur linéaire ferait bien mieux : un LM2936 (15µA) par exemple ou un HT7533-1 (2.5µA) ou un HT7333-1 (2.5µA).
regarde ICI

Comme tu peux le voir sur le schéma l'utilise le LM2936 qui fournit seulement 50mA mais il est peut être un peu léger pour ton application. Tout dépend du reste du montage.
Tu parles de domoticz, donc NRF24L01 ou RFM95 ?
Si c'est du NRF24L01 le LM2936 est OK, avec du RFM69 tout dépend de la puissance en émission.
Il peut pomper jusqu'à 120mA en mode boost.
Mais le HT7533-1 est meilleur de toutes façons.
Le HT7333-1 peut assurer 150mA.

As-tu supprimé la LED power de ta PRO MINI et levé la patte du régulateur situé sur la carte ?
regarde ICI

La référence 1.1V n'est pas précise (10%). Tu devras l'étalonner. De plus elle varie pas mal en fonction de la température.
Pour l'extérieur je te déconseille. Tu vas mesurer une tension égale à n'importe quoi, et croire que la batterie est vide quand il fait froid, à moins de compenser en température dans le code.

La tension de la référence interne 1.1V varie de façon non linéaire :

Cela ne va pas être facile d'obtenir une mesure fiable en extérieur.

La tension du régulateur HT7533-1 varie de 0.5mV par degré.
Entre -10° et 40° tu obtiendras 25mV de variation, ce qui est acceptable.
La tension du régulateur HT7333-1 varie de 0.7mV par degré.
Entre -10° et 40° tu obtiendras 30mV de variation.

Éventuellement tu peux mesurer sa tension au froid (frigo) et au chaud (radiateur) en mesurant la température pour faire une petite correction dans le logiciel.

Tu pourrais l'utiliser comme référence pour l'ADC, mais il faut recalculer le pont diviseur :

R2 = 390K
R3 = 1M
Le rapport du pont diviseur est de 1000000÷(390000+1000000) = 0.719
Us = Ue * R3 / (R2 + R3) = 4,2×1000000÷(390000+1000000) = 3.02V
3.02V est en dessous de 3.3V -> OK

#define VREF                  3.3  // à mesurer au multimètre

  unsigned int adc = analogRead(0);
  Serial.print("ADC: ");
  Serial.println(adc);
  float v = adc * VREF / 1023 / 0.719;

La mesure d'une tension batterie LITHIUM-ION doit être précise.
Elle varie entre 4.2V et 3V. A 3V il faut recharger.

hbachetti:
Sur la page http://www.frantic.ovh/?p=167, il explique que sa méthode de mesure permet de se passer de pont diviseur.
Ce n'est pas adapté à ton cas, car il mesure en fait la tension VCC du micro-contrôleur.

OK si l'alimentation se fait par piles (2 piles de 1.5V = 3V)

Dans ton cas tu auras 4.2V à pleine charge. Dangereux pour le NRF24L01 (3.6V) ou RFM95 (3.7V).

Tu ne peux donc te passer de régulateur (c'est bien de t'en être aperçu), et tu es donc obligé de passer par un pont diviseur.

Tu ne pourras pas utiliser la librairie Vcc qui mesure le VCC de l'ARDUINO.

Utilise plutôt ceci :

//      float v = vcc.Read_Volts();

// à remplacer par ceci
#define VREF                  1.1  // à mesurer au multimètre sur la broche VREF

unsigned int adc = analogRead(0);
 Serial.print("ADC: ");
 Serial.println(adc);
 // 0.248 = rapport du pont diviseur. voir plus bas
 float v = adc * VREF / 1023 / 0.248;




Ue = tension d'entrée (3.7V nominaux mais 4.2V à pleine charge)
Us = tension de sortie
Sur mon schéma :
R2 = 1M
R3 = 330K
Le rapport du pont diviseur est de 330000 / (1000000 + 330000) = 0.248
Us = Ue * R3 / (R2 + R3) = 4.2 * 330000 / (1000000 + 330000) = 1,042V
1.04V est en dessous de 1.1V -> OK

Il n'y a rien de cabalistique.

J'utilise la référence interne de l'ATMEGA328 : 1.1V
Le code que tu cites aussi : https://github.com/Yveaux/Arduino_Vcc/blob/master/Vcc.cpp

Mais il y a plusieurs problèmes :

Ton régulateur à découpage pompe trop de jus sur la batterie.
Maximum quiescent current: 0.1 mA
100µA c'est pas trop mal, mais un régulateur linéaire ferait bien mieux : un LM2936 (15µA) par exemple ou un HT7533-1 (2.5µA) ou un HT7333-1 (2.5µA).
regarde [ICI](https://riton-duino.blogspot.com/2018/11/les-regulateurs-ldo.html)

dudule63:
Il faudrait que je sache quelle autonomie je peux espérer avec mon Pololu et ma 18650. J'avais regardé ta page sur les différents régulateurs, mais je rencontre plusieurs écueils. 1) Il faut que je puisse les souder avec mon fer à souder basique. 2) L'utilisation de ces bestioles nécessitent en plus d'implanter des résistances, des condos et de connaitre/comprendre les valeurs à utiliser, je sais copier, pas calculer ce qui serait utile. J'ai trouvé ça sur amazon: https://www.amazon.fr/gp/product/B07DJZKMYM?pf_rd_p=61e3aca3-2f4c-4ed4-8b56-08aa65c1d16f&pf_rd_r=SPPZAN5EJC3C5THV6PRG Il y a marqué sur le circuit n1if et en cherchant je tombe sur cette référence HX4002B ce serait mieux que le Pololu ? Sinon une solution plus simple serait de se passer de régulateur et de partir sur deux piles AA mais généralement les rechargeables sont plus souvent autour de 1.3 v que de 1.5v ça risque de faire juste.

hbachetti:
Comme tu peux le voir sur le schéma l'utilise le LM2936 qui fournit seulement 50mA mais il est peut être un peu léger pour ton application. Tout dépend du reste du montage.
Tu parles de domoticz, donc NRF24L01 ou RFM95 ?

dudule63:
J'utilise un NRF24L01+

hbachetti:
Si c'est du NRF24L01 le LM2936 est OK, avec du RFM69 tout dépend de la puissance en émission.
Il peut pomper jusqu'à 120mA en mode boost.
Mais le HT7533-1 est meilleur de toutes façons.
Le HT7333-1 peut assurer 150mA.

As-tu supprimé la LED power de ta PRO MINI et levé la patte du régulateur situé sur la carte ?
regarde ICI

dudule63:
Oui

hbachetti:
La référence 1.1V n'est pas précise (10%). Tu devras l'étalonner. De plus elle varie pas mal en fonction de la température.
Pour l'extérieur je te déconseille. Tu vas mesurer une tension égale à n'importe quoi, et croire que la batterie est vide quand il fait froid, à moins de compenser en température dans le code.

La tension de la référence interne 1.1V varie de façon non linéaire :
http://ww1.microchip.com/downloads/en/AppNotes/doc8060.pdf

Cela ne va pas être facile d'obtenir une mesure fiable en extérieur.

La tension du régulateur HT7533-1 varie de 0.5mV par degré.
Entre -10° et 40° tu obtiendras 25mV de variation, ce qui est acceptable.
La tension du régulateur HT7333-1 varie de 0.7mV par degré.
Entre -10° et 40° tu obtiendras 30mV de variation.

Éventuellement tu peux mesurer sa tension au froid (frigo) et au chaud (radiateur) en mesurant la température pour faire une petite correction dans le logiciel.

Tu pourrais l'utiliser comme référence pour l'ADC, mais il faut recalculer le pont diviseur :

R2 = 390K
R3 = 1M
Le rapport du pont diviseur est de 1000000÷(390000+1000000) = 0.719
Us = Ue * R3 / (R2 + R3) = 4,2×1000000÷(390000+1000000) = 3.02V
3.02V est en dessous de 3.3V -> OK

#define VREF                  3.3  // à mesurer au multimètre

unsigned int adc = analogRead(0);
 Serial.print("ADC: ");
 Serial.println(adc);
 float v = adc * VREF / 1023 / 0.719;




La mesure d'une tension batterie LITHIUM-ION doit être précise.
Elle varie entre 4.2V et 3V. A 3V il faut recharger.

dudule63:
Merci du temps que tu prends pour le répondre.

OK.
Tu as donc 2 choix :

1 : Conserver la 18650.
La consommation en mode veille sera légèrement supérieure à 100µA :

  • S7V8F3 : 100µA
  • PRO MINI : < 5µA
  • DS8B20 : 1µA
  • pont diviseur : 3µA

La 18650, si elle fait 2000mAH tiendra 2 ans si elle c’est une batterie de qualité. Si c’est une chinoiserie, certainement moins, peut-être un an.

2 : Remplacer le régulateur S7V8F3 par un HT7533-1:

  • HT7533-1 : 2.5µA
  • PRO MINI : < 5µA
  • DS8B20 : 1µA
  • pont diviseur : 3µA

Total : 12µA maxi

Si tu vises une autonomie d’un an :

0.000012 * 24 * 365 = 100mAH

Tu pourrais te contenter d’une petite LIPO de 100mAH ou 200mAH.
Aussi possible : une 16340 (format CR123) de 200mAH

C’est juste une question d’encombrement.

La LIPO réclamera un chargeur adapté.

La 18650 ou la 16340 peut se recharger avec un TP4056 :

Personnellement dans mon thermomètre j’utilise une 16340 et j’installe un TP4056 dans le boîtier du capteur, avec un petit orifice pour la prise USB.
Le gain de place en passant d’une 18650 à une 16340 me permet d’installer le chargeur à demeure, connecté en permanence sur la batterie (il consomme très peu : qq µA).

Attention : les 16340 ALI-EXPRESS ou autre chinoiseries sont annoncées avec des capacités délirantes : 3000mAH.
J’ai aussi testé des batteries 18650 6000mAH qui font en réalité moins de 1000mAH.
Regarde ICI

Mais ce n’est pas grave, elles font le job. Comme je disais plus haut :
Ma sonde de température se contente d’une 16340 de 225mAH depuis plus d’un an, sans recharge, et c’est une chinoise.

@+

Je suis incapable de calculer la valeur du pont diviseur avec la formule cabalistique

Je te comprend et même si je sais m'en servir je les fuis comme la peste.

Il y a quelque temps j'avais décrit une méthode de calcul simple et logique (donc qui peut se retenir facilement) et uniquement basée sur la loi d'ohm U=RI.

Dans ton cas comme tu entres sur une entrée de microcontrôleur qui fait des millions d'ohms ce sera comme s'il n'y avait pas de charge. Tu pourra prendre sans danger un courant de pont de 0,1 mA ou moins.

Assez parlé le lien vers le détail du calcul :

@ 68tjs, merci pour le lien, je vais lire.

@ hbachetti ,

Va pour le HT7533-1 en boitier TO-92, il y a juste deux condos à rajouter comme indiqué sur le schéma en pièce jointe ?

Comme pour la majeure partie des régulateurs.
On arrive à en trouver sur AliExpress.

D'accord, merci.