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); 
    }
}