Utiliser votre Arduino comme voltmètre

Pour un projet utilisant des batteries lithium, j’ai besoin de savoir lorsque mes batteries sont chargées à moins de 4V.

Mon projet étant sous Arduino Uno je me suis demandé s’il était possible d’utiliser l’équation de diviseur de tension pour me servir de mon Arduino comme d’un voltmètre.

L’équation de diviseur de tension consiste en un circuit composé de deux résistances qui change une tension élevée (Vin) en une tension plus petite (Vout). La tension de sortie sera donc calculée en fonction des résistances et de la valeur d’entrée. Voici la formule mathématique utilisée:

diviseur tension equation

Voilà comment cela se traduit en schéma électronique:

schema diviseur de tension

 

Pour réaliser mon voltmètre avec mon Arduino Uno, j’ai réutilisé l’afficheur LCD branché sur 3 pins. Voici le schéma de connexion complet:

 

arduino voltmeter

 

Sur le schéma on voit que j’utilise:

  • 5 résistances de 10K ohms en série (R1)
  • 2 résistances de 2.2K ohms en série (R2)

R1 et R2 me permettent de tester des tensions pouvant atteindre 50Volts puisque si l’on applique la formule du diviseur de tension, une tension de 50V en entrée me donnera 4V en sortie.

Pour calculer vos résistances R1 et R2, je vous conseille d’utiliser ce calculateur.

Pour récupérer la valeur de sortie (Vout) j’utilise un pin analog.

Voici le code du sketche Arduino:

/*
 * Voltmètre Arduino
 */
 
#include <ShiftLCD.h>
ShiftLCD lcd(2, 4, 3);
 
// variables for input pin
int analogInput = 1;
int ledOutput = 7;
float vout = 0.0;
float vin = 0.0;
float R1 = 50000.0;    // !! resistance of R1 !!
float R2 = 4400.0;     // !! resistance of R2 !!
 
// variable to store the value 
int value = 0;
 
void setup() {
  // declaration of pin modes
  pinMode(analogInput, INPUT);
  pinMode(ledOutput, OUTPUT);
 
  lcd.begin(16, 2);
  lcd.print("Vin=");
}
 
void loop() {
  // read the value on analog input
  value = analogRead(analogInput);
 
  vout = (value * 5.0) / 1024.0;
  vin = vout / (R2/(R1+R2));  
  if (vin < 0.13) {
    vin=0.0;
  }
 
  // print result to lcd display
  lcd.setCursor(4, 0);
  lcd.print(vin);
  lcd.print("V");
 
  //highlight LED si inférieur a 4 volts
  if (vin < 4){
    digitalWrite(ledOutput, HIGH); 
  }
  else { digitalWrite(ledOutput, LOW); }
  // sleep...
  delay(500);
}

Plusieurs remarques:

  • une LED a été placé et s’allume lorsque la tension passe en dessous des 4V.
  • si la tension d’entrée est inférieure à 0.13V on considère qu’il s’agit de bruit et on affiche 0V.
  • si vous utilisez un voltmètre, vous pourrez avoir quelques différences qui sont dûes à la tolérance des résistances.

Quelques photos du montage:

arduino volmetre diviseur tension

arduino voltmeterUne petite vidéos du montage complet:

21 thoughts on “Utiliser votre Arduino comme voltmètre

  • February 6, 2015 at 10:26 am
    Permalink

    Bonjour,

    Excellent tutoriel, manquant juste la liste des matériel.
    J’ai un problème par rapport votre schéma de principe, pouvez-vous me renseigner pour le schéma électrique hors Fritzing mais sur Xrelais ?

    Reply
    • February 18, 2015 at 12:59 pm
      Permalink

      Désolé je n’utilise pas Xrelais

      Reply
      • March 5, 2015 at 10:03 pm
        Permalink

        D’accord ce n’est pas grave, je vous remercie tout de même pour ce tutoriel ça m’aide énormément pour mon mini projet.

        Reply
  • April 13, 2016 at 9:03 am
    Permalink

    avez vous ce schéma en schéma ISIS ?

    Reply
    • April 13, 2016 at 9:18 am
      Permalink

      Non désolé mais il n’est pas compliqué je pense qu’en quelques minutes vous pouvez le faire

      Reply
  • April 13, 2016 at 9:23 am
    Permalink

    je n’arrive pas a faire les schéma isis donc si vous avez un peu d’aide a m’apporter sa ne serait pas de refus…

    Reply
  • May 14, 2016 at 2:25 pm
    Permalink

    bonjour,
    je vous contact car je possède une ancienne voiture électrique(106 EDF)
    qui fonctionne mais les batteries qui sont en NICD (20 en séries 6 volts nominal)
    sont pas toutes jeunes!
    j’aurai aimer vérifier l’état des batteries (20) en temps réel sur une carte lcd
    je possède une carte arduino UNO. Pourriez vous me dire si il serait possible de faire ce genre d’instrument pour mon projet?
    merci
    laurent

    Reply
    • May 16, 2016 at 8:44 pm
      Permalink

      Il doit etre possible de realiser ce projet en alimentant le testeur sur la batterie de la voiture. Maintenant le top serait de pouvoir avoir une batterie a part pour realiser le montage et le tester afin de limiter les “risques éventuels”

      Reply
  • July 11, 2016 at 12:53 am
    Permalink

    Bonjour,

    Est-il possible de parler avec vous JHD, j’ai un projet d’une ampleur majeur a vous proposer

    Merci

    Reply
  • September 26, 2016 at 11:02 pm
    Permalink

    bonjour je ne comprend pas cette ligne du code

    vout = (value * 5.0) / 1024.0;

    pourquoi on multiplie value par 5 et que on le divise par 1024 ?

    et pourquoi par 5 et 1024 et pas un autre nombre ?

    merci par avance cordialement

    Reply
    • February 7, 2017 at 12:14 pm
      Permalink

      Sans trop me tromper, Vref=5V (tension de référence du convertisseur Analogique/Numérique)
      et le convertisseur doit renvoyer une valeur sur 10 bits donc 2^10=1024.
      Le convertisseur renvoie donc une valeur entre 0 et 1024 (via la fonction AnalogRead), correspondant à une tension de 0V à 5V.
      On traduit donc la valeur numérique lue en valeur Tension plus facilement interprétable.

      Reply
  • December 6, 2016 at 10:32 pm
    Permalink

    Vous pouvez me dire c est quoi l interet de ce projet stp???.

    Reply
    • December 8, 2016 at 12:14 pm
      Permalink

      Par exemple savoir la consommation de votre projet ou bien savoir l’état de charge de batteries

      Reply
  • January 27, 2017 at 3:23 pm
    Permalink

    Pourrais tu m’expliquer cette ligne stp ?
    vout = (value * 5.0) / 1024.0;

    Reply
  • May 18, 2017 at 1:20 pm
    Permalink

    bonjour
    est ce que je peux utiliser ce montage pour la mesure de tension produite par un panneau solaire ? et afficher à chaque instant la valeur sur l’afficheur
    merci

    Reply
    • May 30, 2017 at 12:45 pm
      Permalink

      oui il suffit juste d’adapter le code

      Reply
  • November 12, 2017 at 4:44 pm
    Permalink

    Bonjour j’ai du mal à inclure la bibliothèque ShiftLCD, quand je compile il me dit #include “WProgram.h” j’ai fait quelque recherche et je suis tomber sur la conclusion qu’il fallait créer cette bibliothèque mais comme je ne fais de l’arduino depuis pas très longtemps je ne sais pas comment la faire merci d’avance pour vos réponses.

    Reply

Leave a Reply to Finkun Cancel reply

Your email address will not be published. Required fields are marked *