Fabrication d'un voltmètre


Projet réalisé par Stéphane LAURENT professeur de physique-chimie et Sylvie BERNARD-VILLAIN technicienne de laboratoire au lycée Valin de La Rochelle.

Présentation

Les tensions mesurées doivent êtres positives est comprise entre 0 et 12 V.
Ce voltmètre n'est pas adapté pour mesurer des tensions dont la valeur varie très rapidement.

Les principaux composants

Résistances de 100kΩ et de 1MΩ
0,691 €
Diode 1N4148
0,06 €
Arduino Uno
23,90 €
Boitier
10,87 €
Fiches bananes

Schéma du voltmètre


Complément sur la mesure d'une tension à l'aide d'un Arduino Uno

Pour comprendre le choix des résistances, voici un rapide rappel sur la mesure d'une tension avec un Arduino.

int valeurLue = analogRead(A0);


analogReference(INTERNAL) ;

L'arduino ne pouvant maintenant mesurer que des tensions entre 0 et 1,1 V, il faut choisir un couple de valeur pour les résistances du pont diviseur de tension qui permettent d'abaisser la tension maxi de 12 à 1,1 V.

La tension mesurée, en tenant compte du pont diviseur de tension, est donc donnée par la relation :

Pour davantage d'information sur le pont diviseur de tension : Diego Yourself


Calibration

A cause de la précision des résistances utilisées et/ou de la valeur de la tension de référence (1,1 ± 0,1 V) qui n'est pas fixe, la tension mesurée avec ce montage peut légèrement différer de la tension mesurée avec un voltmètre de référence. Pour palier à ce problème, on peut utiliser un coefficient de calibration.
Pour cela :

float calibration = 1;

La tension mesurée à l'aide de notre montage, en tenant compte du coefficient de calibration, est donc :


Le code Arduino

Cliquez pour afficher le code

Cliquez pour masquer le code

/*
   Mesure d'une tension comprise entre 0 et 12V
   LAURENT Stéphane - Lycée valin (17)
   10/12/2023
*/
 
unsigned long tempsPrecedent = 0;
float intervalle = 500;         // durée entre deux mesures en ms
float date = 0;                 // date de la mesure
float calibration = 1.0;        // modifier le coefficient de calibration si nécessaire
float tension = 0;              // tension mesurée
float valeurLue = 0;            // valeur lue sur l'entrée A0
float sommeValeurLue = 0;       // somme de toutes les mesures  sur l'entrée A0
int nbrValeur = 0;              // Nombre de mesures sur l'entrée A0
 
void setup() {
 
  // Initialise la communication avec le PC
  Serial.begin(115200);
 
  // Utilisation de la tension de référence interne de 1.1V
  analogReference(INTERNAL);
 
  Serial.println("Ok");  // Envoyé au PC pour l'informer que l'initialisation est terminée
  delay(100);
}
 
 
void loop() {
 
  unsigned long tempsCourant = millis();  // cette variable contient le nombre de millisecondes depuis que le programme a démarré.
 
  if (tempsCourant - tempsPrecedent >= intervalle) {
    tempsPrecedent = tempsCourant;
 
    // envoie la date sur la liaison série
    Serial.print(date);
    Serial.print(" ");  // les données sont séparées par des espaces.
 
    // Faire la moyenne des valeurs mesurées et transformer valeurLue en tension comprise entre 0 et 1,1 V
    tension = (sommeValeurLue / nbrValeur) * 1.1 / 1023;
 
    // Envoie la mesure au PC en tenant compte du pont diviseur de tension et de la calibration
    Serial.println(tension * 11 * calibration);  // (R1 + R2)/R2 = 11
    delay(10);
 
    // mise à jour de la date
    date = (date + intervalle / 1000);
 
    // remise à zéro pour les mesures sur A0
    sommeValeurLue = 0;
    nbrValeur = 0;
  }
 
  // pour faire la moyenne des mesures
  valeurLue = analogRead(A0);  // Mesure la tension sur la broche A0 (de 0 à 1023)
  sommeValeurLue += valeurLue;
  nbrValeur += 1;
}




Quelques photos


Ce voltmètre peut être réalisé sans boitier ni diode de protection.


Stéphane LAURENT

Statistiques du site