Demo of Thermistor to Temperature conversion using Steinhart-Hart equation on the FRDM-K64F baord
Dependencies: mbed
main.cpp
- Committer:
- unix_guru
- Date:
- 2016-01-22
- Revision:
- 0:eaea12966d34
File content as of revision 0:eaea12966d34:
/* FRDM-Thermistor-Demo This is a Thermistor to Temerature conversion demo for the @NXP (@freescale) FRDM-K64F demo board Much thanks to @Adafruit for this tutorial: https://learn.adafruit.com/thermistor/using-a-thermistor The 100K Thermistor is configured with a 4.7k series resistor tied to vcc (3.3v) like this: +3.3v | \ / 4.7k series resistor \ / | .-----------O To Anlog pin on FRDM board | \ / Thermistor 100k Nominal \ / | --- GND */ #include "mbed.h" #define THERMISTORNOMINAL 100000 // 100k // temp. for nominal resistance (almost always 25 C) #define TEMPERATURENOMINAL 25 // The beta coefficient of the thermistor (usually 3000-4000) #define BCOEFFICIENT 3950 // the value of the 'other' resistor #define SERIESRESISTOR 4700 AnalogIn Thermistor(A3); Serial pc(USBTX, USBRX); // This is the workhorse routine that calculates the temperature // using the Steinhart-Hart equation for thermistors // https://en.wikipedia.org/wiki/Steinhart%E2%80%93Hart_equation float get_temperature() { float temperature, resistance; float steinhart; int a; a = Thermistor.read_u16(); // Read 16bit Analog value pc.printf("Raw Analog Value for Thermistor = %d\r\n",a); /* Calculate the resistance of the thermistor from analog votage read. */ resistance = (float) SERIESRESISTOR / ((65536.0 / a) - 1); pc.printf("Resistance for Thermistor = %f\r\n",resistance); steinhart = resistance / THERMISTORNOMINAL; // (R/Ro) steinhart = log(steinhart); // ln(R/Ro) steinhart /= BCOEFFICIENT; // 1/B * ln(R/Ro) steinhart += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To) steinhart = 1.0 / steinhart; // Invert temperature = steinhart - 273.15; // convert to C return temperature; } int main() { pc.baud(115200); pc.printf("\r\nThermistor Test - Build " __DATE__ " " __TIME__ "\r\n"); while(1) { pc.printf("Temperature %f *C\r\n",get_temperature()); wait(.5); } }