Mesure instable ?

Bonjour!

Mes yeux refusant de lire les codes couleurs des résistances, j’ai monté un ohmmètre grossier.
Je branche en série une résistance de référence (~10k?) et la résistance à mesurer, entre le +5V et la masse.
La loi d’Ohm dit que, l’intensité étant conservée dans un montage série :
i = v1/r1 = v2/r2
donc je calcule la résistance par :
resmesure = resreference * (Vmax - Vresmesure) / (Vresmesure)

Ce montage fonctionne et permet de mesurer (en gros) une résistance (sans loupe!)
Mais l’indication oscille entre deux valeurs quand je mesure une résistance notablement plus faible que ma référence. J’ai bien vérifié tous les contacts, ils sont bons.

Pourquoi cette oscillation, qui ne semble pas au hasard ?

Voici mon sketch :

#include <LiquidCrystal.h>

// create ? character
byte omega[8] = {B01010,B10001,B10001,B10001,B10001,B01010,B11011,B00000};
// initialize lcd library 
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

void setup() {
  // setup the lcd display
  lcd.begin(16, 2);
  lcd.clear();
  lcd.createChar(9,omega);
  // read  on pin A5
  pinMode(A5,INPUT);
}

void loop() {
  getresistance();
  delay(250);

}

void getresistance(){
  // ohmmetre said this value for reference resistor :
  double resref = 10906;                         // ?
  double ara5 = analogRead(A5);                  // 0..1023
  double resmesure = resref * (1023-ara5)/(ara5);// ?
  lcd.clear();
  lcd.setCursor(0, 0);
  if (resmesure<1000){
    lcd.print(resmesure);     
    lcd.print(" "); 
    lcd.write(9);
  }
  else if (resmesure<1000000){
    lcd.print(resmesure/1000);
    lcd.print(" k");
    lcd.write(9);
  }
  else {
    lcd.print(resmesure/1000000);
    lcd.print(" M");
    lcd.write(9);
  }
}

Salut,

Que donne tes mesures, as-tu un exemple?

Il pourrait s'agir du quantum, en gros (si mes souvenirs de cours sont bons) la précision de la mesure. Comme ta résistance est entre 2 valeurs mesurables, ta mesure aussi entre ces 2 valeurs.

Bonjour,

De quel ordre est la variation au niveau de "ara5" et de "resmesure" ? La mesure du convertisseur analogique -> numérique d'un ATmega n'est que sur 10 bits. Il ce peut donc qu'il y ai une variation de +/- 1 (quantum) si la valeur est entre deux "pas" de conversion. Âpres le calcul derrière ne fait qu'amplifier l'imprécision de la mesure.

Avec une résistance de 220? nominal, je lis 208,74? et 218,90? alternativement, toujours ces valeurs même avec une autre 220? nominal. Si je prends une valeur moyenne, je suis en-dessous de 220?, il y a donc un biais de mesure, faible mais réel. Je veux bien qu'il y ait des fluctuations aléatoires, qui seraient due à de mauvais contacts ou à des fluctuations d'alimentation, mais cette oscillation entre deux valeurs me tirlipote le schmilblick...

Ça n'empêche pas que ce montage donne bien assez de précision pour classer les résistances selon leurs valeurs, le but recherché! Et ça affiche inf M? en circuit ouvert, ce qui est cohérent avec la mesure.

Plutôt que de donner des valeurs de résistances calculées pourrait tu nous donner les valeurs lues par analogRead. Cela permettra de vérifier si tu es dans les limites de la précision de l'échantillonage ou s'il y a un réel problème.

PS : on pourrait faire le calcul inverse mais ce serait accumuler les erreurs dues aux arrondis, autant partir sur les valeurs brutes de mesure.

Pour une 220? la mesure oscille entre 1001 et 1002. C'est proche du maxi 1023 mais ça n'explique pas l'oscillation...

GeoTrouveRien: Pour une 220? la mesure oscille entre 1001 et 1002. C'est proche du maxi 1023 mais ça n'explique pas l'oscillation...

bonjour ne pas en oublier que par defaut la reference de tension est celle de l'alimentation de l'arduino. et le 5V est assez fluctuant en conso instantané.

Je branche en série une résistance de référence (~10k?) et la résistance à mesurer, entre le +5V et la masse.

Pour une 220? la mesure oscille entre 1001 et 1002. C'est proche du maxi 1023 mais ça n'explique pas l'oscillation...

Apparemment ton montage est le suivant

Vcc ---------R_à_mesurer--|---10 k Ohms--------Gnd | Mesure L'incertitude de mesure vient de la sensibilité de ton "pont de mesure". Dans le cas de valeurs de résistances faibles (1) devant celle de la résistance "étalon" de 10k le pas de mesure (Vcc/1024) ne te permet pas de discriminer des valeurs proches, c'est tout à fait normal et c'est pour cela que les "vrais" appareils de mesure ont plusieurs gammes. (1) le problème serait identique avec des valeurs à mesurer trop grande devant les 10k.

Quelques conseils : Prévois de commuter plusieurs valeurs pour la résistance étalon (100k, 10k, 1k, 100). Si tu inverse R_inconnue et R_étalon tu démarrera la mesure à partir de GND au lieu de Vcc. Cela te permettra de tenir compte de l'information d'Artouste au sujet du 5V de l'alim de l'arduino : en USB tous les PC ne donnent pas la même valeur de 5V -> la norme est 5V +/- 5%, donc ta mesure est entachée dès le départ d'une erreur de +/- 5%. En alim extérieure tu reste sensible aux variations de courant consommé dans le régulateur interne de la carte Arduino. Sur la carte il reste un régulateur très peu souvent utilisé donc insensible aux variations de courant consommé c'est le régul 3,3 V. Tu peux t'en servir comme source de tension de référence pour "AREF". L'ATMega possède aussi une référence de tension interne de 1,1V mais je pense que la valeur de 1,1 V n'est pas adaptée à ton besoin et demandera trop de 'gamme de mesure".

Ultime solution = un multimètre à moins de 10 € :grin: Mais où est le plaisir de faire ? :grin:

Ne pas oublier que l'ADC est "précis" à 4.5 LSB près d'après la doc de l'atMega328 donc ne pas se montrer trop exigeant non plus. Concernant les variations d'alimentation, comme le pont qui sert à mesurer la résistance utilise la même alimentation que la référence on peut admettre que ces perturbations (si elles sont lentes) ne sont pas trop gênantes.