UberFridge is a homebrew fermentation temperature controller that I have built from my old fridge. It runs on an Arduino Nano and an Asus WL520GU router. It can control the temperature of a fermenting beer with 0.1 °C accuracy. Temperature graphs and settings can be viewed in a web interface over WiFi.
Up until now I fermented my beers in a bucket in my kitchen. Because ales usually ferment around 20 °C, this is fine when it’s not to hot outside. Last summer I had to stop brewing for a few months because the temperature in my house got up to 26 °C. To be able to brew all year round and to have a bit more control over the fermentation temperatures I started my UberFridge project. For a quick overview of the features, check out the video:
Features
- 2 temperature sensors, one in the fermenting beer and one in the fridge.
- PID control of the beer temperature with 0.1 °C accuracy
- Predictive on-off control for the fridge temperature to keep it in a -0.5 to +0.5 °C range.
- Modes of operation: constant beer temperature, constant fridge temperature or beer temperature profile
- 4×20 character OLED display
- Data logging on a USB stick in JSON and CSV format
- Web interface over WiFi
- Graphs of beer and fridge temperature history
- Change mode of operation and temperature settings
- Temperature profile over time can be set in a Google Spreadsheet
- Arduino can be reprogrammed via web interface
Costs
The overall costs are surprisingly low. The system consists of:
- My old fridge
- An Arduino Nano
- A second hand Asus WL-520GU router
- A NewHaven NHD-0420DZW-AY5-ND OLED display
- 2 LM35 temperature sensors
- Other small electronic components
Total costs are under 100 euro.
Communication between subsystems
The biggest challenge in building my fermentation fridge was that it runs on many different levels, all with different programming languages. I was new to Python, PHP and JavaScript, so I learned a lot from this project. These are the layers in the system:
- The Arduino runs the temperature control algorithm and the interface on the fridge itself. (C++)
- The router runs DD-WRT linux with Optware from an 4GB usb stick. (shell commands, mostly executed by PHP)
- A python script running on the router talks to the Arduino over a USB serial port and talks to the web server through an AF_UNIX socket. The temperatures are logged in JSON files for the web server and CSV files for archiving. (python with gviz_api and pyserial)
- The router runs the web server lighttpd to provide a web interface where the graphs can be viewed and settings can be changed. (PHP)
- The interface is created with jQuery UI and the Google Visualization API. Graphs are created on the client side by combining multiple JSON files in one graph. A temperature profile can be created in a Google Spreadsheet and uploaded to the fridge at the click of a button. (JavaScript + AJAX requests to PHP)
Source Code
I decided to release the entire code of UberFridge as open source. It is licensed under GNU GPL v3. You can find the source code at Google Code.
I have decided to split the content into multiple articles, so click the articles below to read more on each part of the project.
The build
Arduino
- Eleminating noise from sensor readings on Arduino with digital filtering
- Controlling fridge and beer temperature with a predictive on/off algorithm and PID
- Controlling an OLED character display with Arduino
- Storing settings between restarts in EEPROM on Arduino
DD-WRT and Linux
Tying it all together: Arduino + Python + PHP + Javascript
- Communicating between Python and Arduino with pyserial
- Logging sensor data into Google annotated time line graphs with Python and Arduino
- Communicating between Python and PHP/JavaScript with AF_UNIX sockets
- Getting my fridge to follow a temperature profile from a Google spreadsheet
- Building an interactive user interface with jQuery UI




This is such a cool project thanks for posting. I am going to build this. I will make a video and post it when I am done. Do you have any good beers you would like me to post on my site? Thanks again for the great info.
Have you tried using this for lagering?
thnx
I have not used it for lagering. I don’t plan to anytime soon either, because I like ales.
I can tell you however from early tests that the temperature measurements get very noisy at 5 degrees Celsius, 7 degrees is no problem. I am not sure whether the LM35′s or the AVR’s ADC’s are the cause. I will switch to Dallas DS18B20 digital temperature sensors soon, which I expect not to have this problem.
Excellent work all around on this project.
I’m curious…do you normally not use an airlock during fermentation? It seems that your sensor very easily just “dangles” from the top hole into the beer with no seal around it, which I’m a little bit surprised by. Then again this could be a European style of brewing which I’m oblivious to
Also are you dry hopping within the same primary fermentor? That would definitely give you better consistency of temp reading during the different brewing stages I suppose. I personally rack to a carboy during the dry hop stage, which is a glass container and might be harder to get the sensor to ‘drop’ into.
I’m considering doing a varient of this idea however I’m not sure how I’m going to insert the temperature sensor through my airlocked situation. Perhaps with a flat cable that can run under the lid without preventing a full seal.
Thanks! I always use a blow-off tube. I just drilled a hole for the sensor cable and glued it airtight. The video is from an early test with water.
I don’t use secondary fermenters at the moment, but because fermentation has almost stopped I don’t think temperature is a big influence in secondary.
What you could do is drill a small hole in your stopper next to your airlock hole, run the cable through and fill it with glue. What I have also seen often is a ‘temperature well’ through the side of the fermenter.
Thanks for the reply! Pinning a small hole through the existing rubber stopper sounds like it would work, I’ll try giving that a shot.