void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
}
float Vr=3.3; //Tensión de referencia del ADC
float R=10000.0; //Resistencia del divisor de tensión (linealizado a 22ºC)
float R0=10000.0; //Resistencia a 25ºC del termistor
float Beta=4000.0; //Valor de la constante Beta
float R1=82000.0; //Valor de la resistencia R1 en circuito comparador
float R2=6800.0; //Valor de la resistencia R2 en circuito comparador
float R3=8200.0; //Valor de la resistencia R3 en circuito comparador
bool Aparato; //Bool que indica el encendido o apagado de un termostato. Suponemos que este
//controla un radiador, por lo que cuando se supere el PDS, el Aparato se apaga
void loop() {
// put your main code here, to run repeatedly:
//NTC
float N = analogRead(A0); //Analógica asociada al NTC
//N = 512+random(0,20); //Termistor digital (configuración en casa) (Valor intermedio para 25ºC)
float V = N/1024.0*Vr; //Conversión digital 10 bits a analógico. Esta tensión corresponde
//con la entrada negativa del amplificador operacional
V = Vr-V; //Adaptamos la tensión al circuito que teníamos nosotros
float RT = V*R/(Vr-V); //Modelo inverso del divisor de tensión
float t = 1/(1/298.15+1/Beta*log(RT/R0))-273.15; //Modelo inverso: Cálculo de la temperatura
float V0 = Vr; //Valor de la tensión de salida de un amplificador en PDS
float VPDS = ((Vr/R3)+(V0/R1))/((1.0/R1)+(1.0/R2)+(1.0/R3)); //Entrada positiva del amplificador operacional en PDS
float VPDI = (Vr/R3)/((1.0/R1)+(1.0/R2)+(1.0/R3)); //Entrada positiva del amplificador operacional en PDI
if(V>=VPDS){
Aparato = 0; //Bool que indica el encendido o apagado de un termostato. Suponemos que este
//controla un radiador, por lo que cuando se supere el PDS, el Aparato se apaga
digitalWrite(LED_BUILTIN, HIGH); // Led indicador del sistema que muestra el apagado del termostato
//Dicho LED estará activo a nivel bajo
}
if(V<=VPDI){
Aparato = 1; //Bool que indica el encendido o apagado de un termostato. Suponemos que este
//controla un radiador, por lo que cuando esté por debajo del PDI, se enciende el Aparato
digitalWrite(LED_BUILTIN, LOW); // Led indicador del sistema que muestra el encendido del termostato
//Dicho LED estará activo a nivel bajo
}
Serial.println(String(N) + " " + String(VPDI)+ " " +String(VPDS)+ " "
+String(V)+ " "+ String(RT)+ " " +String(t) + " " + String(Aparato) + " ");
}