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:
Voilà comment cela se traduit en schéma électronique:
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:
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:
Une petite vidéos du montage complet:
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 ?
Désolé je n’utilise pas Xrelais
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.
avez vous ce schéma en schéma ISIS ?
Non désolé mais il n’est pas compliqué je pense qu’en quelques minutes vous pouvez le faire
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…
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
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”
Bonjour,
Est-il possible de parler avec vous JHD, j’ai un projet d’une ampleur majeur a vous proposer
Merci
email envoyé
réponse envoyé 😉
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
5 Volts ?
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.
Vous pouvez me dire c est quoi l interet de ce projet stp???.
Par exemple savoir la consommation de votre projet ou bien savoir l’état de charge de batteries
Pourrais tu m’expliquer cette ligne stp ?
vout = (value * 5.0) / 1024.0;
C’est effectivement (comme le disait “umfred” le “February 7, 2017 at 12:14 pm”)
le moyen de “normaliser” à 5v par rapport aux 1023 niveau de la conversion
c’est décrit (en anglais désolé) sur la définition de la fonction analogRead de l’arduino
https://www.arduino.cc/reference/fr/language/functions/analog-io/analogread/
Il est à noter que la tension de référence de conversion peut être “ajustée”
et dépende de la tension ainsi que du modèle de l’arduino voir
https://www.arduino.cc/reference/fr/language/functions/analog-io/analogreference/
Il est aussi à noter que certaines cartes sont capable de réaliser la mesure en 12 bits (il faut alors demander le changement de la résolution au travers de analogReadResolution (les cartes compatibles sont définies sur la page suivante)
https://www.arduino.cc/reference/fr/language/functions/zero-due-mkr-family/analogreadresolution/
TFlorian
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
oui il suffit juste d’adapter le code
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.
Bonjour,j’ai un problème concernant le code.
j’ai du mal à inclure la bibliothèque ShiftLCD