Conceptos tericos
Ahora lo nico que nos falta es un poco de teora para obtener el valor de la temperatura.
Atendiendo a las ecuaciones que describen el comportamiento de las NTC
Ecuacin de las NTC
Parametro B
y con la ecuacin que describe un divisor de tensin
Salida de un divisor de tensin
Podemos obtener el valor de la temperatura, mediante la ecuacin de Steinhart-Hart
Ecuacin de la temperatura
Parmetro Rinf
Cdigo Arduino
Por ltimo, y no por ello menos importante, nos faltara por desarrollar un pequeo programa para
nuestroArduino para implementar todas estas ecuaciones.
Este programa en una primera instancia, calcular los coeficientes necesarios para los valores que
hayamos incluido en la cabecera, como las temperaturas y resistencias medidas para la calibracin
as como el valor de la resistencia auxiliar utilizada en el divisor de tensin entre otros.
La salida sera el valor de la temperatura en grados centgrados o celsius [C] y en grados Kelvin [K]
a travs del puerto serie.
#include <stdio.h>
#include <math.h>
int analogPin=0; // Which pin will be the input of the Voltage-Divider
float Vin=5.0; // [V] Supply voltage in the Voltage-Divider
float Raux=10000; // [ohm] Secondary resistor in the Voltage-Divider
float R0=10000; // [ohm] NTC nominal value at 25C
float T0=293.15; // [K] (25C)
float Vout=0.0; // [V] Voltage given by the Voltage-Divider
float Rout=0.0; // [ohm] Current NTC resistance
float T1=273; // [K] Temperature at first testing point
float T2=373; // [K] Temperature at second testing point
float RT1=19750; // [ohms] Resistance at 273K (0C)
float RT2=2150; // [ohms] Resistance at 373K (100C)
float beta=0.0; // [K] Beta parameter
float Rinf=0.0; // [ohm] Rinf parameter
float TempK=0.0; // [K] Temperature output in Kelvin
float TempC=0.0; // [C] Temperature output in Celsius
void setup() {
//Serial port configuration
[Link](9600);
//Input pin configuration
pinMode(analogPin, INPUT);
//Global parameters calculation
beta=(log(RT1/RT2))/((1/T1)-(1/T2));
Rinf=R0*exp(-beta/T0);
}
void loop()
{
//Current NTC resistance value calculation (through Vout)
Vout=Vin*((float)(analogRead(analogPin))/1024.0);
Rout=(Raux*Vout/(Vin-Vout));
//Temperature calculation
TempK=(beta/log(Rout/Rinf));
TempC=TempK-273.15;
//Data population
[Link](TempC);
[Link](" C (");
[Link](TempK);
[Link](" K)");
delay(1000);
}