My love of gadgets is, I think, already well-established on these pages. I love food just as well, so it was probably inevitable that I'd decide to take some food and Do Science to It. And takes pictures of myself doing it. And put up a blog post about it.

Say you want a steak cooked perfectly, edge to edge. That means bringing the internal temperature of the entire thing to exactly the right point. It's hard to do with a grill or a pan or a broiler, since those heat the outside more and the middle less, and you have to tightly control both time and temperature vs. the cut of meat.

The idea of sous-vide cooking is really simple: put the meat in an airtight, watertight vacuum bag. Plunge it into a water bath that's exactly the temperature you want. Leave it there for a few hours -- an hour plus or minus makes no difference. The devil, as usual, lies in the details -- after the jump.


This is Mad Science, and as such there are some easy (and in one case, non-obvious) ways to kill yourself. Here at SGS, safety is definitely one of our top ten priorities, so we kind of hope that if you actually do this, you'll read this section and boost your chances of survival.

The non-obvious risk is food safety, specifically botulism. The bacteria that cause botulism are killed at the temperatures we'll be using, but their spores are not, nor are the toxins they create destroyed. Assuming that you're starting with safe, cold meat: once you warm it up,  no part of the meat can spend more than four hours at any temperature under 55°C (131°F).

In other words, if you're cooking to 129°F, everybody had better be done eating it four hours (minus safety factor) of when it came out of the fridge. If your thermostat flakes out and the water bath drops under 55°C for you don't know how long, then you just made poison and it needs to go in the garbage. Do not rely upon the nasal appraisal; you cannot smell botulinum toxin.

Oh, and you're also mixing line voltage electricity, heating elements and water. So, you can also look forward to burns, electrocution and/or fires if you mess up.

The Dread Apparatus

The basic requirements aren't too complicated: Take a container of water, big enough to immerse some vacuum-bagged food. Heat it up to a selectable temperature well-short of boiling. Keep it heated to that temperature as precisely as reasonably possible. Move the water around.

For the container of water part, I used a simple polystyrene cooler of the sort used to ship frozen food. I happened to have a clean one around, and no other plans for it. It's a win for recycling, cheapness and hackery. It's also a win because it provides pretty good insulation, which means less power input required to hold a stable temperature.

To circulate the water, I got an air pump of the sort used for small aquaria, a length of silicone tubing and an air-stone. Most homebrew sous-vide setups use a water pump for circulation. I wanted to try an air-based design, since it was cheap and didn't involve water having to leave and re-enter the containment vessel.

Electric heat seemed an obvious choice. I bought a simple 500W immersion heater of the sort used to boil a single cup of water for tea. It was only a few dollars, plenty powerful for my needs, and runs on simple 110VAC.

The control system was the real trick. A common bang-bang (hysteresis) thermostat would bounce the temperature up and down too much, even assuming it could be made to measure it precisely enough in the first place. A PID controller (a proportional controller that looks at both the current temperature and the rate of change) would be needed.

When I started, I was planning on making my own AVR-based controller, which would have required quite a bit of work. A little searching on the web revealed purpose-built PID controller for $32.50: the JLD612 (see also: 250KB PDF manual).

The JLD612 controller supports a wide variety of temperature sensors, but only with a Pt-100 thermocouple would it support 0.1°F resolution. It turns out they're not terribly expensive, so that's what I chose.

To allow the controller to switch the 500W load, I needed some kind of switching device. A mechanical relay would work, but would wear out very quickly (and be quite noisy) when switched several times a second. A solid-state relay (really just a MOSFET-based switching circuit) would be a better choice, and it turns out they're quite cheap. I got a Futek 90A model (which is way over-spec, but didn't cost much more than lower-rated models).

I found a 3' extension cord rated for 15A for $3.50 at Target, which provided an easy solution for the high-current wiring.

Update: I also have a schematic as PDF document (5KB) or a gEDA project (3KB .zip file).

Update: By request, here is a table of connections to the PID controller by pin number:

  • 1: 110VAC live
  • 2: 110VAC neutral (I don't think it matters if you swap pins 1 and 2)
  • 6: SSR control positive
  • 7: SSR control negative (polarity does matter here!)
  • 9: one of the balanced pair of temperature probe leads which are connected together at the probe end, AND shorted to the temperature probe shield using an alligator clip
  • 10: the other lead in the balanced pair from the temperature probe (it shouldn't matter which way around you connect these, nor to which of them you short the shield)
  • 8: the third temperature probe lead that goes to the opposite side of the sensing junction from the balanced pair
  • All others: no connection.

alligator clip connected to outer braid of temperature probe

Here are some pictures showing the jumper from the outer braided shield of the temperature probe to the PID controller. This was added
after the fact to solve a problem with rapidly fluctuating temperature readings.

Preliminary Testing

For homebrew gadgets as well as software development, I subscribe to the "fail early, fail often" philosophy. Basically, that means doing the smallest possible thing that lets you see a result, then checking that result before going on. That means you learn about problems early and with minimal bad consequences, and hopefully don't have to re-do a lot of work. An experiment isn't a failure if it doesn't do what you wanted or expected; it's only a failure if you don't learn anything.

So, for the sous-vide cooker, I built it in lots of little steps.

The first test was to apply power to the PID controller and check that it would boot up and do something. No problems there.

Next, to connect the temperature sensor. That was a little more challenging, since it's a three-wire sensor. The label on the outside of the PID controller was clear about which three terminals were for the sensor, but not so clear about which wire goes where. The documentation was no help. Well, there are only six possible permutations. By learning a little bit about how the sensor works, I convinced myself that I was unlikely to hurt anything by hooking it up wrong, and that the order of the two identical-looking leads shouldn't matter (so really, only three permutations to try). Of course, that meant I got it on the third try.

The controller manual had reasonably decent instructions about how to set the sensor type, though it took me a while to figure out that "Pt100" and "P10.0" were both for Pt-100 sensors, but the latter should be used for 0.1° resolution.

Now that I had a temperature displayed, I did some of the obvious tests (glass of ice water; comparing result against various other thermometers) and decided that the result seemed to be accurate.

Next step: wiring up the control connection to the solid-state relay. Two wires, clear labels; easy. The indicator light on the relay turned on and off in sync with the "output" light on the controller.

Wiring up the high-current side was the last step in the build. There was no mystery to it, just a lot of being careful that the connections were all solid and well-insulated.

As an early operational test, I used the rig to control a saucepan full of water on an electric hot-plate. Fortunately for me, my PID controller has an auto-tuning feature. Everything seemed to work well, although the temperature readings on the panel seemed to oscillate about a degree peak-to-peak every couple of seconds. The actual temperature (measured with another thermometer) was right on. The solid-state relay didn't seem to be dissipating any heat at all (and this with a 1500W load, three times what I planned to use in the final design).

Experimental Protocol

For the first real test, I procured a package of flat-iron steaks from the local grocery. (This is an inexpensive cut, and one which I'd seen mentioned on other sous-vide cooking sites.)

I filled the cooler with water, ran the PID controller through a tuning cycle and brought it up to temperature (134.0°F). The temperature seemed to be correct and stable, though the oscillations in the displayed temperature were more pronounced, as much as three degrees peak-to-peak.

I sealed two vacuum bags, each containing two small steaks, and placed them in the water.

The first, I removed after two and half hours. I dried the steaks with a paper towel, pan-seared them and consumed. They were cooked perfectly and tasted good. Very beef-y flavor, and pleasant texture. (They'd have been better with a little salt and pepper, but this was for science and I wanted to see what the meat tasted like on its own before I started messing with it.)

The second bag, I removed after 24 hours, and pan-seared as with the first batch. The done-ness and color was fine, but the texture was a little bit too soft.

A subsequent experiment (involving Akaushi beef and searing on a very hot grill instead of a pan) produced absolutely excellent results.

Engineering Challenges

Although the first attempt was a success overall, there were a few things that didn't work to my satisfaction. As any (pen-and-paper) RPG player can tell you, experience is what you get when you don't get what you wanted. Experiences:

  • The temperature probe seems to be extremely susceptible to electrical noise. (It holds steady sitting on the bench, but the displayed reading oscillates over and under the actual if anything is electrically coupled to the shield -- even touching the middle of the cable with your hand causes this.) Fortunately, the average temperature comes out right, so it still holds the actual temperature very close to the set point. (Update: Solved! Coupling the shield to one of the wires in the return pair makes it perfectly stable.)
  • The aquarium air-stone I bought is too big for the air pump; it only bubbles from one corner, providing no real benefit over just sticking the hose in there.
  • The aquarium air-stone is intended to be buried under gravel; if not thus installed, it tends to float.
  • I don't think the aquarium air-stone was designed for operation at 135°F. It is starting to disintegrate after a couple of uses.
  • When the heater is constantly on (such as when bringing a new batch of cold water up to temperature), the rig works fine plugged in to a GFCI-protected outlet. As soon as it starts switching on and off, it pops the GFCI, apparently because of capacitative coupling between the ground and live lines in the heater. Breaking the connection between heater ground and outlet ground prevents this, but is somewhat scary.
  • Pumping in air as a way to circulate the water works, but that (now-very-hot-and-humid) air has to go somewhere. In my case, it poured out under the lid of the cooler and immediately condensed, leading to messy drips.
  • Some corrosion was observed on the fixtures of the temperature sensor.

Lessons Learned

  • This really works. It results in food which is not only edible but also good, with less hassle and uncertainty than other cooking methods.
  • Cheap cuts of meat that are normally objectionably tough and require tenderizing or marinating can be made very tender by cooking sous-vide. The flavor and mouth-feel rivals that of "good" cuts.
  • However, those cheap cuts of meat can also contain gristly bits of connective tissue which are unpleasant, and cooking sous-vide does nothing to magically fix this.
  • Even in sous-vide cooking, you can overcook things, and there is such a thing as too tender. The 24-hour batch was starting to verge on mushy, and wasn't very nice.
  • Some kind of seasoning makes for a big improvement.
  • Browning the meat is still the weak link in the chain for me.

Future Directions

  • The polystyrene foam cooler I'm using as a containment vessel will need to be replaced with something more solid. I don't think it will stand up to too many more uses. I expect that the weak point will be the hole I drilled to install the temperature probe.
  • The plastic box used to hold the prototype control system is also pretty awful. Using a proper project box, and bolting down the solid-state relay would be a big improvement.
  • Moving the heater and temperature probe outside the cooking vessel, then pumping water past them might be a more tidy solution. It should provide better circulation than the air system, make less of a drippy mess from escaping moist air, and would leave more room for food in the bath. (It's hard to put more than a couple steaks in there now, as I'm worried about them directly touching the heating element.)
  • The PID controller has some programmable alarm outputs that are crying out to be used for something. At a minimum, a buzzer for over-temp would be nice. Maybe a timer for "elapsed time under botulinum safe-point" would be useful too.
  • Replacing the PID controller with a custom AVR-based system would be a lot of work, but much more hackable.
  • Instead of using a solid-state relay that turns on every few seconds, it might be neat to try continuously-variable power (via waveform modification, like a solid-state lamp dimmer) instead. Solving RFI issues would be something of a challenge, though.

[Updated 2010-09-24 DGH to add links to schematic.]

[Updated 2010-12-01 DGH to add pin assignments for PID controller.]