Tengo la siguiente hoja de datos para un termisistor: enlace
Estoy tratando de usar la fórmula (que se encuentra aquí http: // iwantmyreal.name/blog/2012/09/23/measuring-the-temperature-with-an-arduino-and-a-thermistor/): $$ 1 / T = 1 / T_0 + 1 / B * ln (R / R_0) $$ No estoy seguro de estar usando los valores correctos, entiendo que los valores proporcionados en la hoja de datos son los siguientes: $$ R_0 = 20,000 ohm, $$ $$ T_0 = 25 C, $$ $$ Beta = 4300 $ $ ¿Puede alguien confirmar que esto es correcto?
Estoy tratando de obtener una lectura de temperatura de ese sensor usando un microcontrolador Arduino UNO usando lo siguiente que se encuentra en enlace en la parte inferior donde dice el ejemplo # 2 usando números en lugar de la definición de episco k164 ... (sustituyendo con los valores anteriores)
Los resultados son ~ 41.96 grados F, y la sala está entre 75-80 grados F, lo que significa que las lecturas de temperatura están muy alejadas, no entiendo por qué, a menos que obtenga los valores incorrectos de la hoja de datos. También tengo dos de estos sensores y ambos dan aproximadamente el mismo valor.
Código actualmente en uso:
// Code obtained from http://playground.arduino.cc//ComponentLib/Thermistor2
#include <math.h>
// enumarating 3 major temperature scales
enum {
T_KELVIN=0,
T_CELSIUS,
T_FAHRENHEIT
};
// manufacturer data for episco k164 10k thermistor
// simply delete this if you don't need it
// or use this idea to define your own thermistors
#define EPISCO_K164_10k 4300.0f,298.15f,10000.0f // B,T0,R0
// Temperature function outputs float , the actual
// temperature
// Temperature function inputs
// 1.AnalogInputNumber - analog input to read from
// 2.OuputUnit - output in celsius, kelvin or fahrenheit
// 3.Thermistor B parameter - found in datasheet
// 4.Manufacturer T0 parameter - found in datasheet (kelvin)
// 5. Manufacturer R0 parameter - found in datasheet (ohms)
// 6. Your balance resistor resistance in ohms
float Temperature(int AnalogInputNumber,int OutputUnit,float B,float T0,float R0,float R_Balance)
{
float R,T;
R=(1024.0f*R_Balance/float(analogRead(AnalogInputNumber)))-R_Balance;
T=1.0f/(1.0f/T0+(1.0f/B)*log(R/R0));
switch(OutputUnit) {
case T_CELSIUS :
T-=273.15f;
break;
case T_FAHRENHEIT :
T=9.0f*(T-273.15f)/5.0f+32.0f;
break;
default:
break;
};
return T;
}
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("*************************");
Serial.println("10k Balance");
Serial.println(Temperature(0,T_FAHRENHEIT,4300.0f,298.15f,20000.0f,9770.0f));
//Serial.println(Temperature(1,T_FAHRENHEIT,4300.0f,298.15f,20000.0f,9770.0f));
Serial.println("*************************");
delay(500);
}