DIego Yourself
 Accueil

Plan :


Niveau : Débutant

Mesurer une tension

12.10.2016

2. Supérieure à 5V

Arduino UNO Tension 5V et plus

Mesurons une tension supérieure à 5V :

OK, jusqu’à maintenant nous ne savons mesurer que des tensions inférieures à 5V. C’est déjà pas mal, parce que beaucoup de capteurs utilisent cette plage de tension très pratique et directement compatible avec une carte Arduino UNO. Mais en effet, il peut arriver quand même d’avoir besoin de mesurer une tension supérieure. Alors, comment fait-on ?
La réponse se trouve dans un montage électronique très simple mais extrêmement utile qui s’appelle « le pont diviseur de tension ». Le montage suivant permet de mesurer des tensions allant jusqu’à 50V :

Arduino UNO

Et voici le code à téléverser :

// entrée analogique utilisée pour mesurer la tension
#define ENTREE_ANALOGIQUE 1
 
void setup()
{
// Initialisation de la connexion série avec votre moniteur
Serial.begin(115200) ;
 
// utilisation de la tension de référence interne de 1.1V
analogReference(INTERNAL) ;
}
 
void loop()
{
// lecture de la valeur analogique à mesurer
int valeurLue = analogRead(ENTREE_ANALOGIQUE) ;
 
// conversion de la valeur lue en une tension en centi-Volts
float tensionLue = map(valeurLue, 0, 1023, 0, 5110);
 
// envoi pour affichage sur le moniteur série de la tension mesurée
Serial.print(Tension : ) ;
Serial.print(tensionLue / 100.0) ; // Afficher la valeur en Volts
Serial.println( Volts) ;
 
// attente d’une seconde (1000 millisecondes) entre deux mesures & affichages
delay(1000) ;
}
Fichier à télécharger : tuto_tension2.ino

ATTENTION : Une tension supérieure à 50V comporte des risques d’électrocution pour l’être humain et une tension supérieure à 30V est considérée comme potentiellement dangereuse pour l’être humain sans utilisation d’équipement particulier.

Evitez donc de mesurer des tensions supérieures à 30V avec ce montage histoire de ne prendre aucun risque pour votre santé. Il s’agit d’apprendre en toute sécurité, pas de se faire mal ! emote wink

Si vous mesurez par exemple la tension d’une pile de 9V (attention à bien respecter les polarités !), votre console affichera quelque chose comme :

Tension : 9.47 Volts
Tension : 9.47 Volts
Tension : 9.47 Volts
Tension : 9.47 Volts

Et vous pouvez vous amuser à mesurer n’importe quelle tension (en dessous de 30V) !

Voyons maintenant comment et pourquoi ça marche ?

Au niveau du code, une nouvelle instruction est apparue :

analogReference(INTERNAL) ;

Si vous avez lu le commentaire qui allait avec, vous avez déjà un indice sur son utilité. En effet, nous avons changé la fameuse tension de référence pour qu’elle ne soit plus de 5V mais de 1.1V, référence produite par le Arduino UNO lui-même, qui en pratique est plutôt stable.

Concrètement nous avons ainsi changé l’échelle, si nous reprenons l’exemple précédent, une valeurLue = 313 ne correspond plus à 1.53V mais à :

10_Equation_07

Au niveau du graphique associé, maintenant ça donne donc ceci :

11_Image_04

Bon, ok, l’échelle a changé puisque la référence utilisée est la référence interne de 1.1V, mais alors, ça ne veut pas dire qu’il ne faut pas dépasser les 1.1V à mesurer ? Comment cela se fait-il qu’on peut mesurer jusqu’à 50V maintenant ?!

N’oubliez pas que vous ne mesurez plus en branchant les fils directement sur votre Arduino UNO mais via deux résistances bien particulières disposées d’une étrange façon, c’est le pont diviseur de tension :

Pont diviseur de tension pour Arduino

Comment sont choisies les résistances pour un diviseur de tension ?

C’est plutôt simple en sachant que le diviseur de tension répond à la formule suivante :

13_Equation_08

Pour une tension de 51.1V en entrée vous aurez donc 51.1V x 0.0215 = 1.099V en sortie du pont diviseur. Ce qui reste proche mais inférieur aux 1.1V de référence que nous avons maintenant. C’est ce qui explique la valeur « 5110cV » (= 51.1V x 100) nouvellement arrivée dans la fonction map() du code téléversé :

float tensionLue = map(valeurLue, 0, 1023, 0, 5110);

Ainsi, avec ce montage, une tension mesurée de 15.7V par exemple, est convertie en 15.7 x 0.0215 = 0.337V avant d’être convertie à son tour en la valeur 313 par la carte Arduino UNO :

14_Image_06

En d’autres mots, en définitive, grâce au pont diviseur nous avons ramené notre plage de lecture à 0-51.1V :

15_Image_07

C’est cool, mais encore une fois, si je mesure avec mon multimètre pour vérifier, je n’obtiens de nouveau pas la même valeur, comment ça se fait ? Ce n’était pas censé être plus précis ?!

Eh oui, la tension de référence interne de 1.1V est maintenant plus stable sauf que, en ajoutant des composants électroniques nous avons ajouté une nouvelle sorte d’imprécision ! En effet, les composants utilisés (résistances) ont généralement une précision variant entre 5 & 10% de leur valeur. Cela veut dire par exemple, que pour une résistance de 10KΩ±10%, en réalité elle aura une valeur qui peut être entre 9KΩ et 11KΩ, ce qui fausse un peu notre calcul pour le pont diviseur !

Mais pas de panique, cette fois la solution est simple : l’avantage c’est que même si ces composants sont « imprécis », leur valeur divergente ne changera pas, il suffit donc d’adapter la mesure à ces valeurs, en prenant en compte leur imprécision. Pour cela, rien de plus simple qu’ajouter un coefficient de calibration dans votre code, coefficient qui sera calculé en fonction de la divergence que vous aurez trouvé par rapport à votre référence (donc votre multimètre dans ce cas). Si par exemple vous avez mesuré 16.4V avec votre carte Arduino UNO mais que votre multimètre affiche 15.7V, alors il vous faudra appliquer un coefficient de :

16_Equation_09

Ce que vous rapportez dans votre code de la manière suivante :

float tensionLue = map(valeurLue, 0, 1023, 0, 5110.0 * 0.957);

Téléversez votre nouveau code et revérifiez maintenant : beaucoup mieux n’est-ce-pas ?

Ce coefficient n’est donc plus à modifier tant que vous ne changez pas vos composants (les résistances) utilisés. Maintenant vous avez une mesure plus pratique car très stable quel que soit la tension avec laquelle votre carte est alimentée !

En pratique et en conclusion, il sera donc préférable d’utiliser cette technique, même pour mesurer une tension comprise entre 0 et 5V.

Ça a l’air pas mal tout ça, mettons-le en pratique avec quelques exercices, pour bien digérer :

  1. Vous souhaitez mesurer une tension qui varie entre 0 et 14V (ce qui est souvent le cas dans le monde automobile) en utilisant la tension de référence interne de votre carte Arduino UNO, quelles résistances allez-vous choisir pour votre pont diviseur ?
  2. Dans le montage de l’exercice précédent, vous souhaitez que votre mesure soit le plus précise possible, pour calibrer la lecture faite par votre carte Arduino UNO, vous faites une contre-mesure à l’aide de votre multimètre. La carte Arduino UNO affiche une tension de 8V alors que votre multimètre affiche une tension de 7V. Quel coefficient de calibration allez-vous appliquer et comment ?

Réponses :

  1. Pour déterminer les résistances à utiliser c’est plus simple de commencer par le rapport souhaité, dans le cas de cet exercice :
    17_Equation_10
    Puis, il convient de choisir une résistance élevée pour R1 afin de mieux protéger votre carte Arduino UNO, par exemple : 10KΩ.
    Enfin, il ne reste qu’à déterminer R2 selon la formule du pont diviseur, qui nous donne l’équation suivante à résoudre :
    18_Equation_11
    La résistance la plus proche (dans la gamme E12) est de 820Ω.
    Comme ce n’est pas tout à fait la résistance théorique souhaitée, déroulons le calcul en sens inverse maintenant pour connaître la plage de mesure théorique possible :
    19_Equation_12
    Comme la tension max acceptable est de 1.1V :
    20_Equation_13
    Par conséquent il faudra reporter cette valeur dans le code :
    float tensionLue = map(valeurLue, 0, 1023, 0, 1450);
  2. Le coefficient de calibration se calcule de la manière suivante :
    21_Equation_14
    Coefficient que vous pouvez appliquer sur votre code de la façon suivante :
    float tensionLue = map(valeurLue, 0, 1023, 0, 1450.0 * 0.875);

Et maintenant un petit défi, ça vous tente ?

Essayez d’afficher la tension sur un écran LCD plutôt que sur la console. Le tutoriel Utiliser un écran LCD vous sera certainement très utile... emote wink

Félicitations : Vous voilà maintenant « armés » pour pouvoir mesurer n’importe quelle tension d’une façon précise avec votre carte Arduino UNO ! Il n’y a plus qu’à mettre tout cela en pratique dans vos prochains projets !

En tant qu'ambassadeur Selectronic,

Diego
  Retourner en haut