//-----------------------------------------------------------------------------
// Sketch para medir la temperatura con un termistor NTC, un divisor de tensión
// utilizando una LookUp Table (LUT)
//-----------------------------------------------------------------------------
// Define una tabla de 4096 elementos de tipo float
const int N = 4096; // Tamaño máximo de la LUT
float LUT[N]; // LookUp Table
int i; // Variable índice para recorrer la tabla
float a; // Variable auxiliar con contenido de tabla
//------------------------------------------------------------------------------
// Datos NTC
const float R0 = 10000.0; // Resistencia nominal del termistor
const float Beta = 3950.0; // Beta del Termistor
const float R = 10000.0; // Datos R divisor de tensión
float Vref = 3.3; // Datos tensión divisor y referencia ADC
//-------------------------------------------------------------------------------
// Función que calcula la temperatura en función del valor N obtenido en el ADC
// para construir la LUT, utilizando el modelo Beta
float t(word N){
float v = N/4096.0*Vref;
float RT = R/(Vref/v -1.0);
float tm = 1/(1.0/Beta*log(RT/R0) + 1/298.15)-273.15;
return tm;
}
//-------------------------------------------------------------------------------
void setup() {
Serial.begin(9600);
// Rellena la tabla con los valores de la temperatura correspondientes
// al número recibido del ADC DIV NTC, utilizando el modelo Beta o Steinhart-Hart
Serial.println(("Rellenando LUT"));
for (i=0; i<N; i++){
LUT[i] = t(i);
Serial.print(".");
}
Serial.println("\nLUT completa");
}
//--------------------------------------------------------------------------------
void loop() {
int i = analogRead(15); // recoge el valor proporcionado por el ADC
a = LUT[i]; // obtiene el valor guardado en la LUT
Serial.println(a);
delay (1000);
}