Cheap and Effective Sous Vide Cooker (Arduino Powered)





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

123D Circuits Contest

Finalist in the
123D Circuits Contest

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.

17 People Made This Project!


  • Microcontroller Contest

    Microcontroller Contest
  • Science of Cooking

    Science of Cooking
  • Pocket-Sized Contest

    Pocket-Sized Contest

We have a be nice policy.
Please be positive and constructive.




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

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

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

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

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

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!

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

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.


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.

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!