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

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

  • 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!)

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

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

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.

123D Circuits Contest

Finalist in the
123D Circuits Contest

19 People Made This Project!


  • Games Contest

    Games Contest
  • Barbecue Challenge

    Barbecue Challenge
  • Sew Tough Challenge

    Sew Tough Challenge

70 Discussions


5 years ago on Introduction

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. ;-)

2 replies

Reply 5 years ago on Introduction

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. ;)


5 years ago on Step 6

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


10 months ago

When it enters in Counter_fall mode (in my case always that I select high temperatures (>70c) with open lid container), temperature goes far beyond target_temp. It looks like the code always turn on relay when it detects a counterfall in temp, and only turn it off after 3 retests. During the time it takes to realize its above target, temperature goes higher and higher. Any suggestion? I'll try to put && <target_temp on the if for turning relay on. Makes sense?

Another question: I see my predictedTemp is always a huge number, sometimes negative, sometimes positive, but never related to target or actual temperature in Celsius. Is that normal? Do u guys see predictedTemp in celsius?

thanks for the amazing project :)


1 year ago

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


2 years ago

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!

1 reply

Reply 1 year ago

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


1 year ago

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.



2 years ago

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.

Luiz FernandoC3

2 years ago

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!

1 reply

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!


2 years ago

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


2 years ago

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


2 years ago

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,


3 years ago

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!

2 replies

Reply 2 years ago

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.



Reply 2 years ago

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.



3 years ago

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

1 reply

Reply 3 years ago

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