I went looking for a way to measure temperatures for cooking food (specifically smoking meats in a charcoal fired smoker) using an Arduino and couldn't find any simple & cheap plug and play solutions. Long story short, I purchased three food-grade NTC thermistors for $8/each from Thermoworks: http://www.thermoworks.com/products/low_cost/oven_temp_timer.html (part #TW362XX) and then did my best to measure their resistance across a wide range of temperatures (approx 3.6-232.2C, or about 38-450F). Turned out to be more work then I figured and making a number of stupid mistakes along the way didn't help, but I now have what appears to be fairly well calibrated probes by using the Steinhart–Hart equation tools available from http://thermistor.sf.net and the Thermistor4 Arduino library: Arduino Playground - HomePage
Long story short, here are the Steinhart–Hart coefficients for these thermistors:
a = 1.211111230054231e-04
a = 3.762691542377820e-04
a = -1.735716635603824e-05
a = 6.538964941154940e-07
Maximal error=6.82365 at temperature=232.2
The raw data is available here: http://synfin.net/arduino/Thermoworks-Probes.xls if anyone would like to check my work and/or assumptions.
Anyways, hopefully this helps someone else with their cooking related Arduino project!
In context of using your data with arduino sketches is there value in having so many significant digits in the constants listed? From the Arduino reference for float variables:
Floats have only 6-7 decimal digits of precision. That means the total number of digits, not the number to the right of the decimal point. Unlike other platforms, where you can get more precision by using a double (e.g. up to 15 digits), on the Arduino, double is the same size as float.
Correct. I don't believe the Arduino will take advantage of the extra precision. I wanted to provide the values as reported by the 'coeff' tool since other platforms may be able to utilize the extra precision and specifying them does no harm since the avr compiler will just throw away the extra numbers.
I didn't think about taking a series of measurements and averaging them out. When I get done with the thermocouples I'll try that. Did you use the 5v or the 3.3v on the arduino for your thermistor?
Honestly the averaging out just helps setup an "average" thermistor. For the most accurate results you'd have to measure each thermistor to build it's curve since there will be per-sample variations. The Thermistor4 lib also allows you to use a "fudge factor"- basically setup one thermistor and then take a measurement of your 2nd, 3rd, etc and tell the library how far off it is to your reference in degrees Kelvin which for most people should be good enough.
Thermistors should be powered by 5V on the Arduino Uno (what I have) since the analog read covers the 0-5V range and if you used 3.3V you'd miss out on a fair bit of accuracy due to compression. To get the most accurate results, you need to actually measure your 5V power and divider resistors and plug in those values into the Thermistor4 library. For my project, I may try using a MCP3204 DAC which is 12bit vs. the 10bit Arduino. Not sure if it will help really help, but for $5 I'm willing to try. That said I know my Maverick transmitter uses 2xAAA batteries, so not sure if they're using 3.3V or doing an up convert to 5V. Guess it would be easy to measure at the probe plug to find out.
Another thing I just remembered is when you switch from one thermistor to the next in code wait a few ms for the A-D chip to settle down then take a measurement.