Cheap and effective Sous Vide cooker (Arduino powered)

FeaturedContest Winner
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
Remove these adsRemove these ads by Signing Up
1-40 of 54Next »
Sembazuru1 year ago

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 Sembazuru8 months ago

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)  Sembazuru1 year ago

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

bennelson1 year ago

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!1 month ago

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.

Dave20015 months ago

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.

paulr37 months ago

We built the circuit using an arduino micro and a sainsmart dual relay board. It seemed to work at first but it keeps overshhoting? Also we never see the serialmonitor print on our serial monitor. We see 87; -127.000

d = NC! but none of the comments about heating and cooling that look like they should appear from the code (if I understand it?)


// wait for stabilization, then Regulate

if ( IsStabilizingOrDropping() )


if (doBackToFirstRampWhenStabilizing)


Serial.println(" TEMP_RISE : back to initial ramping");

opState = FIRST_RAMP;




Serial.println(" TEMP_RISE : back to normal : reg");



Not sure what we did wrong? Should we try and reloading code from github or something? Great idea and thought we were getting it to work. Any help or advice you could give?

S0uraV_DAS9 months ago

It looks pretty cool!

iparallax9 months ago

Your unit woks great but I found the crock pot I use seems to suffer uneven hot spots. I resolved this by adding a small 12 vdc CPU pump into the mix to circulate the water. This seems to have eliminated the hot spots. Use flat tubing to reduce lid lift.

mlee89 made it!11 months ago

Thanks for the instructable. But my unit will shutdown 1 to 2 times before the temperature stablises. I found that the following line:

tCheckNotHeatingWildly = millis() + 1000 * 60 * MAX_HEATINGTIME_NO_TEMP_CHANGE_MINUTES

in the "checkShutdownConditions()" function performs integer calculation instead of long integer calculation, making checking time shorter than intended.

Anyway, thanks so much for giving me a chance to use sous vide, I really enjoy it!

Below is a photo of the control box I built. Your choice of LED display is very cool and the connection is very easy. I managed to put everything inside a small box (not as easy as I have thought though). The control box is then pluged in series with a 1.8L rice cooker. I am now testing the right interior to get the circulation efficient. I will show you my arrangement after more trial and error.


Etienne Giust (author)  mlee8910 months ago

Thank you for noting that. I made the correction in the code.

willster273 made it!12 months ago

This is great, thanks! I had a look at the code and think I understand it but turned off the 24 hour timeout and no temp change timeout because I was not sure if it was meddling with my code (it would reset to 0.0, 0.0 occasionally, meaning I had to restart). I was using a 550mA 5v power supply on the 5v line on a Nano v3 but the display seemed to go into shutdown mode (all LEDs on) so I tried an 850mA supply on the usb input and it has been working for a few hours so far! I have successfully cooked an egg and am currently cooking a small brisket steak for 24 hours at 59°C.

I also made a small MDF box to hold the relay, power supply (which is wired to the always-on end of the relay so I only use one wall socket) and circuit, which is currently on a breadboard. The lid is slightly open because I had another USB wire fed in because of my power supply issues.

NickeNy1 year ago
Working great after finding a problem with the relay, only working in NC mode. Also had some problems with the powersupply to the Arduino. To small... Great job!
jamthecat made it!1 year ago

Took me a few weeks to get the parts but my GF and I are really happy. I can see the adaptive temperature in action - that's really cool! Since I'm not a programmer, it'll probably take a while for me to figure out how the program works. One thing I observed that looks odd: why is is that when the probe is removed, the program detects the removal (quickly -nice!) but the relay remains on, thus raising the temperature? Similarly, if the relay is off and I remove the probe, the program will: sense the probe removal but enable the relay after a few minutes. The good news is the program does shut down the relay after ~5 minutes being outside in both cases. Thie is so great..thanks again!

Etienne Giust (author)  jamthecat1 year ago

Mhh.. The only time the lid should be open (and thus, the temperature probe off-water) is when adding bagged food to the water bath. Then the lid should be quickly put back on. I didn't want to perturbate current regulation when the lid was opened, so if there is heating at this time, it will not stop. However, as you point out, the safety "5 minutes but no temp change" feature still does its work to prevent unwanted overheating.

WOW your code is simply amazing and very well commented. I found a really cheap LCD shield with buttons for a mere $6, so I am altering your code to accommodate the difference as well as adding a red led to go off if the temperature goes to low as well as a green led that will turn on when a button is pushed but if power goes out and the board reboots will not turn back on. I am also adding to the display the up-time and since I live in the United States I am adding the set temp converted to Fahrenheit. Your splendid committing makes it a breeze to alter. THANKS!!!

That's awesome ! Don't forget to share your code somewhere (Github for instance) and congratulations!

tarango0021 year ago

Hi Etienne Giust;

Thanks for sharing the code with all of us. Its really looks great to see this project. Can you explain more about PID in your code ? I cant understand it clearly. It would be great if you help me about this.

Thanks in advanced.

Best Regards,
Md. Istiaq Mahbub

Etienne Giust (author)  tarango0021 year ago

Hi. I'm going to put a more in depth explanation of the code on the Github page. As soon as possible.

Great Project!

I am wanting to convert the temperature to Fahrenheit instead of Celsius. Is it as simple as replacing getTempC with getTempF? Both appear to be supported in DallasTemperature.h.

The parts should arrive any day now, I can't wait!

sgtnuggets made it!1 year ago

Big-time props to Etienne Giust. The parts list for this project was very reasonable and the code flashed on to my Arduino Nano with no problems. I'm already cooking my second dish with it!

At some point in the future, I think I will modify the logging so that I can get just temperature readings in the Serial Monitor. That way, I can graph the resulting data to see if any modifications can be made to the software to improve the heating algorithm. Thanks for putting this project together and sharing!

nyrazman1 year ago

Can you explain a bit about how the adaptive regulation works, or point me to a site where I can get a better understanding of what the code is doing to "adapt" to a particular cooking utensil? Thanks! Neat project.

Etienne Giust (author)  nyrazman1 year ago

Yes, you'll get a more detailed explanation on the Github page (link in step 5)

Jayefuu1 year ago

You're on Treehugger!

Did you give them permission to copy it so completely? They did credit you, but can't imagine many people will click through since so much of the Instructable is replicated there.

Etienne Giust (author)  Jayefuu1 year ago

I did give them permission, yes. It's good to have it shared in many places

Hi Etienne

Thanks a lot for sharing your code. It looks quite complete and well engineered. We'll have a closer look at it and maybe integrate it into our temperature regulation for



Etienne Giust (author)  awiasmitinow1 year ago

I'll detail the algorithm on the Github page. In any case, I'm interested to know if and how you plan to use the code. Do not hesitate to contact me privately.

gowri1 year ago

Nice Project,i want to build one.where can i get this item =Integrated 8 digits led display with MAX7219 control module (3 wire interface) - 5$

Etienne Giust (author)  gowri1 year ago

yep. Just look for "MAX7219 8-Digit LED Display"

You may want to add an aquarium "bubbler" to this construction ... The bubbles will cause the water to circulate a little better preventing "hot spots" in your cooker.

I tried a bubbler on my system. I found that the air pumped in caused the water to evaporate very quickly. It acted like a humidifier. Warm, moist air must come out if you pump dry cool air in.

Did you just put the hose into the liquid or did you attach a "bubble stone" or the like ...
Also put a lid over the unit .. It will help to get up to temp and ease the maintenance of temps...

If you wanted to get "fancy" arrange a circulation pump ...

I bought a kit for a fish-tank. It included the bubbled and an aeration stone. My is larger, I used a cool-box. and a solid state relay.

The pump is the disappointment. I am working to replace this with a motor and propeller circulation pipe. (motor on top of the lid, and a pipe + impeller stretching inside)

I tried a small 12 V submersible circulating pump, rated at 90 degrees Centigrade. It lasted for 2 hours.

Etienne Giust (author)  gromanski1 year ago

I was thinking a propeller would be the best thing; but it makes the whole thing a lot more complicated. I found natural convection to be sufficient when the water volume is sufficiently greater than the "to cook stuff" volume. Also, having the temperature probe at the same height than what's your cooking is important if your recipient is tall.

kvdeurzen1 year ago

Hi Etienne,

Thank you for the code. It looks well written.

I'm working on a similar project, where I have built my own pot (It is for brewing beer). For controlling this pot I have been using a PID controller. This works, but has not yet been optimized. The main reason is the variability of the volume that is in the pot (8L to 25L). Therefor I'm very interested in how you solved this.

I have been exploring your code, but it is quite a bit. Could you roughly describe how you go about assigning on/of status of your relay based on measured temperature?

Kind regards and thanks again,


Etienne Giust (author)  kvdeurzen1 year ago

Hi. I'm going to put a more in depth explanation of the code on the Github page. Soon.

Thanks Etienne. The project looks extremely attractive and the code is superb. Could you let us know where one can get the 8 digit integrated LED display?

best wishes


Etienne Giust (author)  albertoabreu1 year ago

Hi Alberto. A quick search for "MAX7219 8-Digit LED Display" should set you on course.

Deeg1 year ago

A solid state relay is more expensive but highly recommended. I built a sous vide controller with a mechanical relay and it wore out after only a few months of use.

Etienne Giust (author)  Deeg1 year ago

I do not know which kind of algorithm you used, but mine makes sure the switching period is not too small (minimum is 1.5 seconds ; that's what the MIN_SWITCHING_TIME constant is for in the algorithm). I had no problem so far but I do not use the device on a daily basis.

1-40 of 54Next »