What is it?

A nanobrewery is a very small brewery.  There is no exact definition, but it’s somewhere between using a 5 gallon pot on a kitchen stove and a microbrewery.  Ours is 2 barrels, utilizing 55 gallon drums.

The project encompasses not only the physical brewery, but also the electronic circuits and software used to automate the brewery.

The brains of the system are a PC running Processing, connected to an Arduino Mega2560 running Firmata.

If you’d like to build one of your own, all the materials on this page are released under the GPL v3 license.  While the electronics and software are fairly straightforward, unless you have very deep pockets the hardware will depend on the actual parts you can obtain.


The project has it’s own domain– Eventually, the contents of this page will transition there.

The brewery GUI code is hosted on BitBucket.

The Firmata we programmed our Arduino Mega2560 with can be downloaded here.

The Arduino Mega2560 used can be purchased from Amazon.

Binary build for 64 bit Windows, August 25th 2013

Binary build for 32 bit Windows, August 25th 2013

There is a photo gallery of the brewery construction.

Goals & Requirements

The goal of the nanobrewery project is to fully automate a 2 barrel brewery using easily sourced parts.  Striking a balance between easily sourced and inexpensive parts is a balancing act since many of the industrial parts used are quite expensive when purchased new.  In those cases, we did not rely on finding an unbeatable deal on some surplus parts, but just bought items that were easy to get on eBay.

Ideally all the operator has to do is load the correct hoppers with ingredients and hit a GO button.  6-8 hours later, up to 55 gallons of beer is ready for fermentation.

Cleaning is performed manually.

The system must be safe to use unattended.

The system must work within the constraints of residential property: small enough to fit in a garage and not exceed the power supplied by the utility company.

All parts in contact with the product (beer) must be food grade.

Current State


The GUI is just a computerized control panel.  No processes yet.

Behind the scenes, it’s also fairly bare bones.

But what’s there, works!


The schematics below are functional but need improvement.  Primarily, we’re still working out the safety interlocks.  In an computer controlled system, it is prudent to put local hardware interlocks on anything that could be a safety risk or potentially damage the equipment.

The Brewery Itself

The piping diagram included with the code is the best overview of the parts involved.   A non-exhaustive parts list is on this page.



The system consists of 3x 55 gallon stainless steel tanks purchased on eBay.  Yes, you can buy these on ebay!  They’re just stainless steel drums and of course need fittings welded on.

Pumps are 120v, 17 GPM models made by March.  These are controlled using SeeedStudio relay boards for now, but these boards are not satisfactory for this application for a number of reasons.

Valve actuators are Belimo AF-24 proportional and on/off valves.  These run off 24VDC or 24VAC.  The proportional valves accept a 2-10vDC control signal.  This is fairly standard among actuators and we also have some Johnson Controls actuators with identical specs except that unfortunately they are not powerful enough to open our ball valves.  Actuators were all purchased on eBay.  The hard part is mating these valves to your ball valves.  The circuit to control these using an Arduino 5v PWM output is reproduced below.

The ball valves were also bought off eBay.  Tip: verify that the valves were not used with caustic fluids.  Even if the valves started life as food grade, you won’t want to use them if they make your beer smell like chemicals!

Cooling is performed using a stainless steel 30 Plate Heat Exchanger off eBay.  A filter is required before the heat exchanger to prevent clogging the passages with solids.  Brewers hardware has a filter.  Note that this filter won’t filter out all solids from a 2 barrel batch; you’ll have to place the outlet from your boil kettle appropriately and also whirlpool to leave as much of the solids in the kettle as possible.

Heating is via 240volt screw in immersion electric heating elements off  There are many models available, ranging in price from $3 upwards.  Generally, the more surface area they expose, the better, since there is less chance of creating hot spots in the liquid being heated.

The heaters are switched on and off via 40 amp Solid State relays from Jameco.

Tubing is 3/4″ high temp silicone tubing from McMaster-Carr.  Look up part number 51135K412 for example.

Tubing is mated together using tri clover clamps and fittings.  There are handful of places to buy these; try Brewers hardware.

Temperature is via the BCS-460 thermistor with tri clover fittings for the BrewTroller project.

Level sensing is performed via MPX-5050GP differential pressure sensors from Digikey.

The brain of the project is made of an old PC running Processing 1.5 (NOT 2.x) and an Arduino Mega2560 running Firmata.  The ControlP5 and Arduino libraries are installed on the PC.

All electronics are contained in one of two NEMA4x enclosures: one box is for high voltage and the other for low voltage.

The high voltage box contains the solid state relays, a 24v power supply, and the pump relays.

The low voltage box contains the Arduino and all the other circuits.

The brewery has its own breaker panel.


Proportional Valve

valve control

On/Off Valve

onoff valve


heater circuit

Ok, this isn’t really a schematic :)  The 3 legged thing in the lower right is an IRLZ24N.  The legs, from top to bottom, are:


The item at the top is a solid state relay; the load is on the left hand side and is not drawn in the picture.


This was the Seeed Studio relay board but we found early May ’13 that these aren’t too reliable.  It’s just a relay with a general purpose transistor in front of it.


This is just a voltage divider with a 1k resistor.




Assuming 8 bit temperature_pin_value and ADC_voltage in mV:

temperature_scale_factor=30.0; // in mV/C
temperature_offset=25.0; // in C
temperature_offset_voltage=750.0; // in mV

V = ((1023-temperature_pin_value)/1024f) * ADC_voltage;


Since the voltage read from the differential pressure sensor is linear but the valves are dependent on the ambient conditions as well as the tank dimensions, it is better to map ADC readings to the empty and full states and interpolate.

levelPercentage=map(level_sensor_ADC_reading from [level_empty_ADC_reading to level_full_ADC_reading] to [0 to 100]);

Proportional Valve PWM Value

8 bit PWM pin value = Math.round(map(desired_8_bit_value from [0 to 255] to [valve_prop_min to valve_prop_max])))


valve_prop_min = 2 volts => 80% of 255 = 204

valve_prop_max = 0% => 0

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>