Offline
Newbie
Karma: 0
Posts: 35
|
 |
« on: November 12, 2012, 01:42:04 am » |
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: 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!!!
|
|
|
|
|
Logged
|
Débutant mais acharné!!
|
|
|
|
France
Offline
Edison Member
Karma: 12
Posts: 1800
There is an Arduino for that
|
 |
« Reply #1 on: November 12, 2012, 02:48:36 am » |
Normalement les paramètres A, B, C sont dans les docs constructeur.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 35
|
 |
« Reply #2 on: November 12, 2012, 03:13:39 am » |
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.
|
|
|
|
|
Logged
|
Débutant mais acharné!!
|
|
|
|
Ales
Offline
Edison Member
Karma: 7
Posts: 1657
Do or DIY
|
 |
« Reply #3 on: November 12, 2012, 04:00:58 am » |
Sinon bon, excel courbe de tendance ... Et voila : y = 0.0572x2 - 5.8363x + 215.99 R² = 0.9994
|
|
|
|
|
Logged
|
|
|
|
|
France S-O ou exil en IDF
Offline
Edison Member
Karma: 12
Posts: 1049
|
 |
« Reply #4 on: November 12, 2012, 04:34:04 am » |
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.
|
|
|
|
|
Logged
|
Aides toi et la communauté t'aidera
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 35
|
 |
« Reply #5 on: November 12, 2012, 04:54:09 am » |
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. courbe de tendance ... Et voila : y = 0.0572x2 - 5.8363x + 215.99 R² = 0.9994 C'est quoi? Comment l'utiliser? 
|
|
|
|
|
Logged
|
Débutant mais acharné!!
|
|
|
|
France
Offline
God Member
Karma: 2
Posts: 905
|
 |
« Reply #6 on: November 12, 2012, 05:07:48 am » |
Bonjour 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
|
|
|
|
« Last Edit: November 12, 2012, 05:18:07 am by al1fch »
|
Logged
|
|
|
|
|
France S-O ou exil en IDF
Offline
Edison Member
Karma: 12
Posts: 1049
|
 |
« Reply #7 on: November 12, 2012, 05:29:59 am » |
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.
|
|
|
|
|
Logged
|
Aides toi et la communauté t'aidera
|
|
|
|
France
Offline
God Member
Karma: 2
Posts: 905
|
 |
« Reply #8 on: November 12, 2012, 06:03:38 am » |
|
|
|
|
« Last Edit: November 12, 2012, 06:05:09 am by al1fch »
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 35
|
 |
« Reply #9 on: November 12, 2012, 08:40:58 am » |
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 !! 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);
|
|
|
|
|
Logged
|
Débutant mais acharné!!
|
|
|
|
France
Offline
God Member
Karma: 2
Posts: 905
|
 |
« Reply #10 on: November 12, 2012, 09:53:30 am » |
Pourquoi 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 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
|
|
|
|
« Last Edit: November 12, 2012, 10:09:17 am by al1fch »
|
Logged
|
|
|
|
|
France
Offline
Edison Member
Karma: 12
Posts: 1800
There is an Arduino for that
|
 |
« Reply #11 on: November 12, 2012, 10:53:28 am » |
Et puis il y a de fortes chances que ta formule retourne la température en degrés Kelvin.
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Geneva
Offline
Faraday Member
Karma: 22
Posts: 2878
Yoplait... le pt'it suisse
|
 |
« Reply #12 on: November 12, 2012, 12:53:12 pm » |
Il faut introduire cette conversion :
°C = (°F - 32) / 1.8
Et voir si les résultats retournés sont correctes.
|
|
|
|
|
Logged
|
MacBook intel core 2 duo os X snow Leopard 10.6 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
Offline
Edison Member
Karma: 6
Posts: 2415
|
 |
« Reply #13 on: November 12, 2012, 01:13:10 pm » |
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
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Geneva
Offline
Faraday Member
Karma: 22
Posts: 2878
Yoplait... le pt'it suisse
|
 |
« Reply #14 on: November 12, 2012, 01:17:05 pm » |
Arfff... un peu trop pressé de répondre 
|
|
|
|
|
Logged
|
MacBook intel core 2 duo os X snow Leopard 10.6 eMac PPc G4 os X Leopard 10.5 powerbook G4 os X Leopard 10.5 imac PPC G3 os X Panther 10.3.9 Arduino Diecimila Arduino Mega Arduino Standalone Arduino 1307.04 
|
|
|
|
|