DIego Yourself
 Accueil

Niveau : Intermédiaire

Mesurer une résistance

26.09.2017

Pourquoi mesurer une résistance ?

A part "parce que c'est cool", parce que cela fait partie des "connaissances de base" à acquérir pour pouvoir maîtriser l'utilisation des microcontrôleurs. En effet, une grande quantité de capteurs pour ne pas dire la plupart, dits résistifs, offrent une résistance variable selon ce qu'ils mesurent. Autrement dit ce n'est pas seulement "basique", mais vital pour pouvoir utiliser des capteurs avec votre Arduino UNO.
Dans cet article nous allons donc apprendre à mesurer une résistance avec une carte Arduino UNO.

Connaissances pré-requises :

Matériel nécessaire :


Optionnellement :

Mesurons la résistance de ce potentiomètre !

Commencez par réaliser le montage suivant :

Arduino UNO : mesure de résistance, montage de base
Arduino UNO : mesure de résistance, montage de base

Téléversez maintenant ce code pour pouvoir jouer avec votre potard (le petit surnom du potentiomètre) :

// Entrée analogique à utiliser (entre 0 et 5 pour un Arduino UNO)
int entreeAnalogique = 1;
 
// Valeur de la résistance de mesure R1 en ohms
#define R1 10000.0F
 
void setup()
{
// Initialisation de la communication série
Serial.begin(115200);
}
 
 
void loop()
{
// Lecture de l'entrée analogique
float valeurLue = (float)analogRead(entreeAnalogique);
 
// calcul de la valeur de la résistance en ohms
float resistanceLue = (valeurLue * R1) / (1023.0F - valeurLue);
 
// affichage de la valeur de la résistance dans la console série
Serial.print(Resistance : );
Serial.print(resistanceLue);
Serial.println( Ohms);
 
// attendre 1 seconde avant la prochaine mesure
delay(1000);
}
Fichier à télécharger : tuto_resistance1.ino

Une fois tout en place, faites tourner votre potentiomètre et voyez ce qui s'affiche dans votre console.

Comment ça marche ?

Vous avez certainement reconnu que nous utilisons un schéma de montage proche (pour ne pas dire identique) à celui du diviseur de tension vu précédemment : eh oui ! Ce n'est rien de plus !
Sauf que cette fois c'est la tension qui est constante (~5V) et votre résistance d'entrée qui est variable (le potentiomètre). Ceci a pour effet de faire varier la tension que votre Arduino lit en entrée, car elle est plus ou moins divisée selon la position (résistance) de votre potentiomètre : le tour est joué !

Pour calculer la valeur de la résistance, nous utilisons toujours la même formule que pour le pont diviseur, sauf que vous avez une résistance variable (RV1), donc le rapport varie. Ainsi, pour retrouver la valeur (en ohms) de votre potentiomètre, vous devrez partir de cette formule de rapport pour le pont diviseur :

Rapport d'un pont diviseur
Si vous y intégrez les tensions impliquées, soit la TensionDivisée qui n'est autre que la tension lue par votre Arduino en sortie du pont diviseur ; et la TensionEntrée, qui est la tension fournie par votre Arduino, en l'occurrence environ 5V. Voici ce que vous obtenez :
Rapport d'un pont diviseur
Et par conséquent, si vous remplacez le Rapport par sa formule :
Rapport d'un pont diviseur
Puis, comme votre inconnue est la résistance variable RV1, si vous développez la formule en cherchant à calculer cette valeur vous arrivez à la formule suivante pour déduire la valeur de votre résistance variable :
Valeur d'une résistance variable sur un pont diviseur
Ou encore à celle-ci (qui revient exactement au même) :
Valeur d'une résistance variable sur un pont diviseur
Ce qu'il est intéressant de relever sur cette dernière c'est qu'il y a un rapport de tensions.

Qu'est-ce-que cela veut dire ?
En pratique ça signifie que la formule est valable quel que soit la tension d'entrée car en fin de compte ce qui est utile pour trouver le résultat c'est le rapport de la variation de tension, donc en gros, une sorte de proportion non-linéaire.

..et en quoi c'est important ?
C'est simplement grâce à cela que nous pouvons utiliser directement la valeur lue (qui je vous le rappelle, est comprise entre 0 et 1023 et pas entre 0 et 5) sans la convertir en tension. C'est pour cette même raison que vous retrouvez dans le code que c'est directement la valeur lue qui est utilisée en appliquant la formule ! C'est donc une formule super-pratique car elle permet de s'affranchir des problèmes de précision de la tension fournie par votre carte Arduino (comme nous avons vu dans le tutoriel pour mesurer une tension).

Pourquoi ça ?
Comme précédemment, que la tension en entrée soit de 4.5V ou de 5.2V, cela ne change rien au rapport. Oui, si vous avez bien lu, je cite "la formule est valable quel que soit la tension d'entrée". Et comme par défaut la tension d'entrée est la référence, elle se trouve toujours équivalente à 1023 (valeur maximum lue) et par conséquent le rapport est toujours valide.
Si ça ne rentre quand même pas, et que comprendre pourquoi ne vous semble toujours pas trivial, essayez de faire le calcul à la main en partant du pont diviseur. Sinon, si vous êtes pressé vous pouvez ignorer cette explication et le considérer comme acquis. Mais ça risque de vous jouer des mauvais tours dans d'autres situations si vous ne savez pas pourquoi vous le faites, surtout si vous veniez à changer la tension de référence... ;-)

C'est mignon tout ça, mais si je mesure avec mon multimètre, je n'obtiens pas la même valeur, pourquoi ?

Avant tout, pour mesurer correctement avec votre ohmmètre, vous devez le faire en débranchant votre potentiomètre de votre Arduino et en mesurant entre les mêmes broches que le fait votre Arduino tout en ayant fait très attention à ne pas toucher ni faire bouger la position de votre potentiomètre (ça a l'air difficile dit comme ça, mais en fait c'est simple, essayez, vous verrez...).
Malgré cela, vous pouvez constater une différence dans les mesures, la raison est la même que pour le pont diviseur : votre résistance R1 a une précision qui varie souvent entre 5 et 10% de la valeur indiquée, ce qui fausse d'autant votre calcul.

Encore une fois, pas de panique : pour remédier à cela il y a plusieurs solutions possibles, nous allons voir une solution "électronique" plutôt que logicielle car elle est très simple : remplacez R1 par un deuxième potentiomètre RV2 et une résistance de protection R3 proche de 5KΩ. La somme de la valeur maximale de RV2 et R3 doit être supérieure à la résistance initiale R1, mais doit contenir dans sa plage de valeur possibles la valeur de R1, soit dans notre cas min 5KΩ et max 15KΩ, ou encore 10KΩ ± 5KΩ.
Sécurité avant tout : La résistance R3 de protection est là pour empêcher un court-circuit au cas où initialement (ou par erreur) vous veniez à mettre les deux résistances variables RV1 et RV2 à 0Ω, ce qui provoquerait un court-circuit pouvant non-seulement endommager votre Arduino UNO mais parfois même provoquer un incendie.

Le montage devient donc le suivant, prenez votre résistance proche des 5KΩ pour R3 (4,7KΩ ou 5,6KΩ) :
Arduino UNO : mesure de résistance, montage étalonable
Arduino UNO : mesure de résistance, montage étalonable
En ce qui concerne le code, vous n'avez pas besoin d'y toucher !

OK, mais si je démarre mon Arduino comme ça, j'obtiens des valeurs complètement farfelues !!!

Oui, ne soyez pas impatient, c'est normal car il faut d'abord étalonner votre montage ! Pour ce faire, la référence va donc être votre multimètre justement. Voici comment procéder :

  1. Débranchez votre potentiomètre RV1 de votre Arduino ;
  2. A l'aide de votre multimètre positionné en mode ohmmètre, mesurez la résistance entre les deux pattes qui seront par la suite rebranchées sur votre Arduino et amenez-là à mi-course, soit ~5KΩ dans notre cas, puis notez la valeur exacte lue par votre multimètre ;
  3. En veillant à ne pas faire bouger le réglage de votre potentiomètre rebranchez-le sur votre Arduino ;
  4. Une fois que votre Arduino vous affiche la valeur de résistance interprétée, faites bouger votre deuxième potentiomètre RV2 jusqu'à ce que votre Arduino vous affiche une valeur aussi proche que possible de la valeur que vous aviez lu (et noté) sur votre multimètre ;
  5. Ca y est, votre montage est étalonné !
Vous pouvez valider votre étalonnage en allant sur des valeurs proches des limites (500Ω et 9500Ω) tout en confirmant avec votre multimètre.
Cet étalonnage est plutôt basique, il vous permet tout simplement d'être sûr d'avoir 10KΩ sur votre résistance RV2+R3 par rapport à la lecture et surtout au calcul qui en est fait. C'est pour cette raison que la valeur exacte de R3 a peu d'importance, tant qu’elle permet d'avoir une marge de manouvre acceptable pour la calibration.
Etant donné que l'étalonnage de votre multimètre dépendra souvent de sa qualité, si vous constatez des écarts trop importants lors de la mesure des valeurs extrêmes ce sera très certainement parce que votre multimètre est mal étalonné par rapport à la réalité.

Comment je choisis la valeur de la résistance R1 ou RV2+R3 ?

Jusqu'à maintenant ces valeur sont un peu "tombées du ciel", mais vous avez certainement constaté que les valeurs coïncident : la valeur utile de R1 ou RV2+R3 est proche de RV1. En effet, pour une question de précision puisque nous avons un rapport variable en fonction de la tension divisée, la courbe mettant en relation la résistance et le résultat obtenu grâce à notre formule n'est pas droite (linaire). Il en résulte une meilleure précision lorsque les rapports sont proches. Il vaut donc mieux choisir une résistance R1(ou RV2+R3) dont la valeur est proche de celle à mesurer.
Ceci dit, avec une résistance R1(ou RV2+R3) de 10KΩ vous pouvez mesurer avec une précision acceptable des valeurs allant de 100Ω à 100kΩ. Mais libre à vous d'ajuster selon votre besoin précis. Si vous veniez à avoir besoin de choisir une autre valeur, n'oubliez cependant pas de modifier la valeur de R1 dans le code à téléverser pour que le calcul soit correct ;-).

Et avec un capteur résistif, je fais comment ?

Il est clair que vous n'allez pas toujours utiliser un potentiomètre. Pour utiliser un capteur il devient alors vital de connaître sa plage de résistance ainsi que son comportement pour pouvoir l'interpréter. Vous trouverez cela dans un document décrivant votre composant, ce document se fait souvent appeler "datasheet". Une fois que vous avez la plage de mesure vous saurez donc choisir la résistance qui convient le mieux pour R1(ou RV2+R3).
Selon la précision dont vous avez besoin vous pouvez opter pour une résistance fixe ou un montage étalonable comme décrit dans ce tutoriel.
En pratique c'est plutôt la résistance fixe qui est utilisée le plus souvent car votre capteur aura lui aussi une plage d'imprécision qui fait qu'au final vous devrez certainement faire d'autres calculs pour calibrer votre mesure.
Si vous optez pour un montage étalonable, vous devrez absolument l'étalonner avant d'y brancher votre capteur. Pour ce faire il vous suffit de suivre la même procédure décrite dans ce tutoriel en veillant à choisir un potentiomètre RV1 dont la plage est proche de celle de votre capteur.

Exercices :

C'est la tradition, comme ça votre cerveau enregistre bien et pour longtemps !

  1. Les potentiomètres sont souvent utilisés comme des capteurs de position. Quelle position ? leur propre position ! (un bouton de réglage du volume ou un capteur de rotation par exemple) Il devient plus souvent utile de savoir où il se trouve par rapport à l'amplitude totale de sa course que la valeur de sa résistance : un pourcentage décrivant sa position serait un résultat plus facilement exploitable.
    Modifiez le code initial pour que ce soit un pourcentage de sa course totale qui s'affiche sur la console.
  2. Vous avez trouvé un capteur de température linéaire de type PT100. Le datasheet fourni avec est celui-ci : PT100-Datasheet.pdf (document pdf, nécessitant Adobe Reader pour pouvoir le lire, c'est souvent le cas pour les datasheets).
    Si vous voulez faire un montage simple (non-étalonné) quelle résistance devez-vous choisir pour mesurer la valeur du capteur en fonctionnement afin de mesurer une température ambiante la plupart du temps ?

Réponses :

  1. Pour calculer un pourcentage vous devriez modifier la ligne de calcul en ajoutant la valeur maximale de la résistance de votre potentiomètre comme suit :

    // Entrée analogique à utiliser (entre 0 et 5 pour un Arduino UNO)
    int entreeAnalogique = 1;
     
    // Valeur de la résistance de mesure R1 en ohms
    #define R1 10000.0F
     
    // Valeur maximale de la résistance à mesurer
    #define RMAX 10000.0F
     
    void setup()
    {
    // Initialisation de la communication série
    Serial.begin(115200);
    }
     
     
    void loop()
    {
    // Lecture de l'entrée analogique
    float valeurLue = (float)analogRead(entreeAnalogique);
     
    // calcul de la position du potentiomètre
    float pourcentLu = (valeurLue * R1) / (RMAX * (1023.0F - valeurLue));
     
    // affichage de la position dans la console série
    Serial.print(Position : );
    Serial.print(pourcentLu * 100.0F);
    Serial.println( Pourcent);
     
    // attendre 1 seconde avant la prochaine mesure
    delay(1000);
    }
    Fichier à télécharger : tuto_resistance2.ino
    Bien entendu, le résultat sera plus précis si vous faites un montage étalonné.

    Dans cette question il y avait cependant un petit piège, dans lequel vous n'êtes certainement pas tombé mais qui est malheureusement bien trop souvent utilisé. Celui d'utiliser la formule suivante pour calculer ce pourcentage :

    float pourcentLu = valeurLue / 1023.0F;

    Ça peut avoir l'air de fonctionner, mais vous ne serez pas au milieu de votre course lorsque 50% seront affichés sur la console... un peu dommage non ?
    La raison est simple, c'est parce que le rapport n'étant pas linéaire, la position n'est donc pas directement proportionnelle à la tension lue.
    Cependant, si vous n'avez pas un capteur linéaire, comme c'est souvent le cas des thermistances les plus élémentaires par exemple, la non-linéarité de la thermistance peut compenser la non-linéarité du calcul et tomber sur quelque chose d'assez proche du linéaire en fin de compte quand même en ce qui concerne la valeur interprétée (par exemple la température pour une thermistance) ; c'est une méthode qui nécessite cependant une calibration par étalonnage aussi, en utilisant une équation de type y=ax+b.
    Un autre usage serait si vous n'avez pas besoin d'une grande précision : c'est un raccourci simple qui peut vous permettre de gagner du temps (pour tester quelque chose par exemple). A manier donc avec précaution...
  2. A la fin du datasheet vous trouvez un tableau décrivant le comportement du capteur. Si vous lisez les valeurs extrêmes, vous constaterez qu'à 0°C il résiste à hauteur de 100Ω, mais qu'à 110°C il résiste à hauteur de 146.7Ω.
    De plus, pour mesurer la température ambiante, qui est autour de 20°C, la résistance est de 107.79Ω. Une résistance de 100Ω serait donc tout à fait adaptée, mais une 120Ω aussi...

Enfin, un petit défi ?

Essayez d'afficher la température d'un capteur si vous en avez un, dans un écran LCD. Vous obtiendrez ainsi votre premier thermomètre !

Félicitations : vous savez maintenant lire une résistance pour pouvoir interpréter sa valeur selon le capteur que vous utilisez. Ceci vous sera plus qu'utile pour vos futures créations avec votre Arduino !

Diego
  Retourner en haut
Commenter sur le forum Forum Arduino