Introduction: Cheap and Effective Sous Vide Cooker (Arduino Powered)

Picture of Cheap and Effective Sous Vide Cooker (Arduino Powered)

Sous-vide cooking is a great new way of cooking food. I will not explain why and how it works here... for great recipes and explanations, you can check out those guys :

Unfortunately, a good (and I mean precise to the half °C) sous-vide machine is very very expensive (500, 1000$ or more). If you wonder why you need such precision, I suggest you check this out :

Some Arduino-based designs come cheap (50, 60$), but as they are based on PID regulation , they require adequate tuning to perform well. Good PID tuning is very hard to achieve in practice, so those designs don't hold well against reality (at least, in my experience). Also, who needs a 20$+ LCD screen when a cheap 5$ led 8-digits display does a better job in terms of readability.

After weeks of work and tests, I came up with my own design, with the primary goal of useability in mind. Behold the "Adaptative regulation sous-vide cooker"

Features :

  • Works out of the box : no need for tweaking or tuning, the software adapts itself to the characteristics of your cooker : whether it is big, small, full of water, half-full, whether room temperature is low or high, it works.
  • Efficient regulation in the range of 0.5°C
  • Sound alarm warns when target temperature is reached
  • Automatic detection of lid opening and closing : regulation does not get mad when temperature probe is taken out of the water (which is a thing you need to do if you want to actually put food in your cooker)
  • Safety features :
    • automatic cut-off after 5 minutes of continuous heating providing no change in temperature
    • automatic cut-off after 24 hours of operation

    • automatic cut-off when temperature reaches 95 °C

    • allows target temperature only in the safe 50°c to 90°C range

  • Dead cheap and simple : no expensive LCD or Solid State Relay

Step 1: Gather Your Stuff

Picture of Gather Your Stuff

Parts needed :

  • Arduino board - approx 20$
  • Integrated 8 digits led display with MAX7219 control module (3 wire interface) - 5$
  • Pushbutton x 2
  • Piezo buzzer - 3$ (optional)
  • Waterproof DS18B20 Digital temperature sensor - 10$
  • 4.7K ohm resistor
  • 5V Relay module for Arduino, capable to drive AC125/250V at 10A - 4$
  • Rice Cooker
  • A wood board, plastic box and silicone sealant for protection of the high current part of the circuit
  • Drill

You'll be set for approx 40$, maybe even less. That's not counting the rice cooker.

Step 2: Attach Temperature Sensor to the Lid

Picture of Attach Temperature Sensor to the Lid
  • Drill a hole through your lid to put the sensor. It should be pretty central
  • Find the adequate length of cable to let the sensor sit in the middle of the water when immersed
  • If you can, put the sensor in a "cage" which will isolate it from potentially cold food and let it do its job of measuring water temperature. It should be stainless steel. I used a metallic honey spoon.
  • Stick some silicon to hold together sensor cable and lid
  • Let it set for a night or so

Step 3: Relay Enclosure (updated for Safety!)

Picture of Relay Enclosure (updated for Safety!)

Since you'll be having a rice cooker full of water when in operation, you'd better protect the high voltage part of the circuit against spills.

I choose to put the relay under a transparent plastic box and to seal the whole thing with silicon.

  • Rip-open the high voltage cable (please make sure it is not plugged) and cut the Phase wire (not the ground or neutral one). You can check on this page which is the color code you're looking for depending on the part of the world you're in. Many thanks to Sembazuru for pointing that out. You can notice that I choose wrongly to cut the blue wire which is the Neutral. As I live in europe, I should have picked the brown wire.
  • Connect the two parts of the wire to the high voltage part of your relay. Make sure the relay is Open by default.
  • Use screws and cable holders to solidly maintain the relay and cable
  • Put your plastic box over it and seal with silicon
  • Let it set for one night

Step 4: The Circuit

Picture of The Circuit

Wiring is pretty easy :

Inputs :

Pushbutton 1 :

  • one end on pin 6 , the other to ground

Pushbutton 2 :

  • one end on pin 5 , the other to ground

Temperature sensor :

  • red wire to 5V
  • black wire to ground
  • other wire (yellow or white) on pin 9 (data pin of OneWire sensor). Also linked on pin 9 is a 4.7K ohm resistor whose other end goes to 5V.

Outputs :

Piezo buzzer :
  • one end on pin 13 , the other to ground

Relay :

  • VCC to 5V and GND to ground
  • Command wire on pin 8

8-digit LED display :

  • VCC to 5V and GND to ground
  • DataIn on pin 12
  • CLK on pin 11
  • LOAD on pin 10

Step 5: Code

The Arduino code for this project can be found here :

Upload and enjoy!

Note : you will need the following libraries installed in your Arduino Environment to be able to compile the project :

To install a library in your environment, follow this guide here :

Step 6: One Last Thing

Picture of One Last Thing

You'll want to pull away your food from the bottom of the rice cooker so that it is heated by the ambient liquid, not by the heater itself. To do that, I used some stainless steel frame pulled out some cooking utensils.

Voilà. Enjoy ... et bon appétit!

Step 7: Use It!

Use the 2 pushbuttons to set the target temperature (acceptable temperatures are within the 50°C to 90°C range).

The actual temperature can be monitored on the led display.

It is advisable not to open the lid during the initial heating phase, where the characteristics of the rice cooker are monitored.

When the buzzer sounds, you can open the lid and put your bagged food in the water.

If you connect the Arduino to your PC, data is sent to the serial port. Once stripped, this data can be used to plot the temperature over time.


CGish made it! (author)2015-04-22

I really liked the concept of this project. The ability to plug into
any type of heating device (crock pot, rice cooker, 5 gallon pot with
an installed water heater element) and have the software automatically
adjust to each is a great idea. I put my build in a 4x6x6 electrical
box, swapped the relay for a 25a ssr, and added switches for main power
and pump control. Controlling a GFCI outlet with the ssr means I can
safely use the unit with a submerged electric element. The led on the
top left lights up when the ssr triggers power and there is an led on
the GFCI so I will know if the ssr ever goes out. The led in the top
middle lights up when the switch below it is on and providing power to
the pump. I used an RJ-45 pair to link the temp probe, but I will use a
three prong plug next time. The RJ-45 proved a bit difficult. Overall,
this was a fun, practical build and I learned a lot in the process of
making the controller.

As an added bonus, it ran for
eight hours today connected to our large crock pot (pictured). According
to the Kill-a-Watt EZ it is plugged into, it cost $0.30 for the twelve
hour run. That cooked two thin pork chops for lunch, two thick pork
chops for supper, and three chicken breast for tomorrow.

A big 'Thank You' to Etienne Giust for the instructable and code.

Sembazuru (author)2014-02-18

For safety reasons, when switching AC one should always switch the "line" conductor or both the "line" and "neutral" conductors. In step 3 you have spliced the relay into the wrong conductor. IEC color codes (most of Europe) have blue wire the "neutral" conductor. You should have spliced the relay into the brown wire (this is the IEC "line" or "hot" conductor). If the power cord is made to US NEC or Canadian CEC codes, the wire to splice the relay in would be the black wire.


I'm not sure for the rest of the world. I would suspect Mexico either uses the US NEC (or mirrors it) simply due to proximity and simplicity of product flowing across the boarder, but I'm not sure about the rest of Central America or even South America. Asia and Africa... Nope, I don't know what standards they use for electrical AC wiring color codes. Check your local standards. ;-)

Wibin (author)Sembazuru2014-07-10

However, turn the cable around in the socket and live becomes neutral. There is no left and right like in US and UK plugs, either or might be live which I find poor design. :) But then again polarity agnosticism is one of the advantages of AC-current so why not make use of it. ;)

Etienne Giust (author)Sembazuru2014-02-22

Sembazuru, thanks to point that out. I'll update my posting to reflect that.

bennelson (author)2014-02-17

Small wire cooling racks work well for this too. I do that for baking in my cast iron dutch oven while camping.

baxev2005 made it! (author)2015-02-01

Excelllent Project. I replaced the LED displays with a 16x2 LCD I had on hand and modified the sketch to add labels for Actual and Set temperature. Also I intend to add a timer to count the time from the moment the food is put in water. I did not have a rice cooker, so I used a very old potato home fryer. Initially the regulation went nuts. After some thought I concluded that the problem was the high wattage of the fryer, which was 1600 Watts. I put a 10Amp, 1000Volts diode in series with the heating element to cut power in half. It worked as advertized. Temperature regulation was within +/- 0,2 degrees C.

VictorS241 (author)baxev20052017-10-27

Hello baxev2005, is it possible for you to send me the .ino file to me too? I don't get mine to work... I messages you my email if you want to send it.

Is your display a 16x02 I2C? Can I see your code, please?
I can´t config mine...

Sorry Luiz for the delayed answer. Yes, the LCD is 16x2 characters and is driven by an I2C board. Please send me your email, so I can send you the .ino file

JamesCh3 (author)baxev20052017-08-22

Could I get the .ino file too? Thanks!

LarsR5b made it! (author)2017-09-02

Thanks for the instructable especially the software! I had built a similar hardware before but my own software worked only for my rice cooker and a pre defined amount of water and food. Your adaptive alogrithm is perfect (as long as I use enough water and use cold water in in the beginning).

However I would recomment not to use a normal relay but an ssr. Using a normal relay I went into problemes: After some switch cycles the arduino crashes. Searching the internet I saw a lot people having the same problem. It has something to do with inductive voltages resulting from the heating. With the solid state relay I don't have any problems any more.

Furthermore I use a 16/2 LCD display to show the actual and target temperature and a timer.

Thanks again!

Jack Friday made it! (author)2017-03-11

Probably the most simplest build i could find!

i have an LCD instead of an 8 Digit LED inside my Learning KIT and lacking in just the temperature sensor, so im gonna order just that part . currently,i am still very new to arduino, so learning by following steps is the only thing i could do. At the same time, im also hyper excited to build my own sous vide cooker! (the reason im jumping into this build). can you help a brother out and show me the steps of wiring the LCD and show me how to tweak your code for the LCD replacement? im sooo close into finishing one!


Hey there, I just built this up (although I made some mods in the code to accomodate the HW I had) and if that's the LCD 1602 driver then you can just use the LiquidCrystal.h library and modify the code as you need. I had to go through and comment out a lot of LED driver stuff and swap for lcd code. I can show you what I did if you like (it's really, REALLY crude. I'm pretty bad at code.)

BobW4 (author)kevinroscom942017-08-28

I would love to see your changes as a diplaywould look better than the led version plus I am having a problem with the display anyway.

Thanks for any help Bob

JamesCh3 (author)kevinroscom942017-08-22

Hey Kevin, would you be able to show me what you did with your modified code?

BobW4 (author)2017-08-27

I have made it up on a breadboard to try before making an enclosure as a final project but have a problem with the display that worked ok then the display shows all segments on and very bright and also shows when programming

IDE tells me "Low memory available, stability problems may occur."

I have a genuine UNO and the same display as the author

Also in the software, I see no anti switch bounce and don't see anything in the program could this be causing the problem when button pressing I would love to sort it out but dont know how any help would be good Thanks Bob

VictorS241 (author)2017-05-14

Help, this isn't working :s

I'm new to the adruino but didnt think this project would be hard to pull off. In the beginning it didn't work with the power supply connected, but with the usb connected it worked fine. But couple hours later the screen starting to give up in different ways. It always gives up when the temperature is supposed to update on the screen/when the TX-LED blinks.

Also the IDE tells me "Low memory available, stability problems may occur." when I upload the sketch, but shouldn't it be the same for everybody? I have a adruino Uno.

First I thought the power supply was too weak (9V 0,8 A), but now I'm thinking I have done something wrong or something is broke...

I recorded the problem, I got it to work one time but since then I have never been able to replicate it... I dont think it's any loose connections, have checked everything and put it together twice

Does anybody have suggestions? Thank you!

BobW4 (author)VictorS2412017-08-27

Hi wish I could help but I have a problem as well my display comes on and shows the set temp and the temp and works ok then the display lights all segments all on and goes bright I then turn off and back on it works for a time then the same again so I must have the same problem as you wish I new the answer as I want to sort it, All the best Bob

BobW4 (author)2017-07-22

Love the project looks good must have taken a long time to write the code it looks a lot of work.

Thank you for your time and effort it made a good read so think I will have a go at making one as you say a commercial unit is a lot of money.


RobbieV8 (author)2017-05-30

What about using a mosfet to regulate voltage instead of a relay that cuts power on and off? It seems like that would be better at holding a constant temperature.

hejcharlie made it! (author)2017-04-27

Here's mine =)

Luiz FernandoC3 (author)2017-04-17

I've done this project with ssr-NO relay and 16x02 l2c display, small changes at the code and everything works fine, except my temperature sensor. It only measures 0.5°C intervals, can anyone explain why?
I'm new to arduino, wish you guys could help!

I´ve just noticed that the code doesn´t set up the Temperature probe resolution.... it asks for the resolution in the beginning, but it doesn´t SET the resolution in the middle of the code.


Will do the trick.
Thanks again for this project!

JannickS2 (author)2017-04-01

Hi Etienne

I made this project, and its totally awesome. Thank you so much !
I have a question though. When using this with a pot on a single "stove" (electrical, 1500W) with 8 liters of water, I have about -3 - +3 degrees in difference most of the time - seems very unstable. But when using a kettle with about 1.5 liters, it works perfect, within 0.1 degrees.

Do you have any idea to what could be the problem?

I have a suspicion that it might be because the single stove / hot plate has its own thermostat, thus turning off before the controller 'thinks' it is off. I have tried starting with 50 degrees hot water so it doesnt have to bring it up 40 degrees, thus NOT turning the thermostat off during ramping. But doesnt make any difference.

Cheers, Jannick

Truerad (author)2017-02-15

Do you guys thinking of wifi module? So you can turn it on/of or change temperature?

alexandre.norman made it! (author)2017-02-05

Made it. I changed the display for a fancy one. But kept the wonderfull work you have made for the command control ! Thanks !

RuneK4 made it! (author)2016-11-11

i built one of these controllers. but I'm having a problem with the control routine

it looks to be working fine. ramps up. catches the temperature and regulates for a bit.or it regulates for a while. (hours) then starts oscillating and eventually just but for no reason the it just Stops heating. and the temperature drops.

below is the last output from the serialport before it drops.
No more serial data. and the display is not updating the temperature.

--- avgTemp3 = 55.1250000000 --- maxRegTEmp = 55.5625000000 --- minRegTEmp = 55.1250000000 --- tMaxReg = 4600798 --- tMinReg = 4173811
5905; 55.062
d = 0.0000000000
--- avgTemp3 = 55.1041679382 --- maxRegTEmp = 55.5625000000 --- minRegTEmp = 55.1041679382 --- tMaxReg = 4600798 --- tMinReg = 5906701
--- neededUptimeForCompensate = 56309

neededUptimeForCompensate = 56309 seems to be where it hangs

any ideas what could be wrong ? have tried other sensors. the hardware looks to be fine


Fredovsky made it! (author)2016-08-31

Thank you for this amazing work ! Just finished mine and straight away went to buy a 470g (~1 lbs) steak from the butcher (he put it in a vacuum bag for me). My rice cooker is a bit small but powerful (1.5L - 1000W) and the temperature reached 64ºC (147ºF) in more or less 10min. When I added the steak it overshot the requested temperature by about 4ºC but then went down slowly and maintained it within 0.4ºC.

I did run into some problems while mounting it :

1/ First time I wired it on the Arduino Nano the display would only display 0 / 0. I disconnected everything and wired it on the Arduino Uno for easier troubleshooting and it worked straight away (even with the temperature sensor out in the air and the rice cooker disconnected). I wired it back on the Nano and it worked as well, I guess the wiring was incorrect the first time but couldn’t figure where.

Also on my 8 digit display, LOAD (that goes to pin 10) is labelled as CS.

2/ The Relay would not open once the requested temperature was reached (and neither would it open reaching 95ºC). For some reason that I do not understand, I had to plug the relay on the Normally Closed pins, which made it work the way it should. If anybody has a logical explanation, I’m listening.

I hope this will help those having similar problems.

I did enjoy my perfectly cooked and tender steak and looking forward try new recipe in my inexpensive sous-vide cooker :-D

RuneK4 (author)Fredovsky2016-11-10

the code is written for "active high" relay. meaning a 5v signal on the GPIO clicks the relay. i am using "active low" relays. meaning a low signal clicks the relay.

you likely have the active low type. i just modified the code.

AndersW11 (author)2016-10-13

Just finished it ?
I had a Redbot mainboard lying around. Working fine as an Arduino Uno. A0 is pin 14, A1 is 15, and so on. Other pins maps to the same pins. Eg. pin 3 is pin 3. I damaged the temperature sensor because I didn't realise that not all VDC-pins is 5V. Some of them is the same as input voltage.

Thank you for your work Etienne.

Best regards,

aisaac5 (author)2016-03-25

I was nearly done with my build but I ran into some trouble, as it was expected since this is my first time with an Arduino

First of all my LED display doesn't show any temperature, it just shows a 0 in each screen. I suspect this may be a problem with the temperature sensor not actually detecting anything. (The sensor wasn't inside the rice cooker, nor was the relay powered)

2nd. my relay doesn't turn on the LED's in it, is at least one of them always supposed to be on?

3rd I don't have the buzzer in my build, could this be causing any issues?

Thank you so much for any reply, can't wait to enjoy my sous vide cooker!

ChrisA90 (author)aisaac52016-09-14

Late reply sorry, you probably have sorted out the problems by now but for anyone else....

Even if the temp probe is not in your cooker you should still see ambient temp and when you initially power up the set point will be equal to the ambient so you should see number in both segments. Maybe run the LDCdemo sketch just to check that the display is correctly connected and working OK.

I have a relay with a red LED built it and that turns on fine......I wonder where the LED is powered from.....maybe the voltage is reversed? Can't think of any other reason why the relay would work but not the LED indicator.

I don't have a buzzer in my build. Works fine. The Buzzer is on an output so the board doesn't know or care if there is anything connected or not.


aisaac5 (author)ChrisA902016-09-15

thanks for the reply anyway!

I figured out that one of my jumpers connecting the temp probe was a bit torn and the relay I had bought didn't work at all so I just replaced those and it's been working for months now.


ChrisA90 made it! (author)2016-03-15

Well I managed to pack it all into a reasonably sized box. With the glands and seal around the lid it is pretty well splashproof. To make it self contained, I pulled apart a wallwort to provide power and used a 2 channel touch switch wired to the two pads on the top surface.

The temp regulation works fine and generally seems to be holding it at better than 0.5c.

Thanks for the code and the instructable Etienne, great job.

UKCurryLover (author)2016-02-24

I'm trying to make this at the moment but I'm a little confused as I'm new to arduinos. The instructions say to connect to pin 5, pin 6, pin 9 etc but my arduino nano has two sets of pins. I have A pins and D pins. Should I be connecting to pin A5 or D5? A9 or D9, etc? Thanks

well the answer to this question, for the benefit of anyone who finds it in future and who also doesn't know, is the D pins are the correct ones to use

UKCurryLover made it! (author)2016-02-27

mine is now half-built but working and in functional test phase (which means I couldn't wait to tidy it all up before using it to cook dinner tonight)..! Fantastic project, although I'm new to Arduino stuff it was easy to figure out and I only had one problem which was that I ride to pin 7 instead of pin 9, but a quick edit to the code died that thanks for your efforts Etienne

TheCoffeeDude (author)2015-12-23

This bile is what turned me on to Sous Vide cooking. Excellent!

NguyenD33 (author)2015-12-20

I have a question (hope it doesn't sound too stupid) - the 5V relay can drive AC125/250V at 10A, so would it be safe for 220V in Asia? I do have transformers by the bedside, but just to be sure :s

CuriousG made it! (author)2015-12-03

Made it in April 2014. Converted it to work in and display Fahrenheit temperatures. I use a 40 cup coffee pot with temperature cutoff bypassed.

npak made it! (author)2015-09-01

Thanks so much for these instructions! I had been eyeing my slow cooker for a long time trying to devise a way to get more accurate temp regulation for sous-vide as well as culturing yoghurt. I found some weird old dental tool case that ended up being the perfect size for the various components. This was my first Arduino project and I now see potential for micro controller projects everywhere I look.

One question though. I've seen a lot of pictures that have the actual temp displayed with 0.1 degree precision as opposed to the 0.5 I have. I have played with the sketch a little, though without any luck. I tried changing the following line to 10, 11, and 12 bit though no changes.


I also tried adding the following line directly after the sensors begin command, though again, no change -

sensors.setResolution(tempProbeAddress, 12);

I'm new to the arduino ide and any help would be appreciated.

Awesome instructable, Thanks Etienne Giust!

Koehl (author)2015-06-29

Thanks from the instructions! I'm completely new to Arduino and DIY electronics in general and I'm going to get my feet wet this project. A couple of questions I have:

-The parts I was going to get are these: Arduino Leonardo (, relay module ( temperature sensor ( and LED display ( Will these work?

-What is the accuracy of your cooker? Some high-brow sous vide recipes require accuracy of less than 0.5 degrees.

-Would it be easy to, instead of LED screen and buttons, monitor and control the cooker with wifi (using for example this:

King of Derby (author)2014-02-17

mmm...though it will be slower to heat up...I should think a slow cooker would work in place of a rice cooker. (why would I want to? Because I have a slow cooker, so does the guy I'm moving in with, but neither of us have a rice cooker, nor the space to have 2 slow cookers and a rice cooker!)

As long as I gave it ages to settle at a temperature, it should be fine, right?

Jayefuu (author)King of Derby2014-02-18

I made my own too. I tried it with a slow cooker first but they're much lower power and so heat up much more slowly. I found it hard to get my PID values right with a slow cooker as it took 4 hours to heat up each time unlike my rice cooker which only takes 15 minutes. My rice cooker has much better insulation too.

ShayneR1 (author)Jayefuu2015-06-05

fill it with hot water initially, saves time on the heat up.

imjosh (author)King of Derby2014-02-18

Depends on your cooker really. I use a rice cooker but have also used a slow cooker. The temperature in the slow cooker is actually much more stable I think because it doesn't have enough power to overramp. I think my slow cooker is maybe 150-200watts? My rice cooker is about 800 watts.

Try it and see. If none of your slow cookers works well, donate one to a thrift store and pickup a rice cooker while you're there.

wmr0412 (author)2015-05-18

Hi, I'd like to build one of those for myself, too. Would you mind telling me what size the pot is you're using? What's your guess for the minimum volume of water needed?

Etienne Giust (author)wmr04122015-05-18

Hi. I guess the one I have is 1.5 liter or something. But the system should work with any volume of water and any pot form factor. As long as the temp sensor is immerged, you should be fine

wmr0412 (author)Etienne Giust2015-05-18

Thank you for the quick reply!

Dave2001 (author)2014-10-27

Works very well. I had a Nokia 5110 LCD laying around so I modified code to use it instead of the segment LEDs. LCD shows status messages, current and set temperature, SSR relay status, and also graphs the temperature over time so I know what it's doing without having to have a PC connected to serial port.

Fits nicely in a double gang box.

About This Instructable




Add instructable to: