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:

15 Responses to Utiliser votre Arduino comme voltmètre

  1. Finkun says:

    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 ?

  2. farid says:

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

  3. farid says:

    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…

  4. laurent says:

    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

    • jhd says:

      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”

  5. mouhoub says:

    Bonjour,

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

    Merci

  6. mecaman33000 says:

    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

  7. Lisa says:

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

Leave a Reply

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