1. Avant propos
En milieu de saison automnale, quand je commence à nouveau les entraînements de jogging ou randonnées de nuit, je charge « à fond » les accus de ma lampe frontale pour courir avec une bonne visibilité et sécurité. Dans mon cas, l'avantage des piles rechargeables est qu'elles offrent une luminosité plus forte et surtout constante dans le temps. Sauf qu'au milieu de ma première sortie, je me suis retrouvé « dans le noir » après quelques minutes seulement. Victime d'une batterie défectueuse ou mal chargée, mais aussi d'une caractéristique des accus : leur faible résistance interne... Contrairement aux alcalines dont la luminosité diminue progressivement (résistance interne plus élevée qui augmente en cours de décharge), la résistance interne est (très) faible, et une fois déchargée, la tension et, en conséquence le courant, chutent rapidement. Là où une pile alcaline traditionnelle annonce qu'elle faiblit, une rechargeable s'éteint.
Au cours des années, de nombreux accus s'accumulent dans nos tiroirs. Dans mon cas, plus d'une quarantaine de piles rechargeables de marques et de capacités différentes retrouvées dans des jouets, manettes de consoles de jeu, postes de radio (trans)portables et autres appareils grands consommateurs d'énergie. Un tri s'impose afin de jeter, ou plus exactement d'envoyer en filière de recyclage, les éléments qui ne répondent plus à nos attentes, ou qui sont tout bonnement défectueux.
Si un premier tri nous permet d'isoler rapidement les batteries qui présentent des traces de fuites d'électrolytes ou autres détériorations apparentes, il sera plus complexe de vérifier si les éléments apparemment intacts sont réellement fonctionnels. En effet, le simple fait de mesurer la tension aux bornes d'une pile – qu'elle soit alcaline ou rechargeable – est tout à fait inutile sauf dans le cas d'une pile alcaline dont la tension serait si faible qu'il n'y aurait aucun doute sur son état de décharge.
Première règle importante : la tension aux bornes d'une pile doit toujours être mesurée avec une charge appliquée à ses bornes.
2. Générateur de tension ou de courant
Au quotidien, nous utilisons des alimentations ou des chargeurs pour faire fonctionner nos équipements électroniques. Les alimentations de laboratoire peuvent fournir des tensions continues pour alimenter nos montages. Ces tensions sont réglables sur une plage de 0 à 12V voire même de 0 à 30V, tensions indispensables pour certains projets. Pour nos projets d'électronique purement numérique, nous utiliserons une alimentation stabilisée de 5V ou de 3,3V selon les cas.
En électricité, nous pouvons définir ces générateurs :
Générateur idéal de tension
Par définition, un générateur de tension idéal est un élément – ou dipôle – qui maintient sa tension constante, quel que soit le courant qu'il débite. La résistance interne d'un tel générateur est nulle et l'intensité de son courant de court-circuit est théoriquement infinie.
Générateur idéal de courant
Ce générateur fournit un courant constant, quelle que soit la tension à ses bornes. En cas de court circuit, son courant est égal au courant qu'il fournit, quelle que soit sa charge.
Une pile – ou une batterie – devrait se rapprocher d'un générateur idéal de tension. Quelques mesures avec un multimètre mettront en évidence que nous sommes loin d'un tel générateur. En effet, lorsque nous faisons varier la charge aux bornes d'une pile ou d'un accu, nous constatons immanquablement que la tension chute quand la résistance de la charge diminue – c'est-à-dire que le courant demandé augmente. Cela met en évidence l'existence d'une résistance interne (« Ri ») au sein même de la batterie ou de la pile alcaline.
Schéma de test et mise en charge d'une batterie avec la RI en série de la pile.
La valeur de cette résistance interne se situe aux alentours de quelques dizaines de milliohms pour un accu et de quelques centaines de milliohms pour une pile alcaline.
Concrètement, la résistance interne d'un accu est de l'ordre de 10 à 20 fois inférieure à celle d'une pile alcaline. Ce qui explique pourquoi la tension aux bornes d'un accu est beaucoup plus stable au cours du temps, mais aussi pourquoi son courant de court-circuit est beaucoup plus élevé ! Intensité de courant de court-circuit très élevée qui peut l'endommager ou le détruire. Un risque de surchauffe, d'incendie ou d'explosion existe. Dans les montages qui suivent, nous vous invitons à la prudence et au soin dans la réalisation des schémas.
Pour plus d'informations sur les valeurs réelles des résistances internes, vous trouverez les spécifications techniques des accus sur les sites web des fabricants.
Tableau de comparaison pile / accu :
Pile Alcaline | Pile rechargeable | |
---|---|---|
Tension nominale | 1,5V | 1,2V |
Résistance interne | 0,2 Ohms | 0,02 Ohms |
Cycles recharges | 0 | 500 à 1000 fois |
Capacité des batteries
La capacité nominale des batteries, représentée par la lettre C, s'exprime en milliampères heure. Par exemple, une batterie de 2000 mAh pourrait théoriquement alimenter un appareil qui consomme 100 mA pendant 20h, ou 200 mA pendant 10h et ainsi de suite.
Il ne faut pas confondre les notions de capacité d'un accumulateur, de puissance électrique, ou d'énergie consommée.
La capacité d'un accumulateur « C » est exprimée en Ah (ampères heure). Elle représente la quantité de courant qu'une batterie complètement chargée peut restituer au cours de sa décharge complète.
La puissance électrique « P » est exprimée en Watts. La puissance représente la quantité d'énergie échangée par unité de temps (pour 1 seconde).
L'énergieconsommée est exprimée en Watts heures, ou en kilowatts heures. Par exemple, un appareil électrique d'une puissance de 1 kW qui fonctionne trois heures aura consommé en tout 3 kW-h.
3. Charge…
Avant toute utilisation, il faut charger les batteries. La charge consiste à faire circuler un courant continu en sens inverse dans l'accumulateur. Pour un cycle de charge normal, le courant de charge doit être limité à environ 10% de la capacité de l'accumulateur pour une durée de 16 heures. Concrètement, pour une batterie de 2500 mAh, le courant de charge sera de 250 mA et la durée de 16h. Des cycles de charges plus courts, avec des courants plus forts, sont possibles, mais ils peuvent dégrader les performances et réduire la durée de vie des accus.
Différentes technologies plus ou moins complexes existent pour les chargeurs : régulation en tension, en courant, découpage, impulsions … Les chargeurs les plus évolués sont dotés de microcontrôleurs, de sondes de température. Il est important d'arrêter le courant en fin de charge pour éviter d'endommager les accumulateurs. La fin de charge peut être déterminée par une minuterie, par la température des accus, ou encore les variations de la tension aux bornes des accus en fin de charge.
La plupart des chargeurs ou testeurs d'accus du commerce imposent de placer les batteries par paire(s). C'est une généralité pour les chargeurs d'entrée et de milieu de gamme. Les rares modèles qui permettent de tester ou de charger individuellement une batterie sont vendus à des prix prohibitifs. Si l'avantage de charger les accus par paire est avant tout économique – en effet, la fabrication d'un chargeur pour quatre batteries en série « deux par deux » est moins coûteuse que la fabrication d'un chargeur de quatre circuits d'une seule batterie. Il faut deux fois moins de composants électroniques pour un tel appareil et le fait de brancher deux accus en série permet de « charger » les deux en série sur 2.4 V au lieu de 1.2 V, ce qui est un peu moins complexe pour la gestion de l'alimentation.
Les inconvénients de ces chargeurs ou testeurs sont nombreux. Il faut brancher deux piles strictement identiques – en capacité et marque – par circuit. Il faut aussi que ces batteries soient dans un niveau de décharge similaire.
En effet, si le niveau de (dé)charge des deux batteries est très différent, par exemple si nous mettons en série deux accus identiques, l'un complètement déchargé et l'autre au contraire presque complètement chargé, le chargeur va fournir un courant qui va traverser les deux accus. Comme ils sont en série, c'est la même intensité de courant qui traverse les deux éléments. Et quel sera le résultat de ce cycle de charge ? Il sera mauvais ! L'accu complètement à plat sera à peine chargé et celui qui était déjà chargé risque d'être détérioré par ce courant de charge important et inutile. Ce type d'opération risque à terme de réduire la durée de vie des accus.
Autre inconvénient : certains appareils utilisent un nombre impair de piles. C'est le cas de la lampe frontale donnée en exemple au début de cet article qui accepte 3 piles micro LR03 AAA. Pour de tels appareils, nous achetons les accus par 4, 6 ou 8 pièces et les utilisons en alternance. Cela pose un problème parce qu'au final on se retrouve avec 3 accus presque complètement déchargés qui traînent quelques semaines dans un tiroir et 3 ou 5 autres accus dont nous sommes en fin de compte incertains de l'état de charge et en conséquence de la fiabilité que nous pouvons leur accorder.
Avec de tels chargeurs, si l'un des deux accus est défectueux, il sera plus difficile de l'isoler rapidement.
Nous avons suffisamment de bonnes raisons pour nous pencher sur le fonctionnement des accus en général et sur leur décharge en particulier.
Attention : la charge ne s'applique qu'aux accumulateurs. Il ne faut en aucun cas essayer de recharger une pile alcaline !
4. … et Décharge
Lorsqu'elle est utilisée dans un appareil, la batterie restitue l'énergie qu'elle a emmagasinée et se décharge plus ou moins rapidement en fonction de l'intensité du courant qui lui est demandé. Un phénomène d'auto-décharge se produit lorsque les batteries ne sont pas utilisées durant une longue période. Les batteries stockées et inutilisées doivent être rechargées régulièrement.
Les anciens accumulateurs NiCd - « Nickel - Cadmium » - souffraient d'un effet mémoire. La capacité de ce type de batterie diminuait significativement si on rechargeait la batterie alors qu'elle n'était pas complètement déchargée. Les accumulateurs récents – par exemple NiMH – peuvent toujours souffrir de ce problème, mais dans des proportions bien moindres.
La plupart des fabricants qui publient les spécifications techniques de leurs produits donnent les courbes de décharge à une température donnée pour des courants 10 % ou de 20 % de la capacité de l'accumulateur. Ces courants correspondent à une utilisation relativement intensive des batteries.
Exemples pour une batterie de 2500 mAh :
Courant de 0,1 C = 250 mA et temps de décharge environ 10 heures.
Courant de 0,2 C = 500 mA et temps de décharge environ 5 heures.
Pour nos tests, nous travaillerons dans cette fourchette de valeurs. Tester avec des courants plus faibles prendrait trop de temps, et tester avec des courants plus forts nous éloignerait de la réalité d'utilisation.
La température (°C) est un facteur qui influence considérablement le fonctionnement d'une batterie. Quand la température diminue, la résistance interne de la batterie augmente et les performances se dégradent. Ce paramètre température prend toute son importance pour les projets qui fonctionnent à l'extérieur. Pour mettre en évidence cette dépendance à la température, il suffit de stocker un accu quelques heures dans un endroit frais, puis de le brancher sur un des montages décrits ci-après dans une pièce plus chaude. Pour plus de précision, on peut définir un intervalle de mesure à 10 ou 30 secondes.
Attention, bien évidemment, à rester dans les normes de températures de stockage définies par les fabricants. Mettre une batterie au surgélateur n'est définitivement pas une bonne idée.
La température d'une batterie qui fournit un courant augmente. Plus le courant demandé est important et plus cette augmentation de température est perceptible.
5. Monitoring de décharge
Après ces quelques notions théoriques, nous pouvons passer aux tests de fonctionnement dans le monde réel.
Avec un Arduino, une platine de montage « breadboard », quelques composants bien choisis et une bonne calculatrice, nous pouvons étudier et réaliser différents montages de complexité variée qui pourront répondre aux questions que nous nous posons sur l'état et le fonctionnement de nos batteries.
Tous ces montages pourront par la suite s'adapter à nos besoins ou à nos envies de satisfaire notre curiosité. En changeant les valeurs de quelques résistances – composants bon marché par excellence –, nous pourrons adapter ces schémas à d'autres contraintes.
6. Procédure de test
Nous devrons définir une procédure bien précise pour tester objectivement l'état des accus.
- Classer les batteries rechargeables par marque, modèle et capacités. Quelques étiquettes autocollantes pour les numéroter peuvent se montrer utiles pour assurer le suivi.
- Décharger toutes les batteries individuellement à l'aide de l'un des schémas expliqués plus loin.
- Recharger complètement les batteries. En suivant bien entendu les instructions du manuel utilisateur de votre chargeur.
La décharge préliminaire est importante pour s'assurer d'un niveau de décharge suffisant avant de placer les piles dans un chargeur.
Plusieurs approches sont envisageables pour la surveillance de la décharge et l'évaluation de la capacité d'un accu avec Arduino.
- L'Arduino effectue tous les traitements de données : la mesure des tensions, le calcul des courants et l'évaluation de la capacité des batteries. Le résultat de ces mesures est transmis en fin de test sur le port moniteur série, ou sur un afficheur LCD.
- L'Arduino prend en charge uniquement la mesure des tensions sur ses entrées analogiques et transmet ces mesures à intervalles réguliers – par exemple toutes les minutes – sur le port moniteur série.
La première solution présente l'avantage d'un montage totalement indépendant et autonome. Le prix à payer sera un croquis Arduino plus complexe qui nécessitera plus de temps de développement et de maintenance en cas de modification ou de correction.
La seconde solution nous fournira un journal/historique de mesures simple que nous pourrons traiter par la suite dans d'autres logiciels. Sur base des données reçues, nous pourrons générer des courbes et calculer la capacité de l'accu dans LibreOffice. Un programme écrit en Python, en PHP ou tout autre langage pourrait tout aussi bien reprendre ces données pour des traitements plus ciblés.
Ce principe de collecte d'information pure, sans calculs à la source, pourra s'adapter facilement à d'autres projets. Par exemple, nous pourrions utiliser un capteur de température pour mesurer la température d'une pièce en fonction de l'heure et adapter les plages de fonctionnement d'un thermostat d'ambiance sur la base de ces courbes.
En raison de sa souplesse, cette seconde approche sera favorisée pour la suite. L'Arduino transmettra la valeur des tensions en entrée sur le port moniteur série à intervalles réguliers et nous utiliserons la fonction de trace de l'émulateur de terminal PuTTY pour sauver dans un fichier les données reçues du port série de l'Arduino.
Nous allons commencer par installer les outils nécessaires. Pour une distribution Linux basée sur Debian, nous pouvons très facilement installer les paquets nécessaires (NDLR : PuTTY est également disponible gratuitement pour Windows, les mêmes explications peuvent donc s'appliquer avec ce système. Pour Mac OS, vous pouvez utiliser CoolTerm, par exemple).
$ sudo apt-get install arduino putty
Une fois les paquets et leurs dépendances installés, nous pouvons brancher l'Arduino, lancer l'environnement de développement - ou « IDE » - et vérifier si tout fonctionne bien. Au passage, notez le device du port série/USB sur lequel l'Arduino est branché, nous aurons besoin de cette information pour créer un profil dans PuTTY. Sous Linux, ce port série pour les Arduino récents sera habituellement /dev/ttyACM0.
PuTTY supporte différents protocoles – ssh, telnet, rlogin, … – et permet aussi d'établir des connexions séries. C'est cette dernière fonctionnalité que nous allons utiliser pour recevoir les données de l'Arduino.
Voici la procédure de configuration de PuTTY :
- Sélectionner le type de connexion « série ».
- Encoder le nom du port série auquel l'Arduino est connecté.
- Vitesse de transfert des données 9600 bauds.
- Dans accu-&Y-&M-&D_&T.log. Un nouveau fichier avec date et heure sera créé à chaque ouverture de ce profil.
: Sélectionner et spécifier un répertoire et un nom pour le fichier de traces. Par exemple :- Cocher la case
dans terminal.- Revenir au premier onglet
, donner un nom au profil et le sauvegarder.Configuration de PuTTY.
Important : La connexion série doit être maintenue tout au long du cycle de monitoring. Si on interrompt la connexion série et qu'on la rétablit ensuite, la conséquence en sera un redémarrage complet de l'Arduino.
7. Principe général
Pour évaluer la capacité d'une batterie rechargeable, une charge résistive sera branchée à ses bornes. L'évolution de la tension de la batterie sera mesurée à intervalles réguliers tout au long de la décharge. Pour cette mesure, une entrée analogique de la platine Arduino sera utilisée. Le croquis écrira le résultat de ces mesures de tensions sur la console série. Ces données seront « capturées » vers un fichier texte au format CSV. Pour le traitement et l'analyse des mesures, le CSV nous ouvre la possibilité de charger les données dans LibreOffice Calc pour, par exemple, calculer la capacité ou afficher une courbe de la tension en fonction du temps de décharge.
L'Arduino UNO dispose de 6 entrées analogiques. Nous pouvons donc, en reproduisant à l'identique les schémas, tester simultanément jusqu'à 6 batteries.
8. Charge résistive
Quelques calculs préalables seront nécessaires pour déterminer la valeur et la puissance de la résistance de décharge. La batterie doit fournir un courant entre 0,1 C et 0,2 C. La loi d'Ohm établit la relation entre le courant « I » la tension « U » et la résistance « R » (cf. article sur la loi d'Ohm dans le n°1 de Hackable).
I = U / R qu'on peut mettre sous la forme R = U / I pour calculer la résistance.
Pour une batterie 2500 mAh :
Courant de décharge à 0,2C = 2500 * 0.2 = 500 mA.
Pour obtenir une valeur de résistance en Ohms, il faut obligatoirement exprimer la tension en Volts et le courant en Ampères.
R = 1.2 V / 0.5 A
R = 2,4 Ohms
En électronique grand public, on trouve deux normes principales qui définissent les valeurs des résistances. Les normes E12 et E24 (cf. liens). Les résistances de la série E12 ont habituellement une précision de +/- 10% et celles de la série E24 de +/- 5%. La série E12 est un sous-ensemble de la série E24.
Si nous trouvons bien une résistance de 2.4 ohms dans la série E24, par contre cette valeur n'existe pas dans la gamme E12. Les valeurs E12 les plus proches sont 2.2 ohms ou 2.7 ohms.
N'oublions pas dans le cas d'une résistance plus faible, le courant sera plus important et la décharge de la batterie prendra moins de temps.
Nous avons donc plusieurs valeurs de résistances pour notre montage. Au choix 2.2, 2.4 ou 2.7 ohms.
La résistance branchée sur la batterie va donc « consommer » de l'énergie. Cette consommation d'énergie va se dissiper sous forme de chaleur dans la résistance, mais aussi dans une moindre mesure dans la résistance interne de la batterie. Une batterie qui donne un courant important chauffe. La puissance dissipée est proportionnelle au carré du courant qui traverse la résistance.
P = U.I
P = R.I²
Nous devons calculer la puissance qui sera dissipée dans la résistance. Par sécurité, nous prenons une tension de 1.5V pour les calculs. Cette valeur tient compte du fait qu'un accu bien chargé peut fournir une tension supérieure à 1.2V pendant quelques minutes. Sans oublier que nous pourrions aussi tester des piles alcalines.
1) Pour 2,2 ohms
I = 1,5 / 2,2 = 0,682 A
P = RI² = 1,02 W
2) Pour 2,7 ohms
I = 1,5 / 2,7 = 0,556 A
P = RI² = 0,85 W
L'utilisation d'une résistance usuelle, très largement sous-dimensionnée, de 1/4 de Watt risque donc de transformer le montage en un joli feu d'artifice. Si nous souhaitons tester avec de telles intensités de courant, il faudra utiliser une résistance qui peut au minimum dissiper 2 Watts. En augmentant légèrement la valeur de la résistance et donc en diminuant le courant de décharge, nous pourrons nous contenter de résistances de 1W, qui sont un peu moins volumineuses.
Exemple pour 0,15C :
I = 2500 * 0,15 = 375mA
R = U / I = 1,2 / 0,375 = 3.2 ohms
Valeur de résistance la plus proche = 3,3 ohms !
P = UI = U²/R
P = 1,5² / 3,3 = 0,680 W
Dans ce cas, une résistance de 1 W est largement suffisante.
9. Premier schéma
Ces quelques calculs terminés, nous pouvons commencer un premier câblage très simple qui pourra être mis en œuvre rapidement. Ce schéma couvre un canal individuel de décharge.
Les entrées analogiques non utilisées, mais lues par le croquis doivent toujours être câblées à la masse, soit directement, soit par l'intermédiaire d'une résistance de « pulldown ». Cette résistance de pulldown, généralement d'une valeur élevée de l'ordre de quelques centaines de kilo-ohms, a pour but de ramener la tension d'entrée au niveau de la masse, soit 0V. En effet, la valeur d'une tension lue sur une entrée analogique « volante » – c'est-à-dire non connectée – sera totalement aléatoire !
Un croquis de quelques lignes transmet la valeur des tensions mesurées au format csv. L'Arduino UNO possède six entrées analogiques, et nous pourrions donc décharger simultanément jusqu'à six batteries. Le croquis ci-dessous est prévu pour suivre la décharge sur quatre canaux maximum. Ce nombre de canaux peut être très facilement augmenté ou diminué en modifiant les premières lignes du programme.
/* --------------------------------
* Analyseur de piles rechargeables
* Croquis "schéma simple"
* -------------------------------- */
// 4 canaux de test, possibilité d'étendre à N canaux
const int NBCHANNELS = 4;
const char strCsvHeader[] = "Millis;Num;Analog0;Volt0;Analog1;Volt1;Analog2;Volt2;Analog3;Volt3;";
int analogInputs[NBCHANNELS] = {0, 1, 2, 3}; // Entrées analogiques des 4 canaux
int digitalOutputs[NBCHANNELS] = {10, 11, 12, 13}; // Sorties numériques (LED d'avertissement)
long meteringDelay = 60000L; // 60000 ms = 1 minute entre deux mesures (réduire cette valeur pour les tests)
int loopCounter; // Compteur de boucles
int cutOffVoltage = 163; // Tension de seuil pour allumer la LED = 0.8V ( 1023 / 5 * 0.8 = 163 )
// --------------------------
// Procédure d'initialisation
// --------------------------
void setup() {
loopCounter = 0;
// Sorties numériques, LED éteintes
for(int i=0; i<NBCHANNELS; i++) {
pinMode(digitalOutputs[i], OUTPUT);
digitalWrite(digitalOutputs[i], LOW);
}
// Ouverture COM console ("moniteur série")
// et envoi entête CSV
Serial.begin(9600);
Serial.println(strCsvHeader);
}
// Lecture des infos sur le canal "channelNum"
void processChannel(int channelNum) {
int iAnalogValue;
float fVoltage;
if (channelNum >=0 && channelNum < NBCHANNELS) {
iAnalogValue = analogRead(analogInputs[channelNum]); // Valeur sur 10 bits
fVoltage = 5.0 * iAnalogValue / 1024; // Tension en Volts (0..1023 <=> 0..5 V)
if (iAnalogValue < cutOffVoltage) {
// Tension lue sous le seuil défini. On allume la LED.
digitalWrite(digitalOutputs[channelNum], HIGH);
} else {
digitalWrite(digitalOutputs[channelNum], LOW);
}
}
// Envoi des données sur la console
Serial.print(iAnalogValue);
Serial.print(";");
Serial.print(fVoltage);
Serial.print(";");
}
/* -----------------
Boucle principale
----------------- */
void loop() {
int i;
loopCounter++;
Serial.print(millis()); // Référence temps en millisecondes.
Serial.print(";"); // Séparateur CSV
Serial.print(loopCounter); // Compteur de boucle
Serial.print(";");
// Traitement des NBCHANNELS canaux analogiques
for(i=0; i < NBCHANNELS; i++) {
processChannel(i);
}
Serial.print("\n"); // Saut à la ligne après traitement de tous les canaux
delay(meteringDelay); // Attente entre deux mesures
}
L'inconvénient majeur de ce premier schéma est qu'il n'y a aucun contrôle de la fin de la décharge. La résistance reste en permanence branchée sur la batterie et consomme tout le courant qu'elle lui fournira jusqu'à son épuisement total si nous n'interrompons pas le processus. La tension de la batterie va donc descendre à 0 V.
Ce n'est certainement pas une bonne idée de vider à ce point une batterie. Cela présente même le risque de l'endommager ou de réduire ses performances. Aucun intérêt non plus d'un point de vue pratique : la majorité des appareils alimentés par des accus ne fonctionneront plus si la tension – par accu – descend sous les 0.8V.
D'un point de vue « expérimental », la décharge maximale d'un accu nous intéresse. Cf. la courbe de décharge obtenue qui est très intéressante (fig x.). À mettre en relation avec la même courbe d'une pile alcaline classique sacrifiée sur l'autel de la science. Pour une pile alcaline, la mesure de la capacité est une expérience sans retour !
Comme l'arrêt de la décharge n'est pas possible dans ce schéma, nous avons ajouté une résistance R2 et diode électroluminescente rouge LED1 pour avertir de la fin de la décharge. Nous utiliserons une sortie numérique de l'Arduino pour allumer cette LED lorsque la tension aux bornes de la batterie descend sous un certain seuil. Quelques composants supplémentaires – transistor, résistance et buzzer piézoélectrique – permettraient tout aussi bien l'ajout d'une alarme sonore.
Ci-dessous, le résultat sous forme de graphique d'un test de décharge d'une pile rechargeable et d'une pile alcaline.
Courbes d'exemples de charges et décharges piles accus.
10. Deuxième schéma
Nous allons ajouter quelques composants pour « prendre soin » de nos accus en leur évitant une décharge excessive.
Quelles sont les options pour arrêter une décharge ? Un petit inventaire rapide des composants dont nous disposons ... Diodes, transistors à jonction et à effet de champ, relais (reed ou classiques)... Dans le choix des composants, nous devrons obligatoirement tenir compte de leurs spécifications techniques. Hors de question de demander à un transistor de véhiculer un courant de 1 A si ses spécifications précisent un courant collecteur/émetteur maximum de 500 mA.
10.1 Première option
La plus simple : ajouter une diode en série avec la résistance. La diode est composée d'une anode A et d'une cathode K. Ce semi-conducteur devient conducteur quand la tension AK est positive et suffisante – en pratique supérieure à +0.6 Volt. La tension d'un accu est suffisante pour que la diode devienne conductrice.
Schéma avec diode.
En fin de décharge, dès que la tension sera sous les 0.6V, la diode ne sera plus conductrice et se comportera comme un circuit ouvert.
Nous devrions aussi dans ce cas calculer une nouvelle valeur pour la résistance de charge afin de maintenir en courant d'environ 350 mA.
R = (1.2V – 0.6V) / 0.350 A
R = +- 1,8 Ohms
Malheureusement, la chute de tension aux bornes de la diode est loin d'être stable et varie de quelques dizaines de millivolts en fonction de facteurs physiques ou électriques. Par exemple : l’intensité du courant qui la traverse, la température… Nous sommes donc dans une situation où nous mesurons une tension de l'ordre de 1.2 V à laquelle nous devons retrancher environ 0.6 V pour calculer l'intensité du courant qui traverse la résistance. La chute de tension aux bornes de la résistance sera d'environ 0,7 V.
D'un point de vue de la précision des mesures, c'est catastrophique ! Nous pourrions imaginer mesurer la tension aux bornes de la résistance. Cela nous obligera à utiliser deux entrées analogiques pour déterminer cette tension Vres qui sera de l'ordre de :
Vres = Vaccu – Vdiode
Vres = ~ 1.2V - ~ 0.6V
Si nous tenons compte de l'incertitude de la mesure de tension sur l'entrée Arduino ( 5V / 1024 = 4 mV ) et de la contrainte d'utiliser deux entrées analogiques par canal – donc maximum 3 canaux pour un Arduino UNO cela représente un inconvénient majeur. Sans oublier que la valeur de notre résistance a elle-même aussi une tolérance de 5 % voire 10 %.
10.2 Seconde option
Un transistor, autre composant bon marché, pourrait-il venir à notre secours ? Il existe deux grandes familles de transistors. Les transistors à jonctions et les transistors à effet de champ.
Schémas avec transistor FET.
Avec ces composants, nous rencontrerons des problèmes similaires à ceux que nous avons rencontrés avec la diode. La chute de tension aux bornes collecteur/émetteur (ou drain/source) est trop variable, mais avant tout trop significative par rapport aux 1.2 volts que nous souhaitons mesurer. Suivant les modèles de transistors, la chute de tension entre CE - ou DS pour les FET - varie de 0.2V à 0.4V. Ce schéma fonctionnera très mal de toute façon : la tension appliquée de 1.2V est trop faible pour assurer un bon fonctionnement des transistors classiques.
10.3 Troisième option
Les deux schémas précédents ont mis en évidence les problèmes que nous rencontrons en pratique avec les semi-conducteurs. Ce fut aussi l'occasion d'introduire quelques notions de base en électronique.
Que nous reste-t-il comme solution ? Une dernière idée serait d'utiliser un relais pour « fermer » le circuit de décharge. Le contact d'un bon relais a une résistance très faible. La mesure de tension aux bornes de la résistance sera donc plus précise que dans les cas précédents. Nous pouvons utiliser une sortie numérique de l'Arduino pour fermer le relais au début du test. Une fois la tension sous une valeur que nous fixons – par exemple 0.8V, il suffit de couper le relais (ouvrir le circuit de décharge) pour arrêter le processus de décharge et préserver notre batterie. Le relais sera plus coûteux que les composants envisagés précédemment. Il faut compter +- 2.5 euros pièce. Ce qui reste au final raisonnable.
Schéma à relais.
Dans ce schéma, nous avons ajouté un bouton poussoir qui permettra de lancer, ou de relancer, la procédure de test de décharge. Le transistor à effet de champ Q1 fonctionne en commutation pour commander la fermeture du relais. La valeur de la tension sur la sortie numérique D10 commande l'ouverture ou la fermeture du relais. Si D10 passe à 5V – ou « HIGH » – le transistor devient conducteur et le relais se ferme. Si D10 est à 0V – ou « LOW » – le transistor n'est plus conducteur et la bobine du relais qui n'est plus alimentée ouvre le circuit. La diode électroluminescente LED1 et sa résistance R2 sont en parallèle sur la bobine du relais. Cette LED est allumée quand le relais est fermé.
La résistance de « pulldown » R4 qui relie l'entrée analogique à la masse joue à nouveau un rôle important. Sans cette résistance, dans le cas où aucune pile ne serait branchée, l'entrée analogique serait volante et la valeur de la tension lue sur cette entrée aléatoire. Pour se convaincre de l'utilité de cette résistance, il suffit de la retirer et d'exécuter le croquis sans accu inséré dans le support de batterie.
La bobine d'un relais est une charge inductive. Il faut obligatoirement placer une diode de roue libre aux bornes de cette bobine (entre les bornes 1 et 6 du relais sur le schéma) pour éviter toute surtension inverse lorsqu'on coupe le courant qui la traverse. Cette surtension peut très rapidement détruire le transistor qui commande le relais ! Cette diode est parfois intégrée directement dans le relais en lui même (cf. spécifications techniques du fabricant). Si ce n'est pas le cas, elle doit être ajoutée directement au montage.
11. Le croquis Arduino
Ce croquis est un peu plus complexe que le précédent. Un tableau de booléens mémorise l'état des canaux et des relais qui leur sont associés. Dès que la tension sur un canal est inférieure au seuil défini en constante (0.8V), le relais coupe le circuit de décharge pour préserver la batterie. Quand tous les canaux sont désactivés, le croquis envoie une chaîne de fin de traitement qui pourrait, par exemple, être interprétée par un programme que nous pourrions écrire en alternative à PuTTY.
/* --------------------------------
* Analyseur de piles rechargeables
* Croquis "schéma relais"
* -------------------------------- */
// 4 canaux de test, possibilité d'étendre à N canaux
const int NBCHANNELS = 4;
const char strCsvHeader[] = "Millis;Num;Analog0;Volt0;Analog1;Volt1;Analog2;Volt2;Analog3;Volt3;";
const char strEndOfFile[] = "===EOF===";
boolean channelState[NBCHANNELS]; // Canal ON ou OFF
long millisOffset;
int analogInputs[NBCHANNELS] = {0, 1, 2, 3};
int digitalOutputs[NBCHANNELS] = {10, 11, 12, 13}; // Sorties numériques de commande des relais
int pushButtonIn = 8; // Entrée numérique du bouton poussoir pour démarrer le test
float resistors[NBCHANNELS] = {3.3, 3.3, 3.3, 3.3}; // Résistances de (dé)charge
long meteringDelay = 60000L; // 60000 ms = 1 minute entre deux mesures (réduire cette valeur pour les tests)
int loopCounter; // Compteur de boucles
boolean testRunning = false; // Procédure de test en cours d'exécution ?
int cutOffVoltage = 163; // Tension d'arrêt du test 0.8V ( 1023 / 5 * 0.8 = 163 )
// ---
// Initialisation
void setup() {
int i;
// Communication sur la console / "moniteur série"
loopCounter = 0;
Serial.begin(9600); // Ouverture COM console ("moniteur série")
// Entrée du bouton poussoir
pinMode(pushButtonIn, INPUT);
// Sorties relais et états des canaux de test
for(i=0; i<NBCHANNELS; i++) {
pinMode(digitalOutputs[i], OUTPUT);
digitalWrite(digitalOutputs[i], LOW);
channelState[i] = false;
}
}
// ---
// Lecture des infos sur le canal "numChannel"
void processChannel(int numChannel) {
int iAnalogValue;
float fVoltage;
if (numChannel < NBCHANNELS) {
if(channelState[numChannel]) {
// Canal ouvert
iAnalogValue = analogRead(analogInputs[numChannel]); // Valeur sur 10 bits
fVoltage = 5.0 * iAnalogValue / 1024; // Tension en Volts (0..1023 <=> 0..5 V)
// Faut-il arrêter le test pour ce canal ?
if (iAnalogValue < cutOffVoltage) {
// On ouvre le relais et arrêt de la procédure
digitalWrite(digitalOutputs[numChannel], LOW);
channelState[numChannel] = false;
}
} else {
// Canal fermé.
iAnalogValue = 0;
fVoltage = 0.0;
}
// Que le canal soit ouvert ou non, on imprime la valeur lue (0 si fermé).
Serial.print(iAnalogValue);
Serial.print(";");
Serial.print(fVoltage);
Serial.print(";");
}
}
// ---
// Attente appui du bouton poussoir pour démarrer le test
void waitPushButton() {
int inValue;
do {
inValue = digitalRead(pushButtonIn);
} while(inValue == HIGH);
testRunning = true;
millisOffset = millis();
loopCounter = 0;
}
boolean performMonitoring() {
boolean bChannelOpened = false;
if (! testRunning) {
// Attente du signal pour commencer
waitPushButton();
// Début d'un nouveau test !
// On ferme tous les relais
for(int i=0; i<NBCHANNELS; i++) {
digitalWrite(digitalOutputs[i], HIGH);
channelState[i] = true;
}
Serial.println(strCsvHeader);
}
// Test commencé ou en cours
// Si tous les canaux sont fermés, on arrête le test !
for(int i=0; i<NBCHANNELS; i++) {
bChannelOpened = bChannelOpened || channelState[i];
}
testRunning = bChannelOpened;
return testRunning;
}
/* -----------------
Boucle principale
----------------- */
void loop() {
int i;
// Conditions remplies pour commencer ou poursuivre le monitoring ?
if( performMonitoring() ) {
loopCounter++;
Serial.print(millis() - millisOffset); // Référence temps en millisecondes
Serial.print(";"); // CSV pour inport dans LibreOffice
Serial.print(loopCounter); // Compteur de boucle
Serial.print(";");
for(i=0; i < NBCHANNELS; i++) {
processChannel(i);
}
Serial.print("\n"); // Saut à la ligne après traitement de tous les canaux
}
if (testRunning) {
delay(meteringDelay);
} else {
Serial.println(strEndOfFile);
}
}
12. Interprétation des données
Les données des fichiers de traces sont au format CSV. Calc, Le programme tableur de LibreOffice, peut ouvrir ces fichiers CSV et présenter le résultat des relevés de tensions en colonnes. Les données une fois importées dans Calc pourront être analysées et interprétées soit sous forme de graphiques, soit quantitativement pour calculer la capacité des accus.
Pour calculer la capacité en mAh d'une batterie avec LibreOffice, nous pouvons nous baser sur le courant moyen que la batterie a fourni sur toute la durée du test.
Voici, en résumé, la procédure à suivre :
- Importer le fichier CSV dans LibreOffice Calc.
- Ajouter une cellule « R décharge » avec la valeur de la résistance de décharge utilisée (Ohms)
- Calculer « iMoyen » le courant moyen. Pour déterminer le courant moyen, faire la moyenne de la tension et diviser par la résistance. ( I = U / R )
- Prendre la valeur maximum de la colonne « Millis » et la convertir en heure. « temps » = Max(Colonne Millis) /1000 / 3600.
- Et finalement calculer la capacité en multipliant le courant moyen et le temps en heures. Multiplier par 1000 pour obtenir le résultat en mAh.
« capacité » = « iMoyen » * « temps » * 1000 mAh
Conclusion
Au fil de ces pages, nous avons abordé tout un ensemble de concepts en relation avec les batteries rechargeables. Batteries rechargeables qui n'ont finalement constitué qu'un prétexte pour élaborer quelques schémas électroniques basiques et aborder l'utilisation des entrées et sorties numériques ou des entrées analogiques de l'Arduino dans le but de satisfaire notre curiosité. L'approche souple des traces dans des fichiers CSV ouvre des perspectives pour des applications dans d'autres projets.
Lien
Séries de valeurs normales pour résistances et condensateurs sur Wikipédia : http://fr.wikipedia.org/wiki/CEI_60063