Ohmmètre avec affichage sur USB

LA MESURE DES RÉSISTANCES avec l’ATmega328

Mobiliser un Arduino UNO uniquement pour afficher sur la ligne série USB des valeurs de résistances reste très réducteur, et ce d’autant plus injustifié que plusieurs entrées analogiques restent disponibles et que la place occupée par le programme sera loin d’utiliser toute la mémoire du microcontrôleur. Le programme développé et analysé dans ce chapitre ne sera qu’une première étape,
une sorte de « mise en bouche informatique » durant laquelle on va aborder des concepts de base incontournables. Évaluer des résistances n’est pas totalement immédiat. Si l’on accepte de mobiliser deux entrées analogiques et que l’on ajoute deux résistances au module microcontrôleur mis à contribution, nous pouvons aisément transformer Arduino en un ohmmètre très honorable. Avant d’engager l’analyse d’un multimètre complet avec affichage sur écran LCD, commençons timidement par cet ohmmètre élémentaire qui dialogue avec l’émulateur de terminal de l’I.D.E.

L’algorithme utilisé.

Retrouvons nos fondamentaux, car la mesure d’une résistance consiste à la faire traverser par un courant et à en mesurer la tension aux bornes. Cette bonne loi d’Ohm (U = R * I) va nous fournir une solution élémentaire. Le courant sera fourni par l’alimentation +5Vcc régulée d’Arduino.

Fig1Page4

Comme il faut obligatoirement limiter le courant qui sera consommé sur cette dernière, on doit impérativement insérer une résistance en amont du composant à mesurer. Pour simplifier l’analyse, considérons le schéma utilisé montré en Fig.1 dans lequel R est la résistance à mesurer et RL la résistance de limitation. Les deux résistances placées en série sont parcourues par un courant identique soit I = 5 / (RL + R) = 5 / (1000 + R).

(Tension en Volts, I en Ampères et R en Ohms.)

En effectuant quelques permutations licites mathématiquement on arrive à la formule peu compliquée :

formule

 

Dans cette équation facile à coder en langage C le symbole E représente la tension mesurée par A2 et exprimée en Volts pour respecter l’homogénéité des dimensions. Avec ce schéma électrique, on peut mesurer des valeurs de résistances comprises entre zéro, soit un court circuit, et 150kΩ environ.

Cette plage est suffisante, car avec les systèmes à microcontrôleurs il est assez rare d’employer des composants de fortes valeurs. Cette solution est simple, n’exige qu’une seule résistance à ajouter à Arduino.

Sur court-circuit le courant traversant RL sera limité à 5mA donc très faible. Toutefois, quand les résistances deviennent inférieures à environ 50Ω, la tension mesurée devient faible et l’imprécision des mesures diverge. Pour pouvoir mesurer des valeurs jusqu’à 1Ω tout en conservant une précision d’au moins deux chiffres significatifs, il faut diminuer la valeur de RL. Attention, sur court-circuit le courant doit rester acceptable. Un deuxième calibre est donc prévu en mesurant avec l’entrée analogique A3 sur laquelle la résistance RL est diminuée à 100Ω. Il suffit de remplacer dans la formule 1000 par 100 pour ajouter ce calibre informatiquement.

La programmation

L’affichage des valeurs par l’entremise de la ligne série USB doit être permanent pour disposer d’un appareil de mesure vraiment opérationnel. Mais un défilement continu de valeurs qui brouillent l’écran vidéo sans pour autant changer notablement ne serait pas du tout convivial. L’idée consiste alors à n’afficher sur l’écran une nouvelle ligne que si la résistance mesurée a changé de valeur. Mais pour aboutir à un résultat satisfaisant, il faut impérativement s’affranchir du « bruit » en procédant à un lissage en utilisant les informations données dans Le bruit et les mesures en électronique  relatives à cette facette de l’informatique. (Lissage par « intégration ».) Comme la tension E mesurée sera sujette à de permanentes petites variations, pour calmer le rafraichissement de l’écran on va réaliser N mesures et en faire leur moyenne. La valeur de N a été choisie à 400.

Figure 2
Figure 2                    RETOUR

C’est la valeur la plus grande possible qui donne à l’usage l’impression d’un affichage instantané. Il faut impérativement une rapidité de « résolution » quand on désire ajuster à une valeur précise la résistance d’un potentiomètre par exemple. De plus, dès que l’on soumet un composant à une mesure, on désire immédiatement lire le résultat sur le moniteur vidéo. La Fig.2 présente l’organigramme relatif à cette partie du traitement. Mais comme il y a deux calibres, on va effectuer exactement la même chose sur l’entrée analogique A3. Pour éviter de calculer la moyenne, de transposer en « volts » et d’exclure « un dénominateur nul dans les calculs » deux fois dans le code de ce programme, la fin du traitement est confiée en (1) à une procédure commune nommée void Realise_la_moyenne() dont la Fig.3 ci-dessous présente l’organigramme. Un autre petit problème va se produire régulièrement quand aucune résistance n’est en cours de test. La valeur de E fait alors +5Vcc car l’entrée analogique présente une impédance très élevée. Quand on calcule le dénominateur dans la formule on aboutit à : 55 = 0. (Facile … ça tombe juste !) Hors, mathématiquement, la division par zéro est interdite. Informatiquement elle peut conduire à une boucle de calcul infinie. Dans le cas d’Arduino, après compilation, en exécution on aura un affichage de type « Int » pas très esthétique. C’est la raison pour laquelle toute tension mesurées supérieure à 4,96Vcc écourtera le déroulement du programme et sera ignorée dans la boucle de base qui passera à la suite du traitement.
Comment cette valeur particulière a-t’elle été déterminée ? Elle résulte d’un compromis.

Plus on adopte une valeur proche de +5Vcc, plus la plage des valeurs mesurable augmente vers les valeurs élevées. Rien n’empêche informatiquement de prendre 4,999999Vcc puisque la tension mesurée sera un float.

Figure 3

Il serait alors possible de mesurer jusqu’à plus de 800kΩ. Mais ce n’est pas idéal pour deux raisons. La précision des mesures se dégrade, comme pour celles des valeurs faibles. Le bénéfice est médiocre, car déjà avec 100kΩ on couvre largement nos besoins courants. Par contre, si proche du +5Vcc les fluctuations de numérisation arrivent à « traverser » le filtre que nous avons mis en place avec une moyenne sur 400 mesures consécutives. Il en résulte des affichages erronés qui viennent régulièrement perturber l’écran par des affichages de résistances fantômes de fortes valeurs. Avec cette valeur de 4,96Vcc déterminée expérimentalement on aboutit à un comportement parfaitement convivial avec une qualité opérationnelle de notre instrument de mesure tout à fait acceptable. L’organigramme de la Fig.4 donné plus avant résume le déroulement de la boucle de base. C’est le petit programme P01_Ohmmetre_sur_USB.ino qui réalise tous ces traitements et ne consomme en tout et pour tout que 5612 octets sur les 32256 disponibles.

Manifestement l’organigramme de la Fig.3 montre que l’on a utilisé une formule de calcul dans laquelle la tension est exprimée en mV avec bien entendu un facteur de correction de 1000 partout où il s’impose. C’est pour obtenir une précision mille fois plus importante dans le traitement numérique effectué par le programme. On bénéficie ainsi des valeurs de résistances affichées avec une seule décimale, mais avec aucune imprécision résultant du traitement proprement dit. Comme il s’agit d’un programme préparatoire en vue d’un projet plus élaboré, pour faciliter la mise au point la valeur de la tension mesurée E est également précisée lors des affichages. Si dans un programme « définitif » ce n’était plus utile, un gain de 80 octets serait ainsi facilement possible. Noter au passage que l’affichage de la valeur de la résistance précise si la mesure retenue par le logiciel est issue de A2 ou de A3. Ce n’est pas vital en sois, mais au cours du développement du programme il était commode de repérer quelle entrée se montrait coupable d’un affichage incohérent ce qui facilitait bien la mise au point, et en particulier le choix de certaines valeurs critiques comme le 4,96Vcc.

>>> Page suivante.

2 réflexions sur « Ohmmètre avec affichage sur USB »

  1. Cher Nulentout, j’ai parcouru en diagonale, je l’avoue, votre travail considérable que je sent excellentissime, mais j’avoue ne pas avoir trouvé où se cachent les codes .ino qui apparaissent un peu dans tous les chapitres. Peut être seront ils dans un répertoire final comme cet œuvre est en cours de rédaction. En tous les cas félicitation pour le partage de votre savoir qui est sans conteste de grande qualité!
    Cordialement

  2. Chers lecteurs,
    Pour le moment ne cherchez pas les fichiers PDF et les programmes. Ils ne seront mis en ligne que lorsque le dernier volet de la saga en cours de rédaction sera achevé.
    J’y « travaille » intensément, ce n’est plus qu’une question de jours.
    Quand le didacticiel sera complet, les gestionnaires du site se chargeront de la phase technique pour joindre les fichiers informatiques : Fichiers pour les versions PDF, les fiches et les programmes.
    Cordialement : Nulentout.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *