DIego Yourself
 Accueil

Plan :


Niveau : Débutant

Mesurer une tension

12.10.2016

1. Entre 0 et 5V

Article sponsorisé : écrit dans le cadre d'un partenariat avec le magasin de vente en ligne de composants électroniques Selectronic (qui a malheureusement fermé ses portes depuis), en tant que leur ambassadeur. Cet article est donc une adaptation de l'article original que j'avais écrit pour leur blog. Dans ce tutoriel vous trouverez donc des liens vers leurs produits, d'une excellente qualité : ce sont ceux que j'ai utilisé moi aussi, pour réaliser ce tutoriel.

Mesurer une tension ? Pourquoi faire ?

Dans l’univers des microcontrôleurs il y a la possibilité d’utiliser une infinité de capteurs afin de pouvoir interagir avec le monde qui entoure votre création. Selon le type de capteur, l’information qu’il renvoie peut être une tension variable. Dans cet article nous allons donc apprendre à mesurer une tension avec une carte Arduino UNO : d'abord entre 0 et 5V pour comprendre les principes de base, puis n'importe quelle tension d'un courrant continu.

Connaissances pré-requises :

Matériel nécessaire :


Optionnellement :

Commençons par mesurer une tension comprise entre 0 et 5V :

La carte Arduino UNO est capable de mesurer une tension entre 0 et 5V très facilement, il suffit d’utiliser directement une de ses entrées analogiques (A0 à A5). Téléversez le code suivant sur votre Arduino :

// 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) ;
}
 
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, 500);
 
// 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_tension1.ino

Une fois le code téléversé, il suffit de brancher la console et à l’aide de deux fils/jumpers mâle-mâle, mesurer une tension entre une borne GND (masse/0V) de la carte et la borne A1, en respectant les polarités :

Arduino UNO

Sur la console, quelque chose du genre s’affichera :

Tension : 1.53 Volts
Tension : 1.53 Volts
Tension : 1.53 Volts
Tension : 1.53 Volts
Tension : 1.53 Volts

Bingo ! C’est sympa hein !

En essayant avec deux piles 1.5V en série par exemple, la tension mesurée sera donc d’environ 3V. Veillez à bien respecter les polarités (le « - » toujours sur le GND).

Attention : ne jamais dépasser les 5V à mesurer dans cette configuration, sinon vous risquez de faire griller de façon définitive et irréversible votre carte Arduino UNO !

Comment ça marche ?

La carte Arduino mesure la tension entre la masse et ses entrées analogiques via un convertisseur Analogique – Numérique : dans cet exemple il prend la tension soumise à l’entrée analogique A1, la compare à une tension de référence et calcule une valeur proportionnelle comprise entre 0 et 1023. C’est cette valeur que nous retrouvons dans la variable valeurLue au moment de la lecture :

int valeurLue = analogRead(entreeAnalogique) ;

Pour retrouver la tension correspondante il suffit alors d’appliquer une règle de trois en faisant ainsi, en quelque sorte « le chemin dans l’autre sens » :

02_Equation_01

Nous cherchons donc à déterminer la valeur de tensionLue. En utilisant cette règle de trois, nous obtenons facilement :

03_Equation_02

Or, la carte Arduino fonctionne avec une tension d’environ 5V (fournie par l’USB ou le régulateur interne), et par défaut :

04_Equation_03

Comme :

05_Equation_04

Alors :

06_Equation_05

Pour éviter de dérouler la formule d’une règle de trois à chaque fois (même si ce n’est pas très compliqué), c’est exactement ce que fait déjà la fonction :

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

La valeur 500cV (centi-Volts) est utilisée au lieu de 5V pour avoir une précision de 0.01 Volt au moment de l’affichage. C’est une astuce qui permet d’utiliser quand même la fonction map(), qui ne gère que des valeurs entières. En d’autres mots, si vous mettez 5V au lieu de 500cV, à l’affichage vous n’aurez alors que 0, 1, 2, 3, 4 ou 5 Volts, sans chiffres après la virgule, ce qui est loin d’être précis !

Pour plus de clarté, le graphique suivant tente d’illustrer le principe :

07_Image_02

Une question surgit souvent au vu de tout cela : pourquoi l’Arduino ne fournit pas directement une tensionLue en Volts au lieu de devoir se « fatiguer » à faire toutes ces conversions ?

La réponse est relativement simple : c’est parce que la tension de référence n’est pas toujours de 5V. En fait l’Arduino offre la possibilité de choisir la tension de référence qui convient le mieux. C’est une utilisation un peu plus avancée que nous allons entrevoir plus loin dans de ce tutoriel.

Si vous avez tenté de valider votre lecture avec votre multimètre/voltmètre vous avez certainement constaté que la valeur lue ne correspond pas forcément, lequel a raison ?

Le multimètre, à moins d’être d’une piètre qualité, aura certainement plus raison que votre Arduino dans cette configuration. Pourquoi ? Si vous mesurez la tension de référence réelle (entre la borne +5V et GND de votre Arduino UNO) vous constaterez qu’elle n’est pas de 5V pile, mais une valeur comprise entre 4.5V et 5.5V. C’est la faute de votre ordinateur, qui ne fournit pas toujours une tension très stable sur ses ports USB.

Pour rendre la mesure plus fiable il faudrait donc mesurer cette tension à l’aide de votre multimètre et ajuster la référence (dans la fonction map()) pour tenir compte de cette différence. Par exemple, en supposant que votre multimètre affiche 4.68V (entre +5V & GND), alors il faut modifier votre code comme suit :

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

Une fois le nouveau code téléversé, si vous refaites votre mesure, cette fois cela devrait correspondre mieux avec la lecture sur votre multimètre.

Malheureusement, cette façon de procéder n’est pas très pratique parce qu’au final il est difficile de maîtriser la tension d’alimentation de la carte Arduino UNO et donc cette tension de référence. Dans la suite de ce tutoriel, vous allez apprendre comment faire des mesures plus précises de n'importe quelle tension, sans dépendre de cette tension difficile à maîtriser...

Un petit exercice ?

Allez, c’est tout simple, juste pour vérifier que c’est bien compris….

En supposant que la tension de référence est de 5V :

  1. Pour une valeurLue = 511, à quelle tension cela correspond ?
  2. Quelle valeurLue obtient-t-on pour une tension mesurée tensionLue de 4V ?

Réponses :

Ne trichez pas, essayez de trouver avant de regarder !

  1. 2.5V. En y regardant bien, c’est la moitié de l’échelle numérique (511 ≈ 1023 / 2), donc la moitié de 5V !
  2. Il faut appliquer la règle de trois "dans l’autre sens", pour trouver valeurLue au lieu de tensionLue, donc :
    08_Equation_06

Félicitations : vous savez mesurer tout simplement une tension entre 0 et 5V, n’hésitez pas à faire des tests, avec ou sans capteurs, pour bien comprendre le principe. Dans la suite, vous apprendrez à mesurer une tension supérieure à 5V : restez connectés !

  Retourner en haut