Skyduino:~#
Articles
arduino, Corrigé, programmation

[Arduino] Mesurer la tension d’une batterie

Bonjour tout le monde !

Aujourd’hui je continue sur le même sujet que mon article d’hier.
Sauf que cette fois ci je ne vais pas mesurer la tension en +VCC mais la tension d’une batterie (qu’elle alimente le montage ou non).

Le principe :

Rien de bien révolutionnaire, mon montage repose sur un bête pont diviseur de tension.
Celui ci a été calculé pour permettre la mesure d’une plage de tension variant entre 0v et 20v.

La formule classique d’un pont diviseur de tension est la suivante (je passe la partie théorie, loi des mailles, etc) :
Vs = Vin * (R2 / (R1 + R2))

Ici R1 = 3300 ohms (3k3) et R2 = 1100 ohms (1k1), on obtient donc pour Vin = 20v (maximum admissible) :
Vs = 20 * (11000 / (3300 + 1100)) = 20 * (1100 / 4400) = 20 * 0.25 = 5

Vs = 5v pour Vin = 20v, soit le maximum que peut mesurer le convertisseur analogique -> numérique de l’arduino (alimenté en 5v bien sûr).

Remarque: pour ceux qui ne voudraient pas ce casser la tête à faire un calcul de pont diviseur (faut être une sacrément fainéant quand même ;)) :
http://www.electronique-radioamateur.fr/elec/schema/calcul-diviseur-tension.php

Et pour ceux qui voudraient en savoir plus sur la théorie et sur le calcul :
http://www.sonelec-musique.com/electronique_bases_diviseurs_res.html

Le montage :

Rien de bien compliqué donc, deux résistances, deux fils et … c’est tout !
Il suffit de suivre le schéma juste au dessus ;)

Le code couleur des résistances :
3k3 = Orange Orange Rouge
1k1 = Marron Marron Rouge

(Je le précise car je sait très bien que c’est la première chose que le me demanderais si je ne le précisais pas …)

Mesure de tension :

Comme vous pouvez le voir le petit fils jaune est relié à l’arduino.
En fait il est relié à la prise jack de l’arduino, juste avant la diode de protection (-> attention aux inversions de polarité si vous branchez mal votre alim !)

Cela permet de mesurer la tension d’alimentation de l’arduino et de détecter de manière relativement précise une baisse de tension.
Il est aussi tout à fait envisageable de mesurer une batterie externe au montage tant que les masses de la batterie et de l’arduino sont reliées ensemble (et que celle ci délivre moins de 20v).

Je vous ai fait un petit tableau des tensions d’alimentations mesurables avec ce montage et de l’état de batterie qui correspond :

Le code :

/* Coefficient diviseur du pont de résistance */
const float coeff_division = 4.0;

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

  /* Initialisation du port série */
  Serial.begin(9600); 
  Serial.println("Battery level tester v2");
}

/* loop() */
void loop() {

  /* Mesure de la tension brute */
  unsigned int raw_bat = analogRead(A0);
  
  /* Calcul de la tension réel */
  float real_bat = ((raw_bat * (5.0 / 1024)) * coeff_division);

  /* Affichage */
  Serial.println(real_bat);
  delay(1000);
}

Le résultat :

Voici une mesure de test prise avec une alimentation 9v (une bête batterie rechargeable) :
Battery level tester v2
7.46
7.48
7.48
7.48
7.48
7.46
7.46
7.48
7.46
7.48
7.48
7.48
7.48

Comme on peut le voir ma batterie est déjà bien fatiguée … mais la mesure reste fiable !
(Je reste dans le vert, mais je suis pas loin du gris …)

Bon bidouillage à tous :)

About these ads

Discussion

32 réflexions sur “[Arduino] Mesurer la tension d’une batterie

  1. Cool ! mais ça consomme combien de mesurer comme ca en continu la batterie? ça la viderait pas en quelques heures par hasard?

    Publié par mathieu | 21 août 2012, 21 h 37 min
  2. L’avantage du couple 3.3 / 1.1, c’est de s’affranchir de l’impédance d’entrée des pins analogiques. Avec 11K, je ne suis pas sûr qu’on puisse négliger une petite perte… Dommage, car ce mA continu peut jouer en notre défaveur. Un juste milieu à trouver?

    Publié par Cinci | 5 septembre 2012, 7 h 10 min
  3. Le code Arduino est manquant dans le Tuto ou je dois mettre des lunettes ? :)

    Publié par Djad | 20 octobre 2012, 21 h 33 min
  4. si jamais la pile n’alimente pas le montage, suffirait de brancher la masse sur le – et l’entrée du pont diviseur sur le + de la pile ?

    Publié par Zilators | 5 janvier 2013, 15 h 41 min
    • C’est ce que j’ai fait regarde bien le schéma ;)
      Dans tout les cas les masses DOIVENT être reliés sinon ça ne marche pas.

      Publié par skywodd | 5 janvier 2013, 15 h 51 min
      • ok ok donc j’ai plus qu’a trouver la valeur a la quelle une pile 9V serait en moitié de vie (8V en sortie selon moi) et donc je lirait 409 sur l’arduino si elle est a 8V ? ca m’a l’air d’etre sa je m’y met =D

        Publié par Zilators | 5 janvier 2013, 15 h 53 min
  5. Bonjour, à quoi sert la ligne:
    * (5.0 / 1024)) * coeff_division

    Car je ne comprend pas comment tu trouve le calcul pour passer de ce que tu appelles la tension brute à la tension reelle.

    Publié par aaron | 12 septembre 2013, 22 h 15 min
  6. Bonjour,

    La plage limite n’est pas plutôt entre 0 et 1023 de qui donne en codage sur 1024 ?
    Si je code sur 8 bits, j’ai le droit à 256 valeurs donc de 0 à 255 si je ne me trompe pas :)

    Cordialement,
    Le réparateur de PC

    Publié par lereparateurdepc | 17 novembre 2013, 11 h 11 min
  7. bonjour, est il possible d’afficher la tension sur un afficheur lcd relier sur l’arduino

    Publié par MarcAndCO | 25 janvier 2014, 0 h 25 min
    • Oui, il suffit de remplacer les Serial.println() par un lcd.println() et d’utiliser la librairie LiquidCrystal.

      Publié par skywodd | 1 février 2014, 15 h 22 min
      • je serais intéressé par l’affichage sur lcd.
        Pour cela outre le fait de changer le Serial print par lc print, il faut enlever l’initialisation du port série et la remplacé par quelque chose qui initialise l’ecran lcd? si oui quel est le code svp? :)

        Publié par Théo | 17 février 2014, 20 h 26 min
  8. Salut; je suis intéressée de même sujet mais pour mesurer la tension d’une machine asynchrone ç’est à dire en alternatif j veux savoir est ce qu’il y a une grande différence au niveau du code arduino et si oui lequel! merci

    Publié par Iman | 31 mars 2014, 15 h 56 min
    • Mesurer une tension continu et une tension alternative c’est le jour et la nuit.
      Je te laisse chercher « Root mean square » sur google tu comprendras ;)

      En plus au niveau matériel ce n’est pas du tout la même chose.
      Il faut mesurer une tension alternativement positive et négative, ça demande un circuit bien plus complexe que deux simples résistances.

      Publié par skywodd | 9 avril 2014, 11 h 23 min
  9. hugh,
    je voudrais faire exactement le même genre de mesures mais pour des mesures en alternatif (10Hz) ET pour des amplitudes en tension allant jusqu’à 1200V. A moins de prendre un pont diviseur de rapport 100 (ce qui n’est pas idéal…) je ne vois pas trop comment faire. Quelqu’un aurait-il une idée? Merci

    Publié par PetitSachem | 8 avril 2014, 10 h 53 min
    • re,

      1200V ehhh là ça fait un peut beaucoup ….. Si c’est de l’AC, il n’y a pas moyen de passer par un transfo ?
      1200/12V ou 1200/230V puis 230/12V ?

      Un pont diviseur oui mais faut dimensionner les résistance en conséquences (puissance/dissipation).

      Cordialement,
      Le réparateur de PC

      Publié par lereparateurdepc | 8 avril 2014, 19 h 28 min
  10. Slt peut tu m’expliquer le 1024 que tu as dans le programme? :) merci

    Publié par Xavier | 29 mai 2014, 13 h 53 min
  11. J’alimente un Arduino Nano avec un accu li-ion via un convertisseur DC-DC 5V.
    J’aimerai mesurer le « niveau » de charge de mon accu. Donc entre 3.7V et 3V (4.1V quand il est en charge).
    Je pensai relier directement le +accu (avant le convertisseur) à A0 par exemple.
    On est d’accord, j’ai pas besoin de pont diviseur, pour ça ?
    Doit-je mettre une résistance en série ? Si oui, pourquoi et de combien ?

    Publié par Xiboard | 27 août 2014, 14 h 03 min
    • Si tu as une carte arduino 5v pas besoin de pont diviseur.
      Quand la carte arduino est allumée, l’entrée analogique à une impédance élevée : pas besoin de faire quoique ce soit, tu peux brancher direct le + de l’accus sur une broche analogique.
      Par contre quand la carte n’est pas alimentée, il est déconseillée de mettre une tension sur la broche analogique. Donc si tu as un interrupteur dans ton montage, il faut qu’il soit placé juste après la batterie avant le convertisseur dc-dc et que tu mesure la tension après l’interrupteur mais avant le convertisseur. De cette manière la broche analogique ne sera jamais sous tension quand l’arduino n’est pas allumée.

      Publié par Meyer | 27 août 2014, 15 h 10 min
      • Ok, c’est bien ce que je pensai et oui, je place un inter au plus proche de la batterie de pas de soucis pour l’accu.

        Publié par Xiboard | 27 août 2014, 15 h 15 min
      • +1 pour l’interrupteur général. Quand l’Arduino n’est pas alimentée, aucune tension ne doit arriver sur les entrées (numérique ou analogique).

        Publié par Skywodd | 3 septembre 2014, 19 h 29 min
    • Pas besoin de pont diviseur ou de résistance en série si tu es alimenté en 5v.

      Par sécurité tu peux quand même mettre une zener 4.7v en parallèle de A0, voir une double diode anti-esd si le connecteur de batterie est accessible aux gros doigts plein d’électricité statique.

      Publié par Skywodd | 3 septembre 2014, 19 h 26 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

Archives

Wow. Dogecoin. Amaze.

Laissez un tip en Dogecoin

DMMNFk6WBVTpx2Wu1Z35GL61QXSd6r6WQx

Suivre

Recevez les nouvelles publications par mail.

Rejoignez 795 autres abonnés