Skyduino:~#
Articles
arduino, programmation, projet

[Arduino] Faire des benchmark de piles LR6, AAA, …

Bonjour tout le monde !

Comme j’ai beaucoup de chose à faire « In real life », d’articles à écrire, de projets à finir, … je n’ai pas eu le temps de faire un article samedi dernier, désolé.
J’ai aussi plein d’articles assez long en préparation, je ne sait pas trop quand je vais pouvoir les publier.

Bref, aujourd’hui je vous propose un article simple mais utile !
A savoir faire des benchmarks de piles LR6, AAA, …

Je ne sait pas vous, mais moi je me retrouve souvent avec des piles qui trainent un peu partout, sans trop savoir si elle sont encore utilisable ou non.
Se pose aussi la question de la durée de vie et les performances de telle ou telle marque de pile.

Du coup je me suis dit qu’il serait intéréssant de pouvoir comparer plusieurs type de piles et d’en faire un graphique !

Pour cela j’ai conçu un petit montage à base d’arduino très simple mais efficace.

Attention : Ce montage est conçu pour mesurer des piles de tension inférieur à 5volts uniquement !
Il n’y as pas non plus de protection en cas d’inversement +/-, faite donc attention en branchant la pile !

Le montage :

Celui ci ce compose d’une résistance de 15 ohms entre A0 et la masse et de deux pinces crocodile.

Aucune difficultés donc pour refaire le montage chez vous 😉

La résistance de 15 ohms a pour but de servir de charge, afin de pourvoir mesurer la tension et ainsi calculer l’ampérage et la puissance fourni par la pile.

Remarque : il faut utiliser une résistance de 1/2W et non une résistance classique de 1/4W sinon elle risquera de cramer 😉
Pas besoin non plus d’utiliser une résistance de précision, ici j’utilise une résistance à +/- 10%, l’important est de savoir sa valeur réel (-> multimètre).

Au passage j’utilise des pinces crocodiles, du scotch et un élastique pour maintenir la pile en place …

Je sait c’est pas très propre, mais je n’ai pas retrouvé mon support de pile LR6, du coup je fait avec ce que j’ai sous la main.
(Mc Guyver inside, il ne manquerai plus qu’un trombone pour faire un bombe :))

La théorie :

D’un point vue schématique le montage ressemble à ça :

Comme on peut le voir la pile est en parallèle de la résistance.
La tension aux bornes de la résistance est donc identique à la tension aux bornes de la pile.

Soit U la tension aux bornes de la résistance, R la valeur de la résistance, I le courant traversant la résistance et P la puissance fourni par la pile.

Tout d’abord intéressons nous à la mesure de la tension aux bornes de la résistance.
analogRead() retourne une valeur (ici appelé « val ») entre 0 et 1023, valeur « numérique » correspondant à la tension en A0.

Pour avoir la tension en volt il faut donc appliquer la formule suivante :
U = (val / 1023.0) * 5.0

(Ne pas oublier les .0 en fin de nombre afin d’avoir un calcul avec des nombres flottant (nombres à virgules).

Ensuite …
On connais la valeur de la résistance (R), on peut donc en déduire le courant I qui la traverse en partant de la tension à ses bornes (U) en utilisant la formule de la loi d’ohm : U = R x I.
On obtient donc : I = U / R, avec I en ampères, U en volts et R en ohms.

Travailler avec des ampères en utilisant des piles est assez problématique, il est donc préférable d’avoir le courant I en mA pour être plus significatif :
I = (U x 1000.0) / R, avec I en milliampères, U en volts et R en ohms.

En partant de I et de U on peut déduire par la même occasion la puissance fourni par la pile via la formule : P = U x I.
Comme l’on utilise I en mA (et non en ampères) le résultat sera en mW en non en watt.

Le code :

Maintenant que le montage est prét et que la théorie est en place, il ne reste plus qu’as rassembler le tout !

/*
 * Programme de benchmark de piles LR6, AAA, CR2032 ou tout autre piles inférieur à 5v
 */

/* Valeur de la résistance de charge */
const float charge_resistor = 15.2;

/* Broche de mesure */
const byte analog_pin = A0;

/* Macro de conversion valeur numérique -> tension en volts */
//#define ADC_TO_VOLTS(value) ((value / 1023.0) * 3.3)
#define ADC_TO_VOLTS(value) ((value / 1023.0) * 5.0)

/* setup() */
void setup() {

  /* Initialise le port série */
  Serial.begin(115200);

  /* Si vous voulez mesurer des piles de moins de 3.3v il est plus précis d'utiliser AREF comme référence 
   * et de mettre un câble entre +3v3 et AREF */
  //analogReference(EXTERNAL);
}

/* loop() */
void loop() {
  
  /* Attend la mise en place d'une pile >1 volts */
  while(analogRead(analog_pin) < 200);

  /* Compteur de temps */
  unsigned int time = 0;
  
  /* Résultat de analogRead() */
  unsigned int analog;

  /* Mesure la batterie jusqu'a ce quelle atteigne 1 volts*/
  while((analog = analogRead(analog_pin)) > 200) {

    /* Mesure de la tension de la batterie (en volts) */
    float vbat = ADC_TO_VOLTS(analog);

    /* Calcul du courant traversant la résistance (en mA) */
    float ibat = (vbat * 1000) / charge_resistor; // I = U / R

    /* Calcul de la puissance de la batterie (en mW) */
    float pbat = vbat * ibat; // P = U * I

    /* Affiche les résultats au format CSV */
    Serial.print(time);
    Serial.print(',');
    Serial.print(vbat);
    Serial.print(',');
    Serial.print(ibat);
    Serial.print(',');
    Serial.print(pbat);
    Serial.println();

    /* Incrémente le compteur de temps */
    ++time;

    /* Attend une seconde */
    delay(1000);
  }
}

Remarque : Si vous voulez mesurer des piles de moins de 3.3v (uniquement), il est plus précis d’utiliser AREF comme référence analogique et de mettre un câble entre +3v3 et AREF.
Il faudra alors enlever le commentaire de analogReference() dans setup et basculer les deux commentaires de #define ADC_TO_VOLTS.

Le montage pourrait être grandement amélioré en utilisant une tension en AREF proche de la tension maximale des piles testé (par exemple 1.5v pour une LR6).
Pour bien faire il faudrait aussi mesurer l’évolution de la température ambiante qui joue sur les performances des piles.

Il serait aussi envisageable d’ajouter un petit écran lcd, un calcul de la puissance cumulé en mW/h ou en joule, …
Bref, si vous voulez vous amuser vous pouvez ajouter plein de chose au montage 😉

Le résultat :

J’ai utilisé une pile déjà un peu fatigué (même trés fatigué) que j’ai piquer dans une télécommande.
Ce genre de petite bête étant une denrée rare chez moi je ne voulais pas sacrifier une pile neuve pour cet article 😉

(Si je trouve une pile pas trop mauvaise dans un tiroir je referai un graphique complet)

Enjoy 🙂

Publicités

Discussion

5 réflexions sur “[Arduino] Faire des benchmark de piles LR6, AAA, …

  1. Bien sûr tu le dis…. mais il faut insister lourdement sur la nécessité de décommenter //analogReference(EXTERNAL);
    avant d’envoyer toute tension sur Vref !!
    Vref,sans cela, est une sortie … et envoyer une tension sur une sortie n’est pas du tout conseillé !
    les ATmega sont assez sensibles sur cette broche

    Publié par Al1Fch& (@alfch) | 3 juillet 2012, 18 h 36 min
  2. C’est tout bonnement génial ! simple, il fallait pourtant y penser ! j’imagine déjà l’utilisation que je pourrais faire de ça … notamment pouvoir sur mon install domotique à base d’Arduino, récupérer l’état des batteries de quelques modules alimentées sur batterie … Skywodd tu es mon rayon de soleil … enfin pour cette nuit le temps de développer tout ca 😉

    Publié par dji-why | 23 février 2013, 22 h 17 min
  3. Bonjour, j’ai une question un peu stupide mais j’ai peur de me louper :
    Quand vous dites que la tension de la pile mesurée doit être inferieure a 5v, est-ce que si la pile fait exactement 5v ça marche ?

    Publié par Leow | 14 février 2015, 13 h 51 min

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Skyduino devient Carnet du Maker

Le site Carnet du Maker remplace désormais le blog Skyduino pour tout ce qui touche à l'Arduino, l'informatique et au DIY.