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.

<p>I really liked the concept of this project. The ability to plug into <br> any type of heating device (crock pot, rice cooker, 5 gallon pot with <br>an installed water heater element) and have the software automatically <br>adjust to each is a great idea. I put my build in a 4x6x6 electrical <br>box, swapped the relay for a 25a ssr, and added switches for main power <br>and pump control. Controlling a GFCI outlet with the ssr means I can <br>safely use the unit with a submerged electric element. The led on the <br>top left lights up when the ssr triggers power and there is an led on <br>the GFCI so I will know if the ssr ever goes out. The led in the top <br>middle lights up when the switch below it is on and providing power to <br>the pump. I used an RJ-45 pair to link the temp probe, but I will use a <br>three prong plug next time. The RJ-45 proved a bit difficult. Overall, <br>this was a fun, practical build and I learned a lot in the process of <br>making the controller.</p><p>As an added bonus, it ran for <br>eight hours today connected to our large crock pot (pictured). According <br>to the Kill-a-Watt EZ it is plugged into, it cost $0.30 for the twelve <br>hour run. That cooked two thin pork chops for lunch, two thick pork <br>chops for supper, and three chicken breast for tomorrow.</p><p>A big 'Thank You' to Etienne Giust for the instructable and code.</p>
<p>For safety reasons, when switching AC one should always switch the &quot;line&quot; conductor or both the &quot;line&quot; and &quot;neutral&quot; conductors. In step 3 you have spliced the relay into the wrong conductor. IEC color codes (most of Europe) have blue wire the &quot;neutral&quot; conductor. You should have spliced the relay into the brown wire (this is the IEC &quot;line&quot; or &quot;hot&quot; 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.</p><p>See http://www.allaboutcircuits.com/vol_5/chpt_2/2.html</p><p>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. ;-)</p>
<p>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. ;)</p>
<p>Sembazuru, thanks to point that out. I'll update my posting to reflect that.</p>
<p>Small wire cooling racks work well for this too. I do that for baking in my cast iron dutch oven while camping.</p>
<p>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. </p><p>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. </p><p>#define TEMPERATURE_PRECISION 9</p><p>I also tried adding the following line directly after the sensors begin command, though again, no change - </p><p>sensors.setResolution(tempProbeAddress, 12);</p><p>I'm new to the arduino ide and any help would be appreciated. </p><p>Awesome instructable, Thanks Etienne Giust!</p>
<p>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:</p><p>-The parts I was going to get are these: Arduino Leonardo (<a href="http://www.dx.com/p/diy-eduino-leonardo-module-blue-black-213956" rel="nofollow">http://www.dx.com/p/diy-eduino-leonardo-module-blu...</a>), relay module (http://www.dx.com/p/arduino-5v-relay-module-blue-b... temperature sensor (http://www.dx.com/p/water-proof-ds18b20-temperatur... and LED display (http://www.dx.com/p/max7219-led-dot-matrix-digital... Will these work?</p><p>-What is the accuracy of your cooker? Some high-brow sous vide recipes require accuracy of less than 0.5 degrees.</p><p>-Would it be easy to, instead of LED screen and buttons, monitor and control the cooker with wifi (using for example this: http://www.dx.com/p/elecfreaks-easy-wi-fi-shield-for-arduino-348340)</p>
<p>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!)</p><p>As long as I gave it ages to settle at a temperature, it should be fine, right?</p>
<p>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.</p>
<p>fill it with hot water initially, saves time on the heat up.</p>
<p>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. </p><p>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.</p>
<p>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?</p>
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
<p>Thank you for the quick reply!</p>
<p>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.</p>
<p>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.</p><p>Fits nicely in a double gang box.</p>
<p>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</p><p>d = NC! but none of the comments about heating and cooling that look like they should appear from the code (if I understand it?) </p><p>case TEMP_RISE:</p><p>// wait for stabilization, then Regulate</p><p>if ( IsStabilizingOrDropping() )</p><p>{</p><p>if (doBackToFirstRampWhenStabilizing)</p><p>{</p><p>Serial.println(&quot; TEMP_RISE : back to initial ramping&quot;);</p><p>opState = FIRST_RAMP;</p><p>} </p><p>else </p><p>{</p><p>Serial.println(&quot; TEMP_RISE : back to normal : reg&quot;);</p><p>EnterRegulateStateOrWaitSmoothLowering();</p><p>}</p><p>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?</p>
<p>It looks pretty cool!</p>
<p>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.</p>
<p>Thanks for the instructable. But my unit will shutdown 1 to 2 times before the temperature stablises. I found that the following line:</p><p>tCheckNotHeatingWildly = millis() + 1000 * 60 * MAX_HEATINGTIME_NO_TEMP_CHANGE_MINUTES</p><p>in the &quot;checkShutdownConditions()&quot; function performs integer calculation instead of long integer calculation, making checking time shorter than intended.</p><p>Anyway, thanks so much for giving me a chance to use sous vide, I really enjoy it!</p><p>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.</p><p>Cheers!</p>
<p>Thank you for noting that. I made the correction in the code.</p>
<p>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&deg;C.</p><p>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.</p>
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!
<p>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!</p>
<p>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 &quot;5 minutes but no temp change&quot; feature still does its work to prevent unwanted overheating.</p>
<p>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!!!</p>
<p>That's awesome ! Don't forget to share your code somewhere (Github for instance) and congratulations!</p>
<p>Hi <a href="http://www.instructables.com/member/Etienne+Giust/" rel="nofollow">Etienne Giust</a>;</p><p>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. <br><br>Thanks in advanced. <br><br>Best Regards, <br>Md. Istiaq Mahbub</p>
<p>Hi. I'm going to put a more in depth explanation of the code on the Github page. As soon as possible.</p>
<p><strong>Great Project!</strong></p><p>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. </p><p>The parts should arrive any day now, I can't wait!</p>
<p>Big-time props to <a href="http://www.instructables.com/member/Etienne+Giust/" rel="nofollow">Etienne Giust</a>. 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! </p><p>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!</p>
<p>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 &quot;adapt&quot; to a particular cooking utensil? Thanks! Neat project.</p>
<p>Yes, you'll get a more detailed explanation on the Github page (link in step 5)</p>
<p>You're on Treehugger!</p><p><a href="http://www.treehugger.com/slideshows/gadgets/make-cheap-sous-vide-cooker-arduino-and-rice-cooker/#slide-top" rel="nofollow">http://www.treehugger.com/slideshows/gadgets/make-...</a></p><p>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.</p>
<p>I did give them permission, yes. It's good to have it shared in many places</p>
<p>Hi Etienne</p><p>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 <a href="http://everycook.org." rel="nofollow"> http://everycook.org. </a> </p><p>Regards</p><p>Alexis</p>
<p>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.</p>
<p>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$</p>
<p>yep. Just look for &quot;MAX7219 8-Digit LED Display&quot;</p>
<p>You may want to add an aquarium &quot;bubbler&quot; to this construction ... The bubbles will cause the water to circulate a little better preventing &quot;hot spots&quot; in your cooker.</p>
<p>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. </p>
Did you just put the hose into the liquid or did you attach a &quot;bubble stone&quot; or the like ...<br>Also put a lid over the unit .. It will help to get up to temp and ease the maintenance of temps...<br><br>If you wanted to get &quot;fancy&quot; arrange a circulation pump ...<br>
<p>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. </p><p>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) </p><p>I tried a small 12 V submersible circulating pump, rated at 90 degrees Centigrade. It lasted for 2 hours. </p>
<p>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 &quot;to cook stuff&quot; volume. Also, having the temperature probe at the same height than what's your cooking is important if your recipient is tall.</p>
<p>Hi Etienne,</p><p>Thank you for the code. It looks well written. </p><p>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.</p><p>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?</p><p>Kind regards and thanks again,</p><p>Kanter</p>
<p>Hi. I'm going to put a more in depth explanation of the code on the Github page. Soon.</p>
<p>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?</p><p>best wishes</p><p>Alberto</p>
<p>Hi Alberto. A quick search for &quot;MAX7219 8-Digit LED Display&quot; should set you on course.</p>
<p>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.</p>
<p>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.</p>

About This Instructable


541 favorites


More by Etienne Giust: Cheap and effective Sous Vide cooker (Arduino powered) Multi-purpose holder from kitchen whisk
Add instructable to: