Utiliser une thermistance

Bonjour,
Je débute avec Arduino et j’expérimente différents Tutos que je trouve sur le Net.
Mon dernier exercice consiste à tester une Thermistance mais visiblement il y a une erreur dans le calcul.
La température indiquée est 10 fois trop élevée . Qui pourrait me dire d’où vient l’erreur ?

/*  
    Arduino thermistor example software
    Tutorial:  http://www.hacktronics.com/Tutorials/arduino-thermistor-tutorial
    Copyright (c) 2010 Mark McComb, hacktronics LLC
    License: http://www.opensource.org/licenses/mit-license.php (Go crazy)
*/

#include <LiquidCrystal.h>
#include <math.h>

/*

LCD Connections:
rs (LCD pin 4) to Arduino pin 12
rw (LCD pin 5) to Arduino pin 11
enable (LCD pin 6) to Arduino pin 10
LCD pin 15 to Arduino pin 13
LCD pins d4, d5, d6, d7 to Arduino pins 5, 4, 3, 2
*/

LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
int backLight = 13;    // pin 13 will control the backlight



void setup(void) {
  pinMode(backLight, OUTPUT);
  digitalWrite(backLight, HIGH); // turn backlight on. Replace 'HIGH' with 'LOW' to turn it off.
  lcd.begin(20, 4);              // rows, columns.  use 16,2 for a 16x2 LCD, etc.
  lcd.clear();                   // start with a blank screen
  lcd.setCursor(0,0);            // set cursor to column 0, row 0
}

double Thermister(int RawADC) {
  double Temp;
  // See http://en.wikipedia.org/wiki/Thermistor for explanation of formula
  Temp = log(((10240000/RawADC) - 10000));
  Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp));
  Temp = Temp - 273.15;           // Convert Kelvin to Celcius
  return Temp;
}

void printTemp(void) {
  double fTemp;
  double temp = Thermister(analogRead(0));  // Read sensor
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Temperature is:");
  lcd.setCursor(0,1);
  lcd.print(temp);
  lcd.print(" C / ");
  fTemp = (temp * 1.8) + 32.0;    // Convert to USA
  lcd.print(fTemp);
  lcd.print(" F");
  if (fTemp > 68 && fTemp < 78) {
    lcd.setCursor(0,3);
    lcd.print("Very comfortable");
  }
}

void loop(void) {
  printTemp();
  delay(1000);
}

bonjour, quelle thermistance? à mon avis c'est une question de connexion de cette dernière.

C'est une NTC 10D-11. Je pense avoir respecté le montage indiqué dans le Tuto

La premiere ligne de la formule de Temp me parait bizarre .. surtout la conversion analogique en Ohm : le 10000 c'est Ro mais le rapport 1024000/RawADC je vois pas ...

pour répondre à _pepe- je me suis contenté de suivre à la lettre les instructions de montage sans chercher plus loin . En ce qui concerne la résistance elle est de 10 KoΩ

Pourquoi se lancer bille en tête dans la copie de programmes sur Internet qui peuvent être faux ? Pourquoi ne commence tu pas par essayer de bien comprendre comment on peut obtenir une information de température avec une thermistance ?

Cela implique : 1) de lire de la documentation qui te permettra de voir que la formule qui permet de relier la valeur ohmique à la température n'est pas simple. Tout comme BrUn014200 la formule que tu utilise me paraît aussi bizarre : elle semble simplifiée à outrance.

2) de comprendre que le montage électronique fonctionne sur le principe d'un pont à 2 résistances. Une thermistance de 10 ohms me parait particulièrement inadaptée je vois plutôt une thermistance de 10kohms. Tu n'as pas jugé utile de nous communiquer ton schéma électrique et j'ai les plus grandes craintes qu'avec une thermistance de 10 ohms le courant qui la traverse soit énorme, et provoque un auto-échauffement de la thermistance par effet Joule. On ne peut pas exclure que la température affichée ne soit pas la température réelle de la thermistance.

Une fois que tu maîtrisera les grands principes de la mesure avec thermistance il suffira de maîtriser l'affichage sur un LCD.

Et a partir de ce moment tu n'aura plus besoin de copier des programmes sur Internet tu fera TON PROPRE programme, ce qui sera plus intéressant pour toi. Attention je ne dit pas qu'il ne faut pas regarder ce que les autres ont fait --> c'est le meilleur moyen pour apprendre, je dis qu'il faut s'en inspirer mais pas recopier sans vérifier.

J’ai pas le temps de poser l’équation mais ya pas juste une erreur de Ro ?
La formule utilisée utilise un Ro de 10K alors que la sienne d’après la datasheet fait juste 10 Ohms…

Ce qu'il nous faut c'est le montage exact avec les bonnes valeurs de composants et la référence exacte de la thermistance pour avoir accès à sa datasheet,

La balle est dans le camp du demandeur.

Je vous remercie pour vos réponses. Le Thermistance que j'ai utilisé portait la référence NTC 10D-11 Je l'ai utilisée parce que je l'ai reçu dans un kit de débutant avec d'autres composants et que je voulais savoir à quoi elle servait. J'ai été un peu trop vite et je me rends compte en vous lisant qu'il me manquait au moins un élément. Le Tuto et le schéma de montage se trouvent sur le lien suivant :

http://www.hacktronics.com/Tutorials/arduino-thermistor-tutorial

Merci encore pour vos réponses

Cela devient plus clair.

Sur le lien que tu donne (dans l'adresse il manque " .html" à la fin) il est bien précisé qu'ils utilisent une thermistance 10k (@25°C) et non pas une 10 ohms.

Première chose à faire mesurer la valeur ohmique de la thermistance à une température voisine de 20 °C. Si tu n'as pas de multimètre cours en acheter un, on en trouve des corrects autour de 10 € en grande surface de bricolage.

En thermistance la valeur quasi universelle est 10 kohms à 25°C . 10 ohms c'est farfelu, comme je l'ai déjà écrit le courant qui traverse la thermistance doit être très faible car l'échauffement est proportionnel [u]au carré[/u] de l'intensité.

Pour la doc : à partir de ton lien on peut cliquer sur un lien qui dirige vers Sparkfun. De Sparkfun on peut cliquer sur la data sheet (feuilles techniques du produit).

Si c'est cette thermistance que tu as elle est fabriquée par Vishay qui est un fournisseur sérieux.

pepe:
D’après les formules du code source et la valeur affichée à l’écran, la valeur lue par le CAN devrait être RawADC =1018, ce qui correspond à un rapport entre la valeur de la résistance fixe et celle de la thermistance de R0/RT=170 environ.

Donc par exemple, si R0=10kΩ alors RT=59Ω, et si RT=10Ω alors R0=1,7kΩ.

V(A1) = (Ro/(Rctn + Ro) * Vref
DataA1 = V(A1) * 1024 / Vref

=> DataA1 = (1024 * Ro ) /( Rctn + Ro )

DataA1Rctn + DataA1Ro = 1024 * Ro
=> Rctn = (1024 * Ro ) / DataA1 - Ro

En passant au log, on retrouve bien la suite de la formule
donc le code devrait être pour plus de compréhension :

...
double Thermister(int RawADC) {
 double Temp;
 double Ro = 10000;

 // See http://en.wikipedia.org/wiki/Thermistor for explanation of formula
 Temp = log(((1024*Ro/RawADC) - Ro));
 Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp));
 Temp = Temp - 273.15;           // Convert Kelvin to Celcius
 return Temp;
...

Pour moi, la formule utilisée est bonne seulement pour une 10K et donc interpréter la valeur du LCD me parait incorrect parce que les coefficients utilisés (ceux de l’équation de Steinhart-Hart) sont calculés à l’aide de 3 points (T° et Résistance) qui sont par la table fournie par le fabricant (de la 10K dans l’exemple du code).

Utiliser une CTN 10 Ohm avec une équation calculée pour une 10K, c’est avoir des résultats aberrants à tous les coups à mon sens vu qu’elles ne vont pas avoir le même comportement (valeur) pour une température donnée :wink: !

Après je comprends pas l’utilisation d’une 10K en série avec une CTN 10 Ohms, faut choisir la valeur en fonction de la valeur “moyenne” de la CTN dans la plage de mesure souhaitée …

Merci beaucoup . Demain j'irai m'acheter une thermistance de 10 k

Il faut calculer la valeur ohmique de la thermistance à partir de la valeur mesurée de Vcc et du point commun.

Ensuite concernant la formule pour obtenir la température à partir de la valeur de thermistance il y a plusieurs façon de procéder.
La plus précise, dans la mesure où on connait avec précision les paramètres de la thermistance, c’est d’utiliser la formule théorique qui comporte plusieurs exponentielles.
Je ne te cache pas c’est usine à gaz.

Moi je procèderais autrement.
On dispose quasiment toujours de la table Températures/ valeurs ohmiques.
Il suffit de reporter ces valeurs dans un tableur comme Libre Office (ou excel), de tracer la courbe et d’ajouter une courbe de tendance polynomiale.

Je viens de le tester avec la doc Vishay et une thermistance de 10 k. Avec un polynome de degrés 4 le coefficient de régression est de R= 0,99989 quasi parfait.
Avec un polynome de degrès 3 R= 0,9981 ce qui est très convenable.
Avec un polynome de degrès 2 : ce n’est pas bon dans les températures négatives ou basses.

En faisant ainsi tu ne manipule plus que des équations y= ax3 +bx2 + cx +d, bien plus simples que des exponentielles.
Les valeurs a,b , c sont données par le tableur quand on lui demande d’afficher l’équation.

Ps : si on est un peut plus malin et avec une petite règle de trois on obtient directement le polynôme qui transforme les volts mesurés en degrès Celsius.

Surtout que le calcul de log niveau soft c'est assez "long" !