UberFridge

Update!

UberFridge has been discontinued and has been replaced with BrewPi, a Raspberry Pi based brewing controller!
I do not recommend building UberFridge anymore. Please go to www.brewpi.com

———————————————————————

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:

UberFridge communication overview

  • 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

DD-WRT and Linux

Tying it all together: Arduino + Python + PHP + Javascript

Updates

37 Comments

  1. 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.

  2. 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.

      • What an awesome project? Have you switched to the new digital temperature sensors yet? If so, how have they been working for you. I would build this fridge to lager, so I do need to reach cooler temperatures.

        Thanks!

        • Not yet. But I will before I brew my next batch. For those low temperatures, the digital sensors will be better. The analog sensors are noisy with low temperatures.

  3. 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.

      • Excellent idea!

        I’m a little reluctant on drilling a hole in the airlock, because I have so many of them. What I wondered is whether your temperatures readings would be far off if your sensor cable was in a container of water next to the carboy? Any thoughts on that?

        Also, I wasn’t sure what you meant by a “Temperature Well”.

        Thanks!

        • I meant a thermowell, if you google that you’ll see what I mean.
          I would not use a water container, because the fermentation produces heat. My fridge temperature is 2 degrees below beer temperature during the first 2 days. If you glue the sensor to the side of your carboy and isolate it from the air, it will give reasonable results I guess.

  4. 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.

  5. This is an awesome project! Thank you for sharing!

  6. you’d never think you’d have to update the firmware of your fridge… nice job tho!

  7. This is vast overkill. A top of the line thermostat with remote access will allow one to monitor and adjust the temperature of the box from any location.I don’t agree with a need to monitor the box and the brew temperatures since the brew will reach box temperature.
    A better approach, if room is available, is to convert a chest freezer to the task.Greater capacity is gained from this approach.

    • I have to disagree with you here. The beer temperature will always be a bit higher than the box temperature, because fermentation in an exothermic process. During the first 2 days of fermentation, my fridge temperature is about 2 degrees below the beer temperature.

      Monitoring of the fridge temperature has 2 reasons: it is used by the temperature control algorithm and I can also use the fridge as a normal fridge.

  8. “This is vast overkill.” – zevgoldman

    First, what Elco said.

    Second, who cares? This is an awesome project that shows a high degree of technical skill and innate curiosity.

    I’m sure the first time meat was cooked over a fire there was a neanderthal sitting nearby saying “This is vast overkill. A firm grip on the leg bone will allow one to chew the meat just as well and with less trouble.”

    Thanks Elco, for being inventive. I tip my hat to you.

  9. Just found this site and project and have looked for one for some time….Can’t thanks you enough for your generosity….I’ll buy u a beer anyday of the week…have’t read the how too’s but I’m assuming this is a linux system you are using? Thanks again

    • Yes it is a Linux system. Any Linux system will work. I am using Raspbian “wheezy”, the recommended RPi image for the next version

  10. Left a dumb message somewhere about wondering if it was Linus based before I had the chance to read very much….was just so excited to see the awesomeness of this project…..as I said earlier I’d love to buy u a few beers over this and just say thanks again for an absolutely awesome job…..if you are ever in tha states say hey and I’ll make those beers appear…..oh one thing before I shut up….I’ve been downloading the files and can’t seem to get access to the files in the font folder and the images folder…..any suggesions on how to get them….is there a zip of the whole project? anyway really just wanted to say Thanks,,,,can probably figure out how to get access to the data in those files….sincere regards, lee

  11. +1 to the messages of congratulation and support.

    I’ve just started to think about doing this myself, having produced some rather poor brews since my old-school digital thermometer controller died. I agree with your comments about using the Dallas 1-wire sensor, I expect that to be a lot better for noise.

    My plans involve no RPi; I think I will try with websockets and to put everything on the Arduino. I’ve also been thinking about adding a specific gravity sensor and alchohol sensor for good measure. I have doubts these will work very well; I’ll have a go at using a differential pressure measurement for SG and the MQ-3 sensors are not supposed to do well in high relative humidity.

    Anyway – this is obviously a very satisfying way of brewing.

    And thanks for the notes on filters; I’m just getting to grips with this stuff and wanting to avoid complex stuff I don’t have time to understand.

    Cheers, Adam

    • Filtering will be improved a lot in the first BrewPi release. I have just completely rewritten the Arduino part and am waiting for an Arduino Leonardo to arrive so I can debug with JTAG. Everything will be nicely put in C++ classes and it will include an AVR Studio 6 project, so you can use their great VS2010 shell.

      I have a prototype specific gravity sensor ready to be tested as well :)

      I hope to be able to release the first version somewhere next week. Depends on how well the debugging will go.

      • Have you released the writeup for the BrewPI controller anywhere yet? I’ve been following the UberFridge comments for a while waiting before I start to build something =D

        • First code will be online this week :) Running the first tests now.
          I will include eagle files for an Arduino shield you can make on perf board.

          • Awesome! Are you still going with the plan of arduino for the primary controller, with the Pi taking the place of the wireless router? If so, are you just running ethernet for the Pi or did you find a wireless usb adapter that worked? I’m thinking I’ll start some ordering of the main parts (I’ve done atmel work before, just never with a *duino board =))

          • Indeed, the Arduino is the main controller. It monitors the temperatures, drives the display, on screen menu, and actuators. It can receive settings and output settings as JSON since the last version :) It acts as a slave communication device to python on the Pi. I use a wireless adapter that came with my router, but I have also ordered an Edimax EW-7811Un. It is recommended a lot and very cheap. If you are ordering an Arduino, get the Leonardo. It’s the only one with JTAG.

      • The SG sensor is intriguing. I’ve been thinking about this problem too. I was thinking of a float and a force sensor, or a float attached to a slide to form a variable resistor or capacitor. How did you do it?

        • I am weighing something that is completely underwater, or should I say underbeer? Basically I am measuring the weight of the beer that is displaced by a constant volume. That sounds easy, but it was extremely hard. Eliminating all drift from the sensor and electronics is difficult. I am pretty sure I have a working solution, but the first test with real beer will start this week. I will publish more details after the test.

          • omg, know it’s difficult, and impressive if you can address drift, so big Congrats if you have solved this. So much in brewing is dependent upon knowing the current gravity, yet opening the fermentor to take a sample introduces many other problems.

  12. Would it be possible to use this to ferment chicken soy milk broth? It is very hard to ferment it in the house with normal temperatures and dust can be a problem. Badly fermented chicken soy broth can be poisonous.

    I think too, it would be nicer to have the software written using Visual Basic. Visual Basic is much more simple to understand and would run on any PC. It seems strange to need a WiFi router to do this.

  13. Wow, this is pretty cool. I’d like to see this used for mashing too. Kicking on an electrical heating element isn’t that much different from kicking on a condenser coil to cool.

    Well done!

    • Did you check out BrewPi too?
      I am still getting comments on the old project…

  14. Im looking for an equivalent compoent from rs-components for NHD-0420DZW-AY5-ND as Im not a programer lm looking for a straight swop. Can you recomend one, lower the cost the better. Thank you

    • I don’t know of any OLED alternatives. The NHD-0420DWZ is said to be hd4780 compatible, but it is just slightly different. That is why I modified the Arduino LiquidCrystal library.

      Probably almost any 4×20 LCD display should work, because they are all HD44780 compatible. Also, please go to brewpi.com for a more updated version.

      • Do you think that this particular part would work without modifercation to your code.

        http://uk.rs-online.com/web/p/lcd-monochrome-displays/7200235/

        By the way im stearing away from using a rasberrypi arduino combination due to lack of funds. Sorry but your arduino version is best for me… Thanks for you help. I dont mean to be bothring you.

        Kind regards
        Xander

        • I think it is. You will have to compare the commands at page 17 to that of the OLED.
          The display you picked is out of stock though.. be careful about that.

          The brewpi arduino code (brewpi-avr) on GitHub can also be run stand alone, without the raspberry pi. It has improved a lot since UberFridge, so I highly recommend switching.

  15. I looked at brewpi. I have to say im not a fan. Im not being over critical or rude. But as a new comer to this i must say im lost! The web site needs clarity. A singular page showing the lastest version with a detailed blow by blow linear depiction shiwing exsactly how to build the respective full unit. Any software should be listed by a lirect link. Any design layouts should include a key inforjng the reader what each part is i.e. R1 =10K etc, and last but no means least a parts list made in full from one singular business, which ships intrernationally.

    People may say im being to specific but i firmly beleave that people whuch out such inclusive simple clear and leanerly informatin instructions are highly likly never going to become apart if .such projects

    Sorry for pointing out flaws. But i truly beleave that wiyhout feedback from people whom are new to this type of project. The owners cannot improve.

    Again im sirry if ive offended anybody.

    • I don’t mind you being critical. You are right that the website needs work.
      The schematic is available and the component values are in the PDF. You can even download the schematic as Eagle files. There is a parts list on the Wiki and a PCB layout and pictures of the bottom of the board. I have not documented each bit of the code on the blog, but the actual code is much more readable and has better comments.

      I am working on an Arduino shield. You should be able to buy a complete kit from me soon.

Trackbacks/Pingbacks

  1. UberFridge | Hop Talk - [...] UberFridge [...]

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>