Temperature sensors for an Arduino sous-vide project

I'm creating a PID controller for sous-vide, like this one, and am trying to decide which temperature sensor to get.

Priorities:

• Cost: < £25 delivered in the UK
• Accuracy: +/- 0.5C
• Range: 0 - 100C
• Output: something that can be read by an Arduino with minimal additional circuitry (eg 0-5VDC, a resistance that is easily measured, or digital output such as OneWire etc)
• Physical: waterproof, food safe (ideally), and with a lead at least a meter long - ideally not too much work to create this form factor (I don't have a workshop)
• Failure mode: would be ideal if a failure caused over-temperature reading rather then under-temperature

Happy to compromise on any of the above if needed, but this is my ideal. Also open to suggestions for what else I should compromise on. I'd be particularly interested in thoughts regarding sensors such as a k-type, a pt100, a TMP36 chip, and a "standard" 10K thermistor (though if these names aren't specific enough, please let me know what I should be looking for instead).

-
The 0.5°C accuracy is senseless and only will make your life harder. 1°C is more than enough. And even that you can't obtain with an NTC thermistor without spending a painful day calibrating it. – stevenvh May 28 '12 at 14:56
It looks like the application actually requires highest possible absolute accuracy. Seems that the point of controlled cooking is operating precisely in very narrow range of near boiling temperatures. – Rocket Surgeon May 28 '12 at 15:09
Rocketmagnet and rocketsurgeon having a conversation, that was not confusing to the eye at all. – Kortuk May 28 '12 at 15:41
@RichardRussell This Gizmag article is liable to be of interest - July 2012. – Russell McMahon Jul 19 '12 at 14:10
Here's a nice sous vide implementation that may give you some ideas. flashingleds.net/sousvader/sousvader.html – Russell McMahon Jan 23 at 16:52
show 7 more comments

5 Answers

First, agreeing with others: going for 1.0C accuracy will make your life a lot easier.

You seem to be set on analog sensors, but I'd suggest one with a digital interface. Analog sensors are either (used) radiometric (deliver a tempearture-dependent percentage of Vcc), which gives a non-linear response, which you will have to convert. The other type (LM35 etc) are absolute, which requires you to A/D against a reference voltage that must be (much) more accuirate than your desired accuracy. Unless you want to measure something that a digital-interface sensor can't (like >> 100C) this seems a lot of unneeded hassle.

Edit: let's try an LM35. 10mV/C, even assuming the LM35 itself introduces no error, a typical reference (LM431 etc) is 1% accurate, which introduces a 1% error in the temperature reading! A typical microcontroller A/D is 10 bits, let's assume full scale is a 2.5V reference (check whether your uC allows this!). 1 bit A/D error (let's be optimistic!, better check your uC datasheet) is 2.5mV = 1/4C error. So even without the sensor itself we have a +/ 1.25 C error (at best..).

Get a digital interface sensor, for instance the good old DS1820 / 18S20 / 18B20, all TO92. Or one of the I2C or SPI sensors that Microchip makes in TO220. If you are heating in a tray or something you could connect the tab to the tray.

-
 I don't mind too much if it's analog or digital - I wasn't aware that digital devices existed. I'll edit the question to clarify. Having looked at the DS18S20 specs, it looks suitable, I'd just need to embed it in some sort of probe to submerge in the water - a non-trivial challenge for someone who's never done that :-) – Richard Russell May 29 '12 at 15:43 Based on the information given in this answer and various others, and further searching, I found a Waterproof DS18B20 probe at Alpha-Crucis (EU). It's also available at Adafruit in the US. It meets all my requirements, and has an ideal form factor. – Richard Russell Jun 15 '12 at 12:12

Get a precision temperature sensor IC, like the LM35CAZ.

You power it with a good 5v, and the output is a simple voltage which is a linear function of temperature. They have a pretty good accuracy of ±1⁄4˚C at room temperature.

Added:

Several people have talked about "Accuracy over temperature range" for this sensor being ±1ºC. This is the wrong range to talk about. "Accuracy at cooking temperature" is the right range to talk about. At about 60ºC accuracy is ±0.7, and probably better than that. The 'typical' line varies by about 0.1ºC over your cooking range.

You probably only need one or two calibration points to get this sensor easily accurate enough for your needs. But, of course, that requires an accurate thermometer to calibrate it against. For that, you have a couple of options:

Option 1: You can use water. The temperature of water that's undergoing freezing is 0ºC. So stick it in a small cup of water in the freezer, and watch the output voltage carefully. It will fall and fall until the water begins to freeze. At this point, the temperature will stop falling and stay flat for a little while. Once freezing is complete, the temperature will begin to fall again. Take note of the voltage in the flat region to use as your 0ºC calibration point.

Do the same for boiling water. It's best to do this at sea level. If you're not at sea level, then check what the water boiling temperature is at your altitude.

Using 0ºC and 100ºC isn't as good as using, say 50ºC and 80ºC, but it's a lot easier. If you do have a very accurate thermometer available, then you should use calibration points closer to your cooking temperature.

Option 2: Use methyl alcohol. (Thanks stevenvh) This boils at 64.7ºC. This is so close to your cooking temperature, that you should only need one calibration point to get a very accurate cooking temperature. Obviously be careful not to intoxicate or blow your self up with the fumes. Don't heat the alcohol over a naked flame!

Added - Amplification

Since you're working in a narrow temperature range, and you need good control accuracy, it's probably also worth amplifying the output of the sensor. This will give greater ADC resolution at the Arduino, which will translate into better stability of the PID control algorithm. See the question Analog voltage level conversion (level shift) which discusses amplifying and level shifting an analog voltage.

Assuming you're working in the 40ºC - 100ºC range (0.4v - 1.0v). You'll want to subtract 0.4v from the signal, giving 0.0v - 0.6v, and amplify the result with a gain of 8, giving 0.0v - 4.8v. This will give excellent resolution.

-
Accuracy over temperature range is 1°C. 0.25°C is sales talk. – stevenvh May 28 '12 at 15:44
@stevenvh - "Accuracy over temperature" is the wrong range to talk about. "Accuracy at cooking temperature" is the right range to talk about. – Rocketmagnet May 28 '12 at 16:12
0.5°C is specified at 25°C. Will cooking temperature be closer to that, or closer to temperature range? I think, the latter. – stevenvh May 28 '12 at 16:15
You could calibrate at the boiling point of methyl alcohol instead of water: 64.7°C. – stevenvh May 28 '12 at 16:57
Amplifying the useful range to cover the sensor range will reduce quantization noise, but you should also note that it now adds its own set of error. Even if you calibrate at a single point, you now have to consider amplifier input offset voltage drift over temperature of the device, not the stuff being cooked. I'm not saying amplifying is bad, just that if you're going to recommend it you should also state the problems that come with it. – Olin Lathrop May 28 '12 at 23:23
show 11 more comments

It sounds like you are asking about the probe only. Apparently you want something you can put in direct contact with the food. A PID controller includes a lot than just the feedback sensor, but it sounds like you are not asking about that. If any of this is incorrect, then you should update your question. I also have no idea what a "Sous Vide" thing is. Any information relevant to it should be in your question. Links are only for background material.

As Steven mentioned, 1/2 degC is very ambitious and unnecessary when you're talking about food.

The easiest temperature sensor will be a thermistor. They can handle the range and otherwise need only a load resistor. The result will also be ratiometric to your supply, so any supply variations cancel out. Detecting failure is easy in firmware since readings very close to the top or bottom of the range indicate unrealistic temperatures. If you get anything outside some valid temperature range, then you assume a hardware failure and enter whatever you think your safe mode is. This is really a firmware issue, not a hardware one with a thermistor and the right load resistor.

As for making it food-safe, enclosing the probe in glass should be good. How about epoxying the thermistor to the bottom of a small testtube, which then becomes the probe? The top can be sealed with hot glue or something. It needs to be water tight but food shouldn't be there. Only two insulated wires should emerge from the top of the tube. Glass is fairly good at transmitting heat. The time constant of the probe should still be well less than the time constant from heater power to the food changing temperature.

Thermistors aren't very accurate unless you pay a lot of money. For a one-off hobby project, I'd get whatever thermistor that can be had in the right range and calibrate manually. Calibrate at a few know temperatures determined from a reliable known thermometer, then have the firmware interpolate in between. For extra credit, you can even look up the nominal equation for the thermistor, fit your measured points to it as best as possible, then derive the continuous function from that. You can populate a fixed table in the firmware with many segments from the calibrated function so that linear interpolation between segments will be quite good.

Again, 1/2 degC is asking for too much, but you don't really need that much anyway. A thermistor with maybe 4 calibration points, equation fitting, and then interpolation should be fine to solve the actual problem.

-
 Calibrate to 1/2 degree using a reliable, known thermometer, isn't that moving the problem? The reference thermometer should be at least as precise, preferably more precise, than that 1/2 degree. – Federico Russo May 28 '12 at 15:55 @Federico: It is moving the problem of accuracy, but the reference thermometer can be any technology, doesn't need to be food safe, and doesn't need to be machine readable. A decent mercury (or other liquid) thermometer meant for that range should be available without too much trouble. – Olin Lathrop May 28 '12 at 17:55 I have a decent probe thermometer that is calibrated that I can use to calibrate this one. I don't need it directly in contact with the food, but as it will be submerged in liquid in a rice cooker that I may also use to cook rice, I don't want it to leak something toxic... A "Sous Vide" thing is a method of cooking with precise temperatures in vacuum packed bags in a water bath. I am building a PID controller from an Arduino, and in this case, I just need to decide on the temperature sensor. – Richard Russell May 29 '12 at 15:47 Thanks for the tips - much appreciated. – Richard Russell May 29 '12 at 15:48

Using the LM335Z, you can calibrate the offset and gain error for any given sensor with 2 test readings at 0'C 100'C with ice and boiling water.

Then get a verification reading at mid range say 50'C.

You can make a test jig and calibrate one sensor as your silver standar against another the gold standard thermometer. You then save the errors expected-actual and calculate a linear progression or gain and offset number to save in EEPROM so they become a calibrated set. If you get a batch, you may find they all have the same offset and gain error which you can correct in software to display the corrected reading.

With 0.1'C standards you can expect 0.2'deg error and use any display you choose to guarantee that 0.5'C error for your critical setpoints.

See Fig 3

http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00000459.pdf

I would seal the sensor with a thin coating of food grade epoxy to protect the device from moisture leakage and use twisted pair or two twisted pair flex wires using 2 as a shield and then use "ferrite CM chokes" to absorb RF interference.

You then need an ADC which is guaranteed accurate to +/- 0.5 bit or perhaps 1 in 256 levels to read 0.5/100% accurate. This is not guaranteed in most Arduino's so you need to use a hardware DAC to test this in Output minus Input on a 2 channel scope and select AC couple for CH1 and CH 2 and then display XY mode CH1 vs Ch2 to get a center dot that traverses a maximum of +/- 1 bit. Any Vref noise in your ADC will cause skipped quantization levels or hysteresis during transitions like 01111 to 10000 and crosstalk from digital ground to input analog ground feed-thru will fail on monotonicity.

Check the TI site for literature on ADC errors.

@Richard Russell << I appreciate the need for 0.5 deg C control in organic cooking styles at low temperatures where living organism begin to die quickly above the Pasteur temperature when the bacteria is killed.

If it were me I would calibrate for 0.1 deg accuracy using my offset gain calibration temperatures between 45 and 65 deg C after it is firmly attached to the well insulated Pot. Then you can out perform any other commercial cooker on the market... assuming it is well insulated in high R value dielectric.

Then for appearance so you can charge $500, wrap it in precision American SS that like the "Spirit of St Louis" is deeply scratched and highly polished. ;) Personally I would have the SS exterior acid etched by professionals who do this every day with an artwork of historical cooking significance for$50 and then charge extra for custom artwork with personal logo and company name. Just ask if you need a good ref.

Thank you for letting me assist you with your goal.

-
 Cheers - that's really helpful. Must say that I have no idea what "American SS" is, but it sounds nice :-) – Richard Russell May 29 '12 at 16:49 SS = Stainless Steel – dext0rb May 29 '12 at 17:13 Surely, when you calibrate the sensor, you're doing so after the ADC. Therefore you are calibrating out the ADC error too? – Rocketmagnet May 29 '12 at 22:47

Based on the information given in other answers, and further searching, I found a Waterproof DS18B20 probe at Alpha-Crucis (EU). It's also available at Adafruit in the US.

It meets all my requirements, and has an ideal form factor.

-
this is just a link to a product and no information as to why. There are users whom put a lot of work into answers to help teach you and the accept is normally a reward for such a task especially if they did the work of guiding you here. – Kortuk Jun 5 '12 at 2:35
OK, I'll accept a different answer. Where should I put my own conclusion? – Richard Russell Jun 15 '12 at 12:12
I was saying two things, 1)If someone's answer is what actually led you here they should probably get the accept. 2) Writing answers is more than acceptable but can you give us more information then just a link. Right now I know nothing more then that this device is carried a few places and is waterproof. – Kortuk Jun 15 '12 at 13:16