About What is this thing?
For our ECE4760 Spring 2012 (Microcontrollers) Final Project at Cornell University we decided to create a sous-vide cooker (a type of immersion cooker) that can maintain a set temperature for extended periods of time. It can auto-calculate the appropriate time for cooking a certain thickness of meat using heat transfer equations.
Why go through all this trouble? Look at that delicious piece of steak! Normally when cooking meat, the outside cooks faster than the inside, as it reaches higher temperatures faster. Sous-vide cooking however, maintains a constant temperature to slowly cook the entire meat to the same temperature. This allows for relatively low cooking temperatures (140° F) to make perfectly rare and safe meat. The extended period of time under this temperature kills bacteria just as well as a shorter amount of time at high temperatures, without damaging the outside of the meat. Sous-vide cooking also seals in the moisture of the meat while cooking, leading to juicier steaks.
So why make a sous-vide cooker ourselves? What makes our cooker different? We were able to create our cooker for under $75, which is in stark contrast to the $300 sous-vide cookers for home use. Just a sous-vide controller itself costs $150, not including a heating unit. Moreover, we implement advanced features, such as a water level monitor, as well as a automatic timer that can set cooking times depending on the quantity of food cooking.
So did it work? You bet it did! We’ve tested it up to 150°F which is is good enough for medium-well cooked steak (we refuse to cook well done). The system performs perfectly for an extended amount of time at this temperature.
High Level Design
The general idea of what we needed to do for our project is to create a water temperature regulator with a high degree of accuracy. This led to some hardware and software design decisions that we made.
The main objective of the temperature regulator is to maintain a constant temperature throughout the water and to regulate it when cold food is added or warm food is removed. This idea lead to us deciding to use a foam icebox/cooler to hold the water, as it would be well insulated from outside losses. Because we have an insulated box, we opted for a medium wattage immersion heater (around 300W) to keep costs and power down. Overheating the food in this style of cooking is very bad, while under-heating is acceptable since it will be recovered over time.
To maintain the constant temperature throughout the water, we opted to add in an aquarium pump to circulate the water. We need this because the temperature sensor needs to have an accurate reading of the total temperature, the immersion heater does not circulate the water enough by convection and the food should be maintained at a constant temperature. We used a low power aquarium pump that would be running whenever the system is on.
To monitor the temperature of the water, initially we decided to use a thermocouple. Further research into thermocouples showed us the downsides such as relative cost and high circuity precision necessary to read a precise temperature. We decided to use a solid state temperature sensor with a tight degree accuracy.
We decided to use the AVR boards provided by our professor because of our experience programming them and the ease of access. We used a LCD and Keypad along with this for displaying settings information and current temperature, with the keypad for inputting settings.
To control the immersion heater and water pump, we opted for using a junction box with standard wall plugs controlled by a relay module. This would allow us to change what kind of heater and pump we could use. Perhaps most important of all, we could isolate our high voltage components in an insulated plastic box, along with a switch to shut off all high voltage components if necessary. If in the future we decide to build other high voltage projects, this junction box could come in handy.
We decided to use the TinyRealTime (TRT) kernel for running our code. We decided to do this because we would have multiple “threads” running at various times, but with no hard time requirements. A delay in reading data from the temperature sensor or outputting data to the LCD would not result in a malfunction.
We decided to model the system using a proportional-integral-derivative (PID) controller. We feel that the body of water fits this system as there is a lag between heating the water and when the water is circulated and the temperature sensor registers the change. Also, the heating element does not turn hot immediately.
Our Sous-vide cooker has two stages. During the first stage, an empty bath of water is heated to a specified temperature. This is governed by Fourier’s law of conduction, . In this equation, Q is the heat generation, k is the thermal conductivity of the material being heated, and grad_T is the temperature gradient. For our project, Q is simply the power output by the heat generator (300 W) and k is the thermal conductivity of water (0.52 W * m^-1 * K^-1). This lets us determine the temperature distribution at the point where the heating element contacts the water. Since we are using a pump to circulate the water, there is also the convection equation to consider. The convection equation is . This equation can be solved to find the temperature at a given time as well as the temperature at steady state. However, solving this partial differential equation is difficult. Fortunately, we can measure the temperature of the water directly so there is no need to solve this equation. The second stage requires heating food to the desired temperature. This process is modeled by the heat equation . This is a partial differential equation and the closed form solution is an infinite series of decaying sine waves. Although we cannot compute the solution directly on a microcontroller, we can get a reasonable estimate for the temperature at the center of the food. This is because at the center of the material, most of the sinusoidal terms drop out.
We are using a simplified, 1-dimensional model of the heat transfer between the water and the food we are cooking to predict the actual temperature of the food. In this model, we assume that the temperature surrounding the food is kept at a constant temperature. This is a reasonable assumption since we are using the pump to circulate the water and the controller to keep the temperature constant. The second assumption we make is that the temperature of the food changes slowly. This assumption lets us use first order approximations to solve the heat equation without sacrificing too much accuracy. We use this approximation to determine the temperature of the food: . We justify this assumption with the fact that exponential term dies off quickly. Additionally this lets us use more cycles to process the data since the temperature will not change significantly after a few seconds.
The only significant sacrifice we had to make was accuracy in the food temperature. In order to calculate the temperature of the food we needed to use a first order Pade approximation () for the exponential function. This is a quick method which provides reasonable accuracy. The Pade approximation has the added benefit of being strictly less than the actual value of the exponential function. This means that the food we are cooking is guaranteed to be at least the reported value and no more than the water temperature. Thus if we report that the food is at a safe temperature to consume, then we know that the food is safe to consume.
The Sous-vide method of cooking is not patented. There are commercial Sous-vide cookers available, however, since we are not using any components of these devices.
|$8.99||2-Channel Relay Module||Amazon|
|$0.98||2-Gang Electrical Box||Lowe’s|
|$0.74||Combination Wall Plate||Lowe’s|
|$0.59||Duplex Electrical Outlet||Lowe’s|
|$0.69||Single Pole Switch||Lowe’s|
|$2.95||Header Socket/Plugs (5c ea)||Digikey|
Our goal was to keep the total parts under $75. We didn’t have to scavenge anything to keep this goal.
For more detail: SousVide immersion cooker using Atmega644