Lately, I have become interested (my wife has used the term "obsessed") with Sous Vide cooking. Sous Vide is French, meaning under vacuum. In its simplest form, it is sealing up whatever you are cooking in a plastic bag, having evacuated the air from it, placing the sealed bag in a tub of water, kept at the target temperature of the food, and maintaining the water bath for a long time. The food cannot overcook because the cooking process does not proceed further, once the internal temperature has reached the target.
You can achieve the results with a picnic cooler and Zip-Lock Freezer bags and a good thermometer. Buy a commercially built device to achieve the same results will set you back three hundred dollars and up (way up!). This Instructable documents my journey into building building my own device at substantially less than the commercially built models. How much less, you ask? I don't really know, yet, but I will be working on the actual cost and will update the ible as soon as I can figure it out.
There are many fine approaches to a DIY Sous Vide device, some straightforward and some rather sophisticated using PID (Proportional/Integral/Derivative) algorithms (see http://en.wikipedia.org/wiki/PID_controller). This one is definitely at the simple end.
I have found that there is some voltage swing in the temperature sensors, but I have not noticed significant overshooting in the water temperature, using my approach. To address the voltage swing, I use a simple smoothing algorithm, averaging previous samples, limiting the number with the definition of MAX_SAMPLES. Next I set the default target temperature to a value which is medium rare for beef. If no further adjustments are necessary, it will function without an LCD display, serial input or adjusting buttons. Otherwise, adjustments may be made through a USB connection to a computer or through up and down adjusting buttons. Monitoring temperatures may be done through a USB connection to a computer or through an 16x2 LCD screen attached to the Arduino.
Step 1: Gather Materials
For the Controller:
1 LM34 or LM35 Temperature sensor (LM34 is the Fahrenheit version, LM35 is the Celsius version)
LM34 - Jameco Electronics
LM34 - Ebay
LM35 - Mouser Electronics
LM35 - Newark Electronics
LM35 - Ebay
2 SPST momentary contact switches
1 16x2 LCD Display
1 Voice Grade Keystone Jack - RJ11/RJ12 type (such as Leviton 41106-RW6)
1 Electrical Wall Plate, QuickPort Single-Port, 1-Gang (such as Leviton 41080-1WP)
1 Voice Grade RJ11 Plug (if you have a modular telephone with four wires connected at the RJ11 plug, you can use one end of that and won't need a crimping tool)
1 9/32x0.014 (7.14mm x 0.355mm) red brass tube (I found this at a local hobby/model train store)
1 T-1 3/4 (5mm) LED
1 “SNAP-IN” T-1 3/4 LED HOLDER
1 rubber grommet
For Power Switch Tail:
5' 18 guage, 3-wire electrical cord
1 120v male 3-prong plug (if you have a leftover PC power cord, cut off the female end and you have the wire/plug already connected)
1 5v relay
1 120v Duplex outlet
1 Duplex outlet cover
1 1-Gang Non-Metallic New Work Box with Bracket
If you want to avoid building the Power Switch Tail, Sparkfun sells one at http://www.sparkfun.com/products/10747. I do not have one, so I have no experience with it. It looks like a two wire hookup (do not use their ground terminal 3), but you are on your own.
The Cooking Vessel
1 Dumb Slow Cooker - This is the most important piece of the system since you can't cook anything without it. The feature it must have is a simple mechanical
Step 2: Preparing the Project Box
In my first attempt, I used blue painter's tape and drew on it where I wanted the various holes.
I cut down the modular outlet cover to a reasonable size with a bandsaw.
I used a Forstner bit to drill the recess for the back of the modular outlet cover and used a Dremel tool to cut the opening for the LCD panel. I don't have enough skill with the Dremel and the rectangle I cut was very sloppy. The layout was bad, too. The rectangle cramped the wire path for the LCD and the placement of the cut-down modular outlet cover had one corner of the cover obscuring one of the box cover screws.
I discarded the plastic cover and used a CAD program (DoubleCAD) to create a layout to print and glue to the aluminum cover, with spray adhesive. I used a nibbling tool (Jameco, Radio Shack, Newark) to cut the rectangles for both the LCD panel and the recess for the modular outlet cover.
Next, I drilled the 1/4" hole for the LED mount and the other holes to fit the UP/DOWN momentary contact switches I used.
The hole for the grommet was drilled in one end of the box. The hole was centered in the end and offset from the top to allow for the full width of the grommet to just fit below the cover. Cuts (approximately) tangent to the hole were made with a hacksaw, making a "U"-shape, to allow the grommet to be slid up to the hole. The grommet was cut so that it could be fitted around the power cord, in this case a USB cable.
Holes for mounting the LCD panel must be laid out very carefully. Put some painter's tape on the back of the cover, where the holes are expected to be, place the LCD panel in position and mark the hole location with a long thin Sharpie marker or a thin pencil lead. Remove the LCD panel (of course) and finish by center punching and drilling the holes. I found it best to use 4-40 3/4" machine screws with a hex nut between the cover and LCD panel, as well as the hex nut to secure the panel. The extra nut acts as a standoff for the right amount of spacing between the panel and the cover.
Step 3: Controller Electronics
Collect two groups of wires, namely all connections to +5v, and all connections to ground, solder each group together and protect the connection with heat shrink tubing or electrical tape. Alternatively, you could use small wire nuts. Make the wires about three inches each and use the color code red, for +5v, and black for circuit ground. There should be six black and four red.
Solder one black wire to one contact of each of the push button switch contacts. The other contact of each of the switches will connect to either pin D4 or D5 of the Arduino.
Solder the cathode of the status LED to a black wire. Solder a wire to the anode of the LED. This will connect to pin D13 of the Arduino.
For connections to the LCD driver, I used female/female jumper wires, which are connected in pairs. Two pairs make a very nice socket to slide onto the driver's pins. A red and a black wire are each connected to the f/f jumpers to supply +5v and ground to the LCD driver. Two male/male jumpers connect the TX and DX data f/f connectors to Arduino pins A0 and A1. [As an afterthought, I might have used another of the PC power cable connectors, as I did in the Power Switch Tail step.]
The RJ11 jack has a two color codes printed on it. Follow the one with the black/red/green/yellow. For the plug that goes into it, which will connect to the temperature sensor, use the black/red/green/yellow order (hook on the bottom) found at http://www.westernet.net/Help/RJ45.htm
The connection to the power switch tail uses a 3.5 mm stereo jack. The three terminals of the jack are called Ring, Tip and Sleeve. Connect a black wire to the sleeve, a yellow wire to the ring and a red wire to the tip.
Step 4: The Temperature Sensor
The probe will be connected to the project box using an RJ11 plug. Follow the color order shown when making your own cable connection. If you are using a pre-made telephone cable, be sure that the wiring is in the order shown in the diagram, black, red, green and yellow, viewed from the top, the hook being on the bottom. Be aware that, in commercially made cables, the color order of one end is the reverse of the other end.
In making connections to the LM35 or LM34, the bare wires and solder joints should be covered with heat shrink tubing or electrical tape. Using four conductor telephone, solder the red wire to the +Vs, the black wire to GND and the yellow to Vout. The green wire will not be used and should be snipped.
The temperature sensor needs to be waterproofed. I used a 9/32x0.014 (7.14mm x 0.355mm) red brass tube, which I bought at a local hobby/model train store. It was just large enough to contain my sensor and the tubing insulation. Cut off a section which will cover the sensor and wires beyond the point that the cable cover was stripped.
The next step has the potential to be extremely messy, so take the necessary precautions to cover any work surface you don't want smeared with silicon.
Begin with a hefty squirt of silicon into the empty tube. Coat the sensor and uncovered wires up to and just past where the cover begins. Insert the sensor into the tube, twisting as it goes in. Withdraw, slightly, and recoat with silicon. Reinsert and repeat until you are satisfied that the sensor and uncovered wires are thoroughly encased. Put aside and allow to set.
Step 5: The Power Switch Tail
Using the wires from the connector, take the 3.5mm stereo jack and connect a black wire to the sleeve, a yellow wire to the ring and a red wire to the tip.
The housing is a "New Work" single gang outlet box. It is a lot cheaper than a project box and easier to work with, since it is made to accept a power outlet. Cut the mounting off. Drill holes for the power cord grommet and the stereo jack. Mount the jack with its associated connector for the relay. Press the grommet into its hole and feed the power cord through the grommet. The hot side of a power cord without colors will be smooth. The neutral wire will have ribs. If there are colors, the black will be hot and the white will be neutral. Connect the hot wire to the common terminal of the relay. Connect a wire from the NO (normally open) relay terminal to the hot side (brass colored screws) of the power outlet receptacle. Connect the neutral wire to the neutral side of the power outlet receptacle (silver colored screws). Connect the power cord green wire to the green screw (ground).
Connect the modified connector to the relay so that the red wire connects to the VCC pin. At this point the Power Switch Tail wiring is done.
Step 6: The Code
During setup, the hardware is initialized, then the temperature sensor is read. The reading is used to populate a circular array used for smoothing. A splash screen is displayed on the LCD and, after a delay, the current temperature and set point are displayed.
The main loop period is 100 ms.
In the main loop, the serial input is read. If a byte is present, it is processed. If it is not a digit, CARRIAGE RETURN or LINe FEED, it is ignored. If it is a digit, its value is accumulated in a temporary variable and control returned to the loop. If it is a CARRIAGE RETURN or LINE FEED, the accumulated digits are treated as the new set point. Note that there is no reasonability check on the set point range. Take some personal responsibility and pay attention to your typing. You should not be able to damage anything by typing bad numbers.
Next, the UP/DOWN switches are queried and, if either is pressed, an internal loop is used to increase or decrease the set point for as long as the switch is pressed. The initial update time is 500 ms, but after five iterations, the update time is halved, to speed up processing.
The temperature is read on every fifteenth loop or 1.5 seconds. The macro definition
Temperature and set point are sent to the serial line as simple text, by default, when either changes. To produce XML to be sent on the serial port, uncomment the macro definition
Step 7: Putting It All Together
Step 8: Results
Well, that's it for now. Bon appétit!
Have fun and share.