Go Down

Topic: Calcul thermistance (Steinhart-Hart) (Read 3925 times) previous topic - next topic

lolo81

Bonjour,
nouveau dans la communauté Arduino avec ma Mega, n'étant pas doué en Math je galère avec une thermistance et la relation de Steinhart-Hart pour pouvoir afficher précisément(+-0.5°C) la T° ambiante.
J'ai déja effectué quelques mesures à diverses T° mais je ne sais pas comment calculer les inconnues A B et C pour les mettre dans le code de la carte:
Code: [Select]

float A = ?????????, B = ????????, C = ????????;
float logRt,Rt,T;
Vo = analogRead(ThermistorPin);
Rt = R*( 1023.0 / (float)Vo - 1.0 );
logRt = log(Rt);
T = ( 1.0 / (A + B*logRt + C*logRt*logRt*logRt ) -273.15);//-273.15 est la conversion de Kelvin en °C


seules données dont je dispose sur la Thermistance:
Couleurs: Marron, Noir, Jaune, Orange (100KOhm)
Mesures:
210Kohm à 1°C
125Kohm à 19.7°C
104Kohm à 25°C
72Kohm à 42°C

Merci pour votre aide!!!



Débutant mais acharné!!

fdufnews

Normalement les paramètres A, B, C sont dans les docs constructeur.

lolo81

Bonjour,
Je ne sais rien de plus sur ce composant, je l'ai récupéré sur un programmateur de T° d'intérieur.
Il  est de forme Tantale.
Débutant mais acharné!!

B@tto

Sinon bon, excel courbe de tendance ... Et voila : y = 0.0572x2 - 5.8363x + 215.99
R² = 0.9994
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

68tjs

Pris de vitesse j'allais proposer la même chose.
A signaler mieux qu'Excel   qu'un tableur ->  Qtiplot : des énormes possibilités pour approximer une courbe.
De plus gratuit, opensource et disponible multi-plateforme : Mac, Linux et Windows.

Remarques :
- La relation de Steinhart-Hart n'est qu'une modélisation, elle à donc ses limites.
- Pour ce genre d'approximation il est préférable de limiter la gamme de température au strict nécessaire, peut-être même il faudra approximer par zone de températures.
- Plus il y a de points de mesure mieux cela vaut : 4 points c'est vraiment limite pour la précision que tu recherches.

lolo81

Merci pour vos réponses mais je ne vous suis pas, si il me faut d'autres points c'est pas un problème, je vais faire d'autres mesures mais après comment calculer A B et C?
Quelles serait les meilleures mesures? combien en faut il?
Sachant que je vais mesurer une plage allant de -15 à +40.


Quote from: B@tto
courbe de tendance ... Et voila : y = 0.0572x2 - 5.8363x + 215.99
R² = 0.9994


C'est quoi? Comment l'utiliser?

:smiley-fat:
Débutant mais acharné!!

al1fch

#6
Nov 12, 2012, 11:07 am Last Edit: Nov 12, 2012, 11:18 am by al1fch Reason: 1
Bonjour
Quote
je ne sais pas comment calculer les inconnues A B et C


la page Wikipedia sur la relation de Steinhart-Hart  (http://fr.wikipedia.org/wiki/Relation_de_Steinhart-Hart ) détaille la méthode de calcul des trois coefficients A, B et C à partir de 3 points de mesure.

Les températures sont à mettre en °Kelvin
-calculer L1,L2 et L3
-calculer Y1,Y2 et Y3
-calculer gamma2 et gamma3
-calculer les coefficients C, B et A


68tjs

Courbe de tendance :
Reprenons la courbe que B@tto t'as donné :
y = 0.0572x2 - 5.8363x + 215.99
Cela provient d'un tableur donc c'est des notations mathématiques.
il suffit de convertir en variables physiques  :
y = valeur de la température en degrès -> T
x = valeur de la thermistance en Ohms -> Rth

Soit T=0.0572*Rth2 - 5.8363*Rth + 215.99

Le principe de la "courbe de tendance" :
On fait des mesures et on trace la courbe correspondante : ici c'est Valeur en ohms en fonction de la température
Avec la "courbe de tendance" on va chercher à être "au plus prés" de la courbe des mesures mais avec des fonctions mathématiques.
Ici B@tto a cherché à approximer avec le polynôme :  y=a2x2 + a1x +a0
Le coefficient de  R² = 0.9994 est très proche de 1 il n'est pas utile d'utiliser un polynôme de degrés supérieur.
D'autres fonctions mathématiques sont possibles, par exemple la relation Steinhart-Hart utilise des exponentielles.

Le fait d'avoir une équivalence avec des fonctions mathématiques va permettre de pouvoir calculer la température pour n'importe qu'elle valeur de la thermistance.

al1fch

#8
Nov 12, 2012, 12:03 pm Last Edit: Nov 12, 2012, 12:05 pm by al1fch Reason: 1
Pour revenir à la modélisation Steinhart-Hart voici une feuille de calcul des coefficients A,B et C qui semble etre OK :
http://www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CCcQFjAA&url=http%3A%2F%2Fwww.unb.ca%2Fcivil%2Fhydro%2FS-H%2520coefficients.xls&ei=lNSgUI63JYyWhQfm14HYBw&usg=AFQjCNELZfbU8hJ-SJVITGUqpEmAuikk9g
ci dessous : coeffs obtenus à partir des relevés de mesure à 1°C, 25°C et 42°C

lolo81

Bon,
après 2 aspirines  !!  $) et de multiples essais, la T° affichée est toujours erronée  :~
J'ai mis les valeurs A B et C résultat du calcul que vous m'avez posté, j'ai également pris une nouvelle mesure (16.3°C = 134KOms).
Je pense que mon code (trouvé sur la toile) doit avoir une erreur !?
Avec mon code j'ai une T° de 269.8° au lieu de 19.5°
Encore merci à tous pour votre aide, je n'en espérais pas tant pour un nouveau venu !!
Code: [Select]

int ThermistorPin = 1; // Entree analogique de la sonde
int Vo; // lecture de la tension délivré par la thermistance
float R = 5800.0; //Résistance du diviseur de Tension
float logRt,Rt,T;
float c1 = -8.1470e-3, c2 = 1.2598e-03,c3 =-1.9802e-06; //1° , 25° et 42°
Vo = analogRead(ThermistorPin);
Rt = R*( 1023.0 / (float)Vo - 1.0 );
logRt = log(Rt);
T = ( 1.0 / (c1 + c2*logRt + c3*logRt*logRt*logRt )-273.15 );//-273.15 est la conversion de Kelvin en °C
Serial.print(" "); Serial.print(Vo);
Serial.print(" "); Serial.print(Rt);
Serial.print(" "); Serial.println(T);

Débutant mais acharné!!

al1fch

#10
Nov 12, 2012, 03:53 pm Last Edit: Nov 12, 2012, 04:09 pm by al1fch Reason: 1
Pourquoi
Code: [Select]
float R = 5800.0; ?
Le programme d'origine était conçu pour quelle valeur de thermistance et quelle valeur de résistance mise en série ?
Souvent dans les exemples c'est 10K et 10K.  Si c'était le cas il faudrait, pour transposer,  mettre une résistance de 100K, égale à celle de la thermistance et écrire
Code: [Select]
float R = 100000.0;
Un lien vers le programme d'origine ?

Pour info : le programme 'élaboré et nettoyé' du Playground Arduino  avec 'pad' = Résistance série mesurée et  'thermr'=résistance nominale de la thermistance utilisée. http://www.arduino.cc/playground/ComponentLib/Thermistor2

fdufnews

Et puis il y a de fortes chances que ta formule retourne la température en degrés Kelvin.

Jean-François

Il faut introduire cette conversion :

°C = (°F - 32) / 1.8

Et voir si les résultats retournés sont correctes.
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Artouste


Il faut introduire cette conversion :

°C = (°F - 32) / 1.8

Et voir si les résultats retournés sont correctes.

salut JF
ça c'est pour convertir du °C en °F
pour convertir du K en °C c'est ) °C=K-273.15

Jean-François

Arfff... un peu trop pressé de répondre  :smiley-mr-green:
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Go Up