Exactly the same process as previous Sous-vide Steak (medium-well) attempt but this time 3 hours at 59°C. Though I am unable to produce appetising food photos… maybe I should take cooking and/or photography lessons.
A firm, well textured exterior that has a delightfully full flavour, cutting into it reveals the tender and juicy interior. Unfortunately slightly too rare for my liking, but nonetheless exceptionally prepared medium-rare steak given the minimal effort involved.
Anyway, that concludes USB-controlled temperature regulated Forebrain-powered sous-vide Mini-fridge. It is time to turn to running a business…
Information about the Forebrain dev board:
I’ve decided to pull out all the stops and test the fridge at a higher temperature of 65°C (149°F), which represents almost the highest temperature we would need the fridge to operate at. I had a little concern with the silicone sealant holding up, and this was the first time that I’ve had the the water line above the sealant.
At this temperature, I would expect beef to be cooked medium-well.
Choice here is rib-eye steak, good quality with reasonable cost. We season the steak (salt, pepper, a touch of garlic), and water-immersion seal in a sealable bag.
Into the fridge, preheated to 65°C with 2 litres of water. I’ve increased the proportional gain to 80, and reduced the integral gain to 0.05 (changed from 60 and 0.1, which resulted in a bit of overshoot).
After 3 hours, the steak is an ugly grey colour, along with a myoglobin saturated puddle…
…but Grill Skillet can fix that!
Result! To create a nice harmony of colours, the steak is served with a (amateurishly prepared) protatoes and mixed greens.
Medium-well done steak is less juicy than medium and rare stakes, and lack the flavour highlights. Not everyone likes steak that way. But for those who do, medium-well is quite difficult to achieve without ending up with a piece of leather. Cooking sous-vide produces medium-well steak with a perfect chewy texture with just the right level of juiciness and with no risk of turning it into a dusty charred lump. This steak was absolutely perfect for medium-well, and the amount of effort to get it so was minimal; a triumph for sous-vide mini-fridge!
Take 2: This steak was cooked at around 61°C, intended to achieve a perfect medium steak, but then I may have overfied it afterward, causing the inside to cook further until it was as well done as the last attempt. Cutting into it revealed a bland grey-coloured interior instead of slightly pink of a medium steak.
So I tried a little harder to calibrate the PT100 readings, although I don’t really have the right equipment for that.
Setting the target to 35 degrees.
Wait for the temperature to rise, and watch the PID output change.
Open the lid and quickly check the temperatures with all the thermometers I can find!
Repeat after filling the fridge with ice (sorry no pictures), and then apply linear calibration.
Finally, with the hacked mini-fridge turned temperature-regulated sous-vide cooker, it’s time to cook some salmon!
DISCLAIMER: I’m an engineer, not a chef! There are plenty of really good sous-vide recipe sites out there, if you try these, there are no guarantees of edibility whatsoever.
Tools and materials used: 1x hacked mini-fridge, 1x salmon fillet, seasoning for the salmon (in my case, salt, pepper, beer that nobody wanted, light soy sauce, parsley, dill).
Seasoning the salmon. I am using the same seasoning for the salmon as my microwave salmon recipe: dash of salt and pepper, and then slather with light soy sauce and beer (normally I would use an asian beer – Tiger or Tsingtao, but here I’ve used a bottle of Becks that has been lying around for a while now that nobody’s been willing to drink), and some herbs (parsley and dill).
Sealing it up: Normally with sous-vide cooking, the food is vacuum packed (“sous-vide” means “under vacuum”), I didn’t have a vacuum sealer or vacuum bags, so I’m using the next best thing – food bags. These are Tesco food bags, and I’m specifically using these because they’re microwave safe (I take that to mean it’s not going to leach any nasty chemicals at high temperatures).
To “vacuum” seal these bags, I can simply immerse it in water. The water squeezes all the air out of a bag. The result is almost as good as a vacuum packer, and plenty good enough for sous-vide use.
Next I set the mini-fridge to 50°C via USB with my control app (thos following the build may remember that I neglected to actually install any buttons on the outside of the fridge, and so all the controlling is done over USB). The PID controller gains are set to P=60, I=0.1, D=0, values that gave us good results when I was doing the PID tuning previously. Again, if anyone wants my code, contact me!
In it goes. The salmon is kept off the bottom with a simple plastic construction (made from the mutilated halves of the plastic shelf which came with the fridge). Next time I’ll add a bit more water.
One thing I had been concerned about was the possibility that the temperature inside the fridge would drop by a large amount when the cold food went in. The data log does register this drop, but the effect was not too bad. It’s possible to quite clearly see the rapid drop from 50°C to 48.5°C as the salmon was inserted (the two sharp drops correspond to the heat loss when the fridge door was opened, first to insert the plastic frame, and the second time to insert the fish).
The temperature recovers slowly (since the fridge’s peltier element is only capable of producing about 70W of heat at those temperatures), however because of this slow rise, the integral component of the PID controller has time to wind up, resulting in a large overshoot as the integral unwinds. I should be able to reduce the effects of this by adjusting the PI gains next time, however the easiest thing for us to do is to raise the temperature to a couple of degrees higher than before putting the food in.
After 40 minutes, the salmon is medium done, the way I like it. People who like their salmon rare, or well-done, would set the cook temperature higher or lower by a few degrees.
I also like my salmon to have a bit of crispiness, so it goes onto my cast iron grill skillet briefly for some Maillard reactions (I can’t emphasise how awesome this grill-skillet is, it can turn regular bacon into EPICBACON).
Unfortunately the salmon fell apart a little bit on the skillet, and it looked so good that I started eating it before I could take this next photo, but this is truly incredible salmon – underneath the crispy and aromatic outer layer is an incredibly tasty centre with the perfect amount of juiciness and tenderness, a gentle suffusion of seasoning, and a texture far more consistent than can be achieved through other means of cooking.
This photo doesn’t do justice to the tastiness of this salmon, I will have to add some pictures when I next cook some salmon.
Again, can’t attach zip files to WordPress, if anyone wants source code, contact me. I may put things on GitHub at some point
With the fridge built and tested, it was time to tune the PID controllers. I wrote a little add-on to the old USB temperature probe script to handle sending the PID gains and target temperatures (and also controlling the LCD display mode and backlight). (In the end I settled only PI control because of saturation effects).
After a bit of tuning with just the proportional gain, the results weren’t bad, quite clearly some oscillation going on here, with an error of a bit over half a degree.
So I add in some integral gain via the Ziegler-Nichols method. Again, not bad, but still a bit of steady-state error.
After a bit more tuning, and some substantial optimisation and bug fixing of the code, I start getting closer. A bit of an overshoot, but generally accurate to within maybe 0.3 degrees now after it settles.
This time it turned out that the method I was using to avoid integral windup (limited integral history) was causing the steady-state errors, so I adjusted the PID implementation to use a different method (disable the integral until close to the setpoint):
Perfect! The graph shows that if we tune the PI to get rid of the steady state errors, I can achieve +/-0.05 °C resolution (I believe the resolution after oversampling to 1 minute is accurate)
Note: resolution doesn’t mean it’s ACCURATE, I haven’t spent too much time calibrating it!
I think it is time to cook something…
Finally, I got around to writing code for the fridge. WordPress doesn’t let me upload zip files, so let me know if anyone’s interested in the code.
I did some thermal testing of the fridge test its insulation (and also do some calculations on thermal loss). I filled the fridge with about 1.6l of water, set its output to maximum, and logged the temperature as it heated up using my tempearature logger code (the data is coming off the USB cable using USB HID).
Plugged the USB cable in. Surprising effect from the USB LED shining through the thin plastic.
Filled about 1.6l from the tap
And heated up. Bubbly!
The water from the tap was some 10 °C below ambient. Also It would seem that opening the lid to take that last photo has quite a noticeable effect on the temperatures.
Heating is almost painfully slow, taking some three hours to reach its peak. There’s a noticeable dip at the top there where I opened the lid to take the photo. This dip is very noticeable in later graphs.
The power flow diagram for the system looks something like this:
The peltier acts as a solid-state heat pump, putting electrical energy in results in a transfer of thermal energy from one side to the other. As a result, one side gets cold, while the other gets hot. However, the resulting balance is not symmetrical, since the input electrical power ALSO results in a heating effect.
The net result is that the peltier creates much more heating than it does cooling. This is good news for us because I WANT to use that extra heat, it means I get more heat than it has expended energy for (i.e. maybe 60W of heat from only 30W of electrical energy, a coefficient of performance of 200%, compared to 100% for regular resistive heaters). This is however bad news for fridge mode, and also people trying to use peltiers to cool their CPUs, as they have to dissipate much more heat than the would otherwise.
Because I know the volume of water, and its temperature rise over time, I can easily calculate the thermal energy entering the water over time, i.e. I can calculate the power gained by the water:
E = m c ?T
P = E / t
Plotting the power gained by the water over time reveals that this value starts at about 65W, and drops over time (as the water temperature increases) to about 20W.
I can later graph this power gain against temperature, which is a more useful graph. However, I first turn off the heater and let the water cool by itself, and use the same equation to work out the power lost by the water through the insulation as a function of temperature gradient (the difference in temperature between the inside of the fridge, and the outside). This is the red arrow in the power flow diagram above.
The data is a little patchy here, and incidentally it also exhibits a little jump where I opened the lid a second time to check the calibration of our PT100 probe with a meat thermometer. I must remember to stop screwing with the results like this…
I assume that the power lost is linear with temperature gradient (a valid assumption based on the physics of thermal energy flow), and so I find the power loss to be approximately 0.44W/°C.
I can add this value onto our results for Power Gained, to find the total power entering the fridge from the peltier as a function of the temperature gradient:
The results are very interesting, as it shows that the thermal power produced by the peltier at zero temperature gradient (inside of fridge at same temperature as outside of fridge) is around 60W, which is quite a bit higher than the maximum electrical power consumption of 40W (according to the sticker on the back of the fridge). This is good: it is heating the water with more energy than the amount of electrical energy put in.
I highly suspect that the fridge is using a 12706-type 60W peltier element, since such elements are extremely common and cheap (you can get them at about £3 a piece).
Digging up the datasheet for the 60W 12706 peltier elements, I can see that the specs match those of the fridge. The fridge claims a maximum electrical power consumption of 40W, which is consistent with running the peltier at 12V (it is only 60W when running at around 15V).
I can also make use of the graph of thermal power transferred against temperature difference:
I can take the 3.0A line (for this is about where we are operating), this is the green arrow on our schematic, and subtract it from the total power (the pink arrow on our schematic, and the pink data points on our graph), to find the approximate electrical energy consumed. (There is a minor flaw in this: by taking the straight 3.0A line, I’ve assumed that the electrical energy consumed is constant, which is not the case, but it is a reasonbly close estimate).
The green line is this data (above), and the purple points are the calculated electrical power consumed. Showing an actual electrical power consumption of about 30W, consistent with what I expected. (Although I would normally expect the electrical power consumed to drop as temperature gradient increases owing to the thermoelectric effect).
So I’ve proved that I’m getting somewhere between 120% and 200% of the electrical power going in for heating. The mini-fridge temperature controlled system is therefore extremely energy efficient, more-so than regular resistive heaters used in other slow cookers and sous-vide cookers. The bonus is (in the summer anyway) that my room also gets colder as the heat is pumped into the water (although probably not a noticeable amount).
With most of the components installed in previous steps, it’s a case of bringing in al the parts and connecting them to Forebrain.
Pictured above is actually one of my MK5 Forebrain prototype units (
), hence the colour, lack of silkscreen, and the fact that all the components were lovingly soldered by hand. The bit of stripboard on the left holds the potentiometer for the LCD’s contrast input, however it turns out that the best setting for this is all the way down, so it would have been sufficient to tie the LCD’s contrast pin to GND.
Connecting the PT100 temperature probe:
I’ll supply the code at some point if anyone requests it.
A hole is drilled through from the back electronics compartment all the way through to the inside of the fridge for the PT100 probe. All the gaps are sealed up with RTV sealant.
Finally, the whole shebang is perched on top of the fan at the rear, with a hole in the side cut for the USB port. Since I neglected to install any buttons (and the buttons on Forebrain being unavailable), the only way I am going to control this fridge is via USB. This will perhaps become the world’s first USB mini-fridge.
Oh, one last thing – because I am going to fill the inside of the fridge in water, I need to have the fridge stand on it’s back. Because the air intake is at the back, I need to stand it off with something. This turned out to be as simple as transplanting its rubber feat from the bottom to the rear.
Ready for action…as soon as I get around to programming the code for it…