Introduction: Arduino Sous-Vide Cooker

Sous-vide cooking allows you to precisely control the temperature of cooked food (how "doneness" is measured) by immersing it in a carefully controlled water bath. It's possible, but seriously difficult, to do this just with a thermometer and a pot on the stove... but if you have an Arduino do all the hard work for you, you can literally "set it and forget it."


- Arduino microcontroller (I use the Uno... any will do)
- thermistor, or other temperature sensor (I used this one from Sparkfun )
- 3/16" diameter aluminum or copper tube, about 6" long
- shrink tubing
- clear silicone caulk
- relay controller (this one from Sparkfun is nice, but you can make your own pretty easily)
- 9V battery or 9V power adapter
- AC oulet
- AC power cord with bare leads
- project box (I used an old cigar box)
- Crock-Pot or similar slow cooker (must have "On" setting... the dumber, the better)
- display (optional, but nice to have)
- various hookup wires
- Ziploc bags or vacuum sealer

Disclaimer: this project involves household current, which is dangerous if you don't know what you're doing. If you've never dealt with household current and don't want to mess with it, go with the Powerswitch Tail II from the Makershed or Sparkfun instead of using the relay controller and AC outlet. Please be careful, and don't hurt yourself.

Step 1: Make Your Temperature Probe

FIrst we need to put together our temperature probe. This is basically our sensor (the thermistor), a protective tube, and a length of wire. The probe will stay in the water bath when you're cooking, so the wire has to be long enough to reach. First we solder the sensor to however many wires your sensor needs; our thermistor needs two wires. Use some shrink tubing to keep the leads insulated.

Next we're going to protect the sensor so the water bath doesn't affect our readings. Use an aluminum or copper tube (both are great thermal conductors) big enough fit your temp sensor. Seal one end of the tube with silicone caulk (or hot glue if you're impatient, but silicone would be better). When that has cured/solidified, slide the temp sensor into the tube as far as it will go, then fill the open end with more silicone/hot glue to seal it up. Use some shrink tubing at that end for good measure.

Step 2: Wire Everything Up. First the Sensor...

Connect the temperature probe to your Arduino. We're going to use the thermistor set up as a voltage divider, so connect the probe leads to A0 and to 3.3V... you can use 5V instead, but if you're using a display, you might need the slot for that. The Sparkfun thermistor has a nominal resistance of 10KOhms, so we connect a 10KOhm resistor from A0 to ground to complete the voltage divider. Now your Arduino will be able to calculate temperature based on the resistance of the thermistor.

Step 3: ... Next the Relay Controller...

Connect your relay controller to an appropriate power source. Mine will use the same 9V as the Arduino, so I connect it to the Vin and ground pins on the Arduino. Lastly connect the signal lead to digital pin 13.

Step 4: ... Then the AC Outlet...

Connect the neutral lead of the AC power cord to the neutral pole of the AC outlet. Most outlets will have the poles labelled "Hot" or "Neutral", but it's easy enough to figure out if you're not sure (in American outlets, small slot is Hot, large is Neutral, circular is ground). Definitely connect the ground lead to the ground pole on the outlet if your power cord has one... it will protect you (to some degree) if there are any shorts. Connect the hot lead of the power cord to one of the leads on your relay controller (doesn't matter which one), and connect the other lead to the hot pole of the AC outlet.

Again, if you don't want to mess with wiring that will be connected to household current, buy a Powertail instead. Having nicely cooked food isn't worth getting electrocuted`if you don't know what you're doing.

Step 5: ... and Finally the Display (if You Want One).

These LCD displays are very common and easy to use with Arduino, but it eats up several of your I/O pins. It's nice to have the feedback of a display to let you know that everything is working the way you want it to.

Here's how mine is connected (yours may vary):
- LCD RS pin to digital pin 12
- LCD Enable pin to digital pin 11
- LCD D4 pin to digital pin 5
- LCD D5 pin to digital pin 4
- LCD D6 pin to digital pin 3
- LCD D7 pin to digital pin 2
- LCD R/W pin to ground
- 10K resistor: ends to +5V and ground wiper to LCD VO pin (pin 3)

Step 6: Yup... It's a Lot of Wires.

Step 7: Upload the Arduino Code...

The sketch below will work for this project only if you used the same thermistor and display that I did. You can modify it to your own needs... just follow the instructions in the sketch. To get accurate temperature readings, you'll have to modify a few of the parameters in the sketch to reflect the actual values of your 10k resistor (use a multimeter) and the precise voltage generated by your Arduino. Again, follow the instructions in the sketch, and everything should be ok.

To set the cooking temperature, you'll need to modify a line near the bottom of the code... it's marked. I'll update this project in the future to let you change the temperature with some buttons or a potentiometer.

Step 8: Put It All in a Box.

Load everything into a project box. I got a nice cigar box from a flea market for $5 that I liked for this project. You basically just want to protect all your components and prevent shorts. It would be a good idea to wrap all of the bare contacts from your AC outlet in electrical tape before cramming it into a project box. It would be even smarter to put the outlet into its own box separate from the Arduino, but that's really up to you.

Step 9: Plug It In.

Plug your slow cooker into your AC outlet (the one you wired up... not the one in the wall).

Then plug your power cord into a wall outlet... if you did everything right, this will be quite uneventful.

Power up your Arduino... I would recommend plugging a 9V DC power supply into it. A battery will work too, but you'll drain it eventually, and everything will shut down in the middle of cooking.

Once you power up the Arduino, it'll greet you with "Hello, World" for a few seconds, then it will show the current temperature of your probe. Unless you're using a solid-state relay, you should hear it start clicking.

Step 10: Start Cookin!

All that's left to do is fill your slow cooker with water. Then you'll want to seal your food item in a ziplock bag or vacuum sealed bag and drop it in the water. Put your temperature probe in the water too, but don't let it touch the bottom.

Lastly, turn your slow cooker to "ON". You want to use a dumb, non-digital slow cooker for this project, because we're basically turning its power off and on to keep the temperature steady. A slow cooker that does a lot of thinking might have trouble booting up if we're constantly turning it off, and you'll either damage it or it won't work at all.

There are lots of resources out there for sous-vide recipes... so enjoy, and don't eat undercooked meat!


econjack made it!(author)2017-02-03

You can simplify the wiring considerably if you buy an LCD that has the I2C controller built in. Yourduino sells them for under $6. Instead of the rats nest of wires to the display, there are two pin lines (A4, A5) plus GND and +5V. Use the LiquidCrystal_I2C library and you're ready to go with a lot less hassle and more free I/O pins.

sjev made it!(author)2013-12-31

I have taken a very quick look at your relay schematic, The thing I'm missing there is galvanic isolation.
When working with high voltages which are potentially lethal, you should ALWAYS use galvanic isolation, a simple opto-isolator between arduino and the relay will do fine.

srw777 made it!(author)2014-11-21

A relay, pretty much by definition, provides galvanic isolation. The only reason you might need to use an opto is if you're building your own solid-state relay using a TRIAC.

achupick64 made it!(author)2013-05-10

I set up everything exactly how the instruction does it, sans the relay, just hooked up to my pc for testing. However I get unusually high reading when it powers on and i know its not 116 degrees in my room. I'm a total noob and was wondering how i could remedy this issue.

shiftmstr made it!(author)2014-05-27

When you are writing your code, initialize your variable to room temp. You can also include a delay before it starts outputting the temperature. Like, wait ten seconds before first read.

czeigler made it!(author)2013-12-11

I really appreciated the step by step on this project as it helped me with a few ideas I have. I am trying to convert a 17gal. beer cooler and so, will need to somehow attach my own heating element(s) to the top or the side without burning the cooler. How could I adjust the arduino code to compensate for this added function?