Fermenter-Bot 9000!

View the live temperature data HERE!


I’ve been home-brewing my own beer for a little while now, and one of the most important things I’ve learned is to control the temperature that the beer ferments at.  If the beer ferments at too high a temperature, then the yeast can produce weird flavors that can make the beer taste strange.  If the temperature is too cold, the yeast may have trouble getting started and they might give up before they finish fermenting.

To help control the temperature of my beer I created FERMENTER-BOT 9000!

Parts List:

  • Arduino Uno
  • Arduino Ethernet Shield
  • Powerswitch tail
  • LCD Screen
  • Thermistor
  • Various Resistors/Pots/Buttons

Board Design:

For the schematic and PCB design I used Eagle Cad.  Overall it is a really nice program, and there’s a free version if you don’t mind being limited to two layers!

Click for big

Click for big

I ordered boards from BatchPCB.  Overall I would highly recommend them if you are not in too much of a rush to get your boards.  It only cost me $26 to have 2 boards made.  Here’s the product page if you want to order the board: link.  The boards finally arrived after 3.5 weeks and they looked most excellent:

All together now!

Arduino Code:

To control the freezer, the Arduino monitors the temperature data and turns the relay on or off to bring the beer temperature closer to the goal temperature.

Freezers like the one I bought have a minimum on/off time specified in the manual, 5 minutes in my case.  If the compressor is switched on and off faster than this time, it could break and I would be sad.  To be safe I set the Arduino to wait at least 7 minutes between switching the relay state.  Unfortunately, 7 minutes of on time for my freezer brings the temperature down quite a bit, I guess it is too efficient!  I added an extra relay output on the circuit board in case I want to add a heating element one day to improve the results.

Error Correction:

To bring the average temperature to the goal temperature, the Arduino keeps a “threshold” temperature:  If the beer temperature is below the threshold, the freezer turns off.  If the temperature is above the threshold, it turns on.  The air temperature in the freezer can vary quite a bit, but since 5 Liters of beer takes a long time to heat/cool, the actual beer temperature actually stays pretty consistent.

Here is what the data looks like for the air temperature, measured with the thermistor just hanging into the freezer, and the fermenter temperature, measured with the thermistor taped to the side of the fermenter.  In the future I’d like to get a thermowell stopper, to get a better temperature reading from the center of the fermenter.  For now, taping it to the side works well enough:

Thermistor in Air

Thermistor taped to the Fermenter

In the future I might change the code to use a fancy PID algorithm, but for now the Arduino code just takes the average temperature over a few on/off cycles, and adjust the threshold temperature based on the error.  The error is calculated by subtracting the goal temperature from the average temperature that was calculated.  The data is collected like so:

Since the freezer takes a longer time to warm up than it does to cool down, the threshold temperature is generally a little bit above the goal temperature.

Overall, I am very happy with the results!  The beer is kept to within +/- 2 degrees, and the average is usually spot-on.

Plotting the Data:

View the live data here: Temperature Data!

I thought it would be pretty cool to be able to check the fermenter’s temperature from anywhere, so I decided to plot the temperature data online!  Plotting the temperature was also really useful for debugging the error correction algorithm.

I’m not a software person at all, but with some help I setup a script that writes the data from the arduino to a mySQL database.  A PHP script then reads the last 12 hours worth of data from the database and plots it using Flot.

Brewing Time!


Future Plans:

  • PID control for both the freezer and some sort of heating element inside the freezer.
  • More accurate temperature measurements.  I’d like to be able to get ~.1 degree accuracy.
  • A thermowell stopper for the fermenter.  This would help get more accurate temperature measurements.
  • A nice project box to hold the Arduino and the screen.
  • Cold-Fusion Powered.

Update! 2-27-2012

I now have a thermowell stopper to get temperature readings from the center of the carboy, instead of taping the probe to the outside.

Thermowell Stopper!


  1. Arduino Code
  2. Web Scripts (coming soon!)
  3. PCB Schematic File
  4. PCB Board File


Creative Commons License
Scott-Bot.com by Scott-Bot is licensed under a Creative Commons Attribution 4.0 International License.

One Comment

  1. check my source…

    […]just beneath, are many entirely not connected web pages to ours, however, they are certainly really worth going over[…]…