UberFridge, the first results are in!
It has been a while since I have published UberFridge and this update is long overdue. Now I’d like to finally share the first results with you and you can download my paper on UberFridge for a more scientific and condensed write-up of this project. I have brewed two beers so far: Hoppy Hefe: 3kg Wheat Dry Extract (8,0 EBC) 30,00 gm Hallertauer Perle [6,90%] (30 min) Hops 14,2 IBU 30,00 gm Hallertauer Perle [6,90%] (15 min) Hops 9,2 IBU 120,00 gm Hallertauer Hersbrucker [2,90%] (Dry Hop 5 days) 1 Pkgs Weihenstephan Weizen (Wyeast Labs #3068) [Starter 1500 ml] Hoppy Hefe fermented around...
Read MoreUberFridge hardware and schematics
I have grouped all the circuits used in my UberFridge project in this article. Schematics, a board layout and pictures. A top view of the electronics in UberFridge. My fridge has an on/off button on the top, which made it very easy to reroute it via a relay. The boards at the bottom were already in the fridge. I have encased most of the electronics for UberFridge in a small casing made from an Ikea box lid, see this article. The sensor wires go through the top of the fridge to the light bulb housing in the fridge. The relays are on a separate board. All other electronics are in a plywood...
Read MoreControlling fridge and beer temperature with a predictive on/off algorithm and PID
UberFridge is capable of controlling the temperature of a fermenting beer with 0.1° C accuracy. It can also be set to keep the fridge temperature within a -0.5 to +0.5 °C range. How this is done in an energy efficient manner is explained in this article. Controlling the fridge temperature To control the fridge temperature, I use a predictive on/off algorithm. Why do I need a predictive algorithm? Because waiting on measurements doesn’t work. On/Off actuators The temperature in the fridge cbe lowered by turning on the compressor. To increase the temperature, I just turn on the light in...
Read MoreHow to build an electronics casing from an Ikea box lid
The casing I ordered for my UberFridge project was to small too fit the OLED screen. Not wanting to wait on a new order, I went down to my basement to see what I had lying around. I came across a lid from a plywood PRÄNT Ikea box, which was perfect. In this article I’ll show the steps to transform the box lid into a custom size electronics casing. I use this box in an EXPEDIT bookcase and in that case, the lid is more annoying than useful. So it was collecting dust in my basement, waiting for a better purpose. What makes this box great to use are the metal clamps that you have to put on...
Read MoreProgramming my Arduino over WiFi
My Arduino is embedded in my fridge, so having to take it out every time I want to change something in the software would be very annoying. But luckily the Arduino is plugged into a router, which is running Linux. I set out to get avrdude running on the router, so that I could upload new firmware to the router and have the router reprogram the Arduino. This article gives a step-by-step guide to set this up. Compiling avrdude for DD-WRT linux Edit: You can download the files I compiled on my router here. If you add those to the bin directory on your router, you can probably save yourself the...
Read MoreProgramming a web interface for UberFridge with jQuery UI
jQuery UI is a CSS and JavaScript framework to quickly create a nice looking user interface. I used the Redmond theme to create the web interface for UberFridge. If you are reading this, chances are you are a web developer. You probably just want to see the source code, so here you go. I will only highlight some parts of the user interface, because the source code should be quite self-explanatory. I have discussed how I create the Google annotated timeline charts here and how I communicate with python here, so this article will be about the user interface only. My PHP code contains almost no...
Read MoreGetting my fridge to follow a temperature profile from a Google spreadsheet
I wanted an easy way to set temperature profiles that my fermentation fridge would follow. This would enable me to: Start a fermentation on a lower/higher temperature and gradually bring it to a normal fermentation temperature. Slowly raise the temperature near the end of fermentation to boost attenuation Google spreadsheets turned out to be a nice way to do this: They can be queried like a database They can be accessed from anywhere Working with cells is easier than working with a txt file They work well with the Google Visualization API You can view a sample of the spreadsheet I use...
Read MoreStoring settings between restarts in EEPROM on Arduino
In my UberFridge project I have a self learning algorithm to control the fridge temperature. Two parameters to estimate heating and cooling overshoot are adjusted continuously. I don’t want the Arduino to forget what it has learned every time it is reset, so I store these settings in EEPROM. The Atmega328 has 1K of EEPROM, which is plenty to store a few settings. The EEPROM is byte addressable, so I had to write a few functions to read and write integers and floats. Keep in mind that the EEPROM has only 100.000 write/erase cycles, so do not write to it too often. I write my settings to the...
Read MoreInstalling DD-WRT and Optware on the Asus WL-520GU
To unlock the full potential of an open source capable router, you can install DD-WRT and Optware. This turns the router into a great WiFi capable cheap Linux box. This article gives some pointers on the steps you need to take. Why use an Asus-WL-500GU router? The Asus WL-500GU router is one of the few DD-WRT capable routers that have a USB port. This makes it an excellent choice for communicating with Arduino. With a USB hub plugged into the router you can connect the Arduino and a USB stick for storage. The GU version has the most memory of the Asus routers and should be your pick if you...
Read MoreCommunicating between Python and PHP/JavaScript with AF_UNIX sockets
I wanted a better and more direct way to communicate between PHP and Python than through files. Socket communication was the answer and this article explains how to set it up! My router runs a Python script that monitors my fermentation fridge. Only the python script communicates with the Arduino, so all commands and data requests to the Arduino go through this script. To keep loading times low for the web interface, I needed a fast and direct way to communicate between PHP and Python. Python and PHP run on the same router, so a straight forward way to communicate is through the file system....
Read MoreControlling an OLED character display with Arduino
For my UberFridge project I ordered a 4×20 OLED character display from Newhaven, the NHD-0420DZW-AY5-ND. It is a great display: it is much brighter and much better readable then a normal LCD. At only 25 dollars, it was an easy choice. The display was supposed to be HD44780 compatible, but it took me ages to get it to initialize properly. The folks at Newhaven couldn’t even figure out what the correct 4-bit initialization sequence had to be for Arduino. Finally I found a sequence that worked and modified the Arduino LiquidCrystal library to work with the OLED display. I also added...
Read MoreCommunicating between Python and Arduino with pyserial
In my UberFridge project, my router runs a python script that periodically requests new sensor data from the Arduino. The script logs this data in files for the web server running on the router. All other communication with Arduino (getting the OLED’s content, reading/changing settings) also goes via the python script. The Arduino is programmed as a slave that responds to requests from python. With the pyserial library for python, setting this up is fairly easy. Python code My Arduino connects to the router via a USB hub. The router mounts the Arduino as /dev/usb/tts/0. See this article on...
Read MoreEleminating noise from sensor readings on Arduino with digital filtering
I use two LM35 temperature sensors to measure beer and fridge temperature in my UberFridge project. These sensors output 10 mV/°C, so for my fridge the output ranges between 40 and 300 mV. I wanted to be able to measure differences of 0.1 °C, so 1 mV. That is a very small voltage difference to measure in the presence of noise, so I implemented multiple filters to get rid of noise and increase accuracy. The sensor circuit I have connected the output of the sensors directly to the A/D converter of the Atmega328. The A/D converter is a capacitive load, which the sensors do not like, so I...
Read More


