Mesurer la charge de la batterie qui alimente un arduino nano

Bonjour à tous,

Je fais appel à votre savoir avant de me lancer dans un branchement et codage peut etre impossible:

  • J'utilise un arduino nano que j'alimente par un powerbank qui délivre 5 volts.
  • Dans ce powerbank se trouve une batterie de 3,7 volts (qui sont transformés en 5v pour la sortie usb

1/ Je pars du principe que les masses de l'arduino et de la batterie 3,7v sont communes. (vous me dites si je me trompe.....
2/ Je cherche à mesurer la tension au borne de la batterie 3,7v pour en caulcer son pourcentage de charge.
3/ Je pense connecter le (+) de la batterie 3,7v sur une entrée analogique et faire un analogread() de celle-ci.

si 1/, 2/ et 3/ sont possibles, Me confirmez-vous que :
A/ Je ne vais rien faire cramer
B/ comme l'arduino est alimenté en 5V, il sera capable de comparer les 3,7v sur l'entrée analogique par rapport à ses 5V
C/ que le réhausseur de tension sera suffisament "stable" pour que ma mesure soit réaliste avec une marge d'erreur acceptable

J'ai le sentiment que tout est juste dans ma tête, mais ma tête me joue parfois des tours... :wink:

Merci d'avance pour vos réponses
Guillaume

Salut.

C'est à toi de vérifier ce point, avec un multimètre.

Forcément.

Tout dépend du rehausseur. La tension de référence devra être renseignée dans le code, et tu devras utiliser la vraie valeur relevée au multimètre.
Remarque : si tu alimentes la NANO par l'USB, une diode Schottky est en série entre le 5V USB et la broche 5V. Si la consommation est variable, le 5V sera variable aussi.

Merci a toi pour cette réponse rapide!

Je suppose que la verification au multimètre se fait en le mettant en mode "ohm mètre" et en espérant trouver un résultat proche de zéro?
(Faut il qu'il soit strictement égal à zéro?)

si c'est pour la liaison des masses, il y'a mieux qu'espérer une valeur nulle en mesure de résistance.
tu dois avoir une fonction "continuité de ligne" sur ton multimètre. Il émettra un bip si 2 portions de ton circuit sont connectées ensemble (formant un fil de résistance considérée nulle).

Chez moi c'est un petit symbole de buzzer

ah merci beaucoup pour cette info sur mon multi mettre. je vais voir si il en équipé.... Ça me facilitera grandement les prochaines vérifications!!!

Strictement égal à ZÉRO, il ne faut pas rêver. La résistance des fils du multimètre est souvent de 0.5Ω.

Quelques remarques sur ce point :

  • il faudra connaitre le profil de la courbe de décharge... C'est assez linéaire pour les vieilles batteries au plomb (pas les powerbank donc) mais plutôt « plat » pour les lithium diverses et ça peut se jouer sur qq dixièmes de volts
  • cette courbe dépend de pas mal de paramètres dont la puissance demandée (est-elle à peu près constante dans ton montage ?) et de la température (montage en extérieur ?)

Plus lourd à mettre en place mais surement plus fiable : mesurer en continu tension (pas forcément sur le 3,7 V du coup) ET intensité, calculer la puissance instantanée et intégrer. Tu as alors l'énergie consommée réellement que tu compare à la capacité annoncée.

Mesurer le courant consommé ne rime pas à grand chose, puisque lors de la recharge l'ARDUINO ne sera pas averti de l'opération.
Voici un projet de thermomètre sur batterie avec mesure de la tension :
https://bitbucket.org/henri_bachetti/mysensors-battery-thermometer/src/master/arduino/DS18B20-TempSensor/DS18B20-TempSensor.ino
Le tableau remainingCapacity permet de connaître le pourcentage de charge en fonction de la tension. La fonction getBatteryCapacity retourne directement le capacité restante en %.
Attention, la référence interne 1.1V est utilisée :

#define VREF                  1.099

  analogReference(INTERNAL);

  unsigned int adc = analogRead(0);
  float voltage = adc * VREF / 1023 / 0.248;
// 0.248 correspond au rapport de division d'un pont diviseur,
// car la tension à mesurer dans mon cas ne doit pas dépasser 1.1V. 
// Ce pont diviseur est inutile dans ton cas.

Dans ton cas, si tu choisis le 5V comme référence, il faudra d'abord mesurer cette tension, et l'adopter dans le code.

#define VREF                  5.05  // par exemple

  unsigned int adc = analogRead(0);
  float voltage = adc * VREF / 1023;

Tout va dépendre de la stabilité du 5V du powerbank.

Mais le 5 V du power bank ne devra pas etre appliqué par l’USB.
Entre l’accès USB et le Vcc il y a une diode Schottky : chute de tension entre 0,4 V et 0,6 V variable avec la consommation instantanée. .
Il faudra l’appliquer directement sur la pin 5 V de la nano.

Sur la nano il y a un regulateur 3,3 V qui donne une tension stable.
Je verrai bien l’appliquer sur Aref et choisir analogue reference external.
Appliquer la tension a mesurer par l’intermédiaire d’un pont résistif pour qu’au maximum elle fasse 3 V.

Si un accès direct a la batterie est possible ce serait mieux de surveiller directement la tension de la batterie.

Oui, guillaume83 parle bien de mesurer aux bornes de la batterie 3.7V.
Effectivement, tu as raison, le 3.3V sera certainement plus stable que le 5V du powerbank, et surtout moins bruité.

Effectivement, je pense faire une lecture de la batterie 3,7V pendant une décharge compète décharge complète du powerbank (jusqu'à ce que l'arduino ne soit plus alimenté) pour connaitre la courbe de décharge. Dans mon projet, je ne cherche pas une grande précision car j'indique la charge par palier de 10%.
Mesurer la consommation ne me semble pas nécessaire car c'est davatange pour prévenir que la charge est <30% que je fais cette mesure.

Ton projet ressemble effectivement à ce que je souhaite pour la mesure de la batterie 3,7v.
J'ai effectivement tester la stabilité du 5v annoncé du powerbank, et ce n'est pas stable avec une moyenne de 4,6 v et des variation de +- 0,2 volts.
Du coup, je pense utiliser la référence du 1,1v comme tu le fais.

oui @68tjs je vais bien mesurer la batterie 3,7v qui est dans la powerbank

s'il s'agissait d'une PRO MINI la référence 1.1V serait la solution, mais avec une NANO le 3.3V sera certainement plus stable et précis. Il faut savoir que la référence 1.1V est précise à +/- 10%, et sa stabilité en température laisse à désirer.
Le régulateur 3.3V sera certainement plus indiqué.

Vous m'avez l'air bien renseignés sur le sujet et du coup, comme il s'agit de l'alimentation de ce projet.... je vais vous décrire un peu mieux mon problème d'autonomie.
Encore aujourd'hui, mon projet est alimenté par une batterie 9v rechargeable de 800mah pour des raison de simplicité car il s'adresse à des personnes assez "tête en l'air" qui seront capables d'oublier de recharger la batterie 9v. En cas d'oubli, ils auront toujours avec eux des piles 9v alcalines en dépannage. Problème de la tête en l'air réglé. J'étais trop content de moi..... Mais...

---> J'ai conscience que vous êtes déjà en train de vous dire que la pile 9v est une hérésie... mais si vous connaissiez les personnes à qui est destiné le projet, je vous assure que vous éprouveriez un sentiment de compassion à mon égard...

La pile est branchée sur le Vin de l'arduino nano, et mon autonomie est d'environ 3h30. Pas fou fou, ce n'est clairement pas assez car il me faudrait au mois 10h.

J'optimise mon code..... je monte à 6h. c'est bien!

Je tente de regarde des modes de veille avec lowpower.h et autres librairies.... Problème, mon projet affiche un chronomètre en permanence et attente l'appui d'un bouton...

C'est alors que je me dis que la powerbank est la solution pour l'autonomie.... mais ne résout en rien l'attention portée par les utilisateurs sur sa charge.

---> J'insiste, ce n'est parce qu'ils vont voir qu'il reste 10% d'autonomie qu'ils vont penser à recharger.... Pauvre de moi !!!

Je cherche encore et m'aperçois que l'arduino "brûle" la tension supérieure des 5V utiles lorsqu'une tension supérieure à 6,5V est fournie (5V + 1,5v de déclenchement du régulateur). Alors je me pose la question du pont diviseur de tension.

Après tout, cette tension en trop, ou va-t-elle ??? Est-ce qu'un pont diviseur serait la solution pour gagner encore en autonomie avec la pile 9v????? Et quel couple de résistances devrai-je utiliser pour perdre le moins d'autonomie possible et alimenter l'arduino directement par le Vin pour ne pas que le régulateur internet consomme inutilement?

PS : c'est fou tout ce qu'on peut écrire quand on est passionné :wink:

Un pont diviseur pour abaisser une tension d'alimentation n'est certainement pas une solution, surtout que ce pont diviseur produit une tension qui dépend du courant consommé. Deuxièmement, le pont diviseur ajoute sa propre consommation.
Le powerbank alimente l'ARDUINO par l'USB, pas par VIN, donc cette solution est de loin préférable. Le powerbank protège également sa batterie. Lorsque la tension chute à 3V environ, il coupe sa sortie.

@hbachetti Merci pour votre réponse. Et oui, je confirme que la powerbank regroupe bcp d'avantage....

Donc si le pont diviseur de tension n'est pas adapté, est-ce que ceci pourrait l'être sans trop consommer :
DC-DC Convertisseur Abaisseur de Tension

Une NANO consomme 30mA. Avec 800MAh on devrait obtenir 800/30 = 26 heures.
A moins qu'il y ait d'autres modules consommateurs, je ne saisis pas bien.

OK, je vois un affichage. La consommation s'explique ...
800mA / 6H = 133mA.

Je ne vois guère de solution avec une batterie 9V. Effectivement un convertisseur à découpage permettrait d'économiser un peu :
L'AMS1117 va dissiper (9V - 5V) * 133mA = 532mW, ce qui revient à dire que le rendement est d'environ 45%.
Le convertisseur LM2596 du module donné en lien aura un rendement plus proche de 90%.
Mais c'est sans filet, car si la tension de la batterie 9V chute trop profondément, sa durée de vie diminue.
Même en mesurant la tension de la batterie, la sécurité est nulle, car la NANO continue à consommer. Il y a bien la solution d'utiliser le mode veille en cas de décharge importante, mais la NANO n'est pas un foudre de guerre de ce point de vue. Elle consommera quand même ~ 12mA, au lieu de 30.

@hbachetti Merci pour ces précisions.

Les éléments extérieurs sont :

  • 1 lcd 20x4 en i2C toujours allumé et avec le rétroéclairage.
  • 1 buzzer qui n'est activé que trop rarement pour le prendre en compte
  • 1 rangée de 5 led ws2812 qui ne clignotent en utilisation que 50ms par seconde, la plus part du temps sur une seul couleur donnée (rouge ou vert ou bleu) et dont l'intensité à été réduite à 50% pour économiser un peu
  • 2 boutons poussoir
  • 1 interrupteur ON/OFF à clé

Alors ce que vous avec dit m'intéresse bcp car si je passe d'un rendement de ±46 % à ±90 %, je suis ok pour l'autonomie : gros intérêt de passer par le module en lien cité plus haut.
Par contre, je ne suis pas sur de comprendre la crainte de voir la tension de la pile 9V chuter car j'imagine que comme c'est une pile rechargeable il a une sécurité à ce niveau là.
Pour le moment, cette pile 9v rechargeable alimente le nano sur Vin. Quand elle est vide, le nano s'éteint et ne se rallume pas. Je vais tenter de vider la pile pour arriver à ce point là et mesurer sa tension quand l'arduino est éteint. Puis laisser branché pour voir si la tension continue à chuter.

Que se passe-t-il si la tension de la pile descend en dessous de 6,5v? Le convertisseur extérieur en lien ci-dessus, qui ne s'enclenche qu'au delà de 1,5v au dessus de la tension de sortie, fournira alors 6,5v sur Vin et l'arduino ne sera pas non plus capable de réguler cette tension..... Il y a-t-il un risque de surtension?