Discussion to be added.
// NTC_Thermistor (Arduino)
//
// Illustrates measuring temperature using an NTC thermistor in
// a voltage divider configuration.
//
//
// copyright, Peter H. Anderson, Baltimore, MD, May, '07
#include <math.h>
int measTemperature(int pin);
float calcRthermistor(int ADVal);
float calcTc(float Rtherm);
float square(float x);
float cube(float x);
void setup()
{
Serial.begin(9600);
delay(100);
}
void loop()
{
int Tc_100, Whole, Fract;
Tc_100 = measTemperature(5);
Whole = Tc_100 / 100;
Fract = Tc_100 % 100;
Serial.print(Whole);
Serial.print(".");
if (Fract < 10)
{
Serial.print("0");
}
Serial.print(Fract);
Serial.print("\n");
delay(5000);
}
int measTemperature(int pin)
{
int ADVal;
float RThermistor, Tc;
ADVal = analogRead(pin);
RThermistor = calcRthermistor(ADVal);
Tc = calcTc(RThermistor);
return((int) (Tc * 100.0));
}
float calcRthermistor(int ADVal)
{
float Rtherm;
if (ADVal <=0) // avoid trouble conditions
{
ADVal = 10;
}
Rtherm = 10.0e3 / (1024.0 /((float) ADVal) - 1.0);
return(Rtherm);
}
float calcTc(float RTherm)
{
const float A_const = 3.354016e-3;
const float B_const = 2.569107e-4;
const float C_const = 2.626311e-6;
const float D_const = 0.675278e-7;
float x, TKelvin, Tc;
x = log(RTherm / 10.0e3);
TKelvin = 1.0 / (A_const + B_const * x
+ C_const * square(x) + D_const * cube(x));
Tc = TKelvin - 273.15;
return(Tc);
}
float square(float x)
{
return(x * x);
}
float cube(float x)
{
return(square(x) * x);
}