float t = 0.0;
float ta = -200.0; // Límite inferior de temperatura
float tb = 850.0; // Límite superior de temperatura
float R;
void setup() {
Serial.begin(115200);
Serial.println("Start");
R = Rm();
}
void loop() {
float Rv = Rc(t); // |-------------|--------|----------------------|
//float R = Rm(); // ta t ¿tm? tb
// Rv Rm=R
Serial.println("t = " + String(t) + " => " + Rv + " RTD = " + String(R));
if (abs(R-Rv) < 0.1) { // Detecta final de la conversión
Serial.print ("RTD(");
Serial.print (t);
Serial.print ("ºC) = ");
ta = -200.0;
tb = 850.0;
Serial.print (R);
Serial.println (" Ohms");
float R = Rm();
}
if (Rv >= R) {
tb = t; // Reduce el extremo superior
t = (ta+tb)/2.0; // Calcula temperatura promedio entre los extremos
}
if (Rv < R) {
ta = t; // Aumenta el extremo inferior
t = (ta+tb)/2.0; // Calcula temperatura promedio entre los extremos
}
}
float Rc(float t ) {
const float R0 = 100.0; // Valor de la resistencia nominal de la Pt100
const float a = 3.90830E-03;
const float b = -5.77500E-07;
const float c = -4.18301E-12;
float RT;
if (t > 0.0){ // Utiliza la ecuación de Callendar
RT = R0*(1 + a*t + b*t*t);
}
if (t <= 0.0){ // Utiliza la ecuación de Callendar Van Dusen
// RT = R0*(1+ a*t + b*t*t + c*(t-100)*t*t*t); // Ecuación alternativa
RT = R0*(1 + t*(a + t*b + t*c*(1 - 100*t)));
}
return RT;
}
float Rm() {
float N = analogRead(A0); // Lectura del ADC
float v = N/1024.0*5.0; // Modelo inverso del ADC
float v1 = v/5.0*0.40; // Factor escala del amplificador
float rr = v1/0.001; // Conversión de tensión a resistencia para fuente de 1 mA
Serial.print("N = " + String(N) + " v = " + String(v)+ " v1 = " + String(v1) + " Rm = " + String(rr));
Serial.println();
return rr;
}