lape
  LAPE e-log  ELOG logo
Message ID: 110     Entry time: Tue Aug 27 11:13:30 2013
Author: Saullo 
Type: Routine 
Category: Hardware 
Subject: Calibracao PT100 

Apesar de ainda nao saber qual o modelo do PT100 usado eu consegui fazer a calibracao dele...

 

Para a calibracao eu usei tres temperaturas diferentes. Duas foram medidas no ambiente, com e sem o ar-condicionado ligado no máximo, os pontos obtidos foram:

 

Tv = Temperatura Verdadeira (medida com o termômetro do Mateus) = (21.7 +- 0.1) *C e (20.6 +- 0.1) *C

Tm = Temperatura medida PT100 = (45.00 +- 1.00) *C e (43.0 +- 1.00) *C

Vs = Voltagem nos terminais do PT100 = (2.2 +- 0.1) V e (2.19 +- 0.1) V

Rs = Resistencia PT100 = (117.80 +- 0.1) Ohm  e (116.87 +- 0.1) Ohm

 

A calibracao foi feita da seguinte forma:

 

Tv = Tm*A + B

21.7 = 45*A + B

20.6 = 43*A + B

---------------------------

Resolvendo o sistema achamos: A = 1.1/2

                                                              B= 21.7 - 1.1/2 * 45 = -3.05

 

Após feito isso eu peguei um copo de gelo e pus o termômetro do Mateus dentro dele e o gelo estava a (13.1 +- 0.1) *C o PT100 mediu a temperatura do gelo como (13.60 +- 1.00)*C

 

O código para o Arduíno com a calibracao esta aneado.

 

Uma boa fonte: http://openenergymonitor.org/emon/node/75

Attachment 1: pt100_arduino.ino  1 kB  | Hide | Hide all

// Programa para ler temperatura do PT100

float volt = 5.0;
float R1 = 150;

float calcula_temp(float Rpt){ // valido apenas para temperaturas entre (0 e 850)C
  
  float R0 = 100; //resistencia a zero graus
  float A = +3.9083E-03;
  float B = -5.775E-07;
  float C = -4.183E-12;
  
  //float Tp = (- A + pow((A*A-4*B),0.5))/(2*A);
  //float Tn = (- A - pow((A*A-4*B),0.5))/(2*A);
  float T = (Rpt - R0)/(A*R0); // como B e C sao pequenos, boa aproximacao ela ser linear...
  return (T);
  
}

float calibracao (float T_medido){
  
  float T_verdadeiro = 10*T_medido/12 + (24 - 450/12);
 
  return (T_verdadeiro); 
  
  
}

void setup() {
 Serial.begin(4800);
 
 Serial.print("Voltagem_PT100(V)");
 Serial.print("\t");
 Serial.print("Resistencia_PT100(Ohm)");
 Serial.print("\t");     
 Serial.print("Temperatura_medido(C)");
 Serial.print("\t");     
 Serial.println("Temperatura_calibrado(C)");

}

void loop() {
  
     float leitura_porta1 = 0;
     float leitura_porta2 = 0;
  
     //leitura_porta1 = analogRead(A0);
     leitura_porta2 = analogRead(A1);
     /*Serial.print(leitura_porta1);   
     Serial.print("\t");
     Serial.println(leitura_porta2);   
*/

     float voltagem1 = 0;
     float voltagem2 = 0;
     
     //voltagem1 = leitura_porta1 * (volt / 1024.0);
     voltagem2 = leitura_porta2 * (volt / 1024.0);
     
     //float Rpt1 = voltagem2 * R1 / voltagem1  ;
     //float Rpt = 150.0*5.0/voltagem1 - 150;
     float Rpt = voltagem2*R1/(volt - voltagem2);
     
     float T_medido = calcula_temp(Rpt);
     float T_verdadeiro = calibracao(T_medido);
     
  //   Serial.print(voltagem1);
   //  Serial.print("\t");
     Serial.print(voltagem2);
     Serial.print("\t");
     Serial.print(Rpt);
     Serial.print("\t");     
     Serial.print(T_medido);
     Serial.print("\t");     
     Serial.println(T_verdadeiro);
     
      delay(1000);
      

  
}
ELOG V2.9.2-2455