Beer PID

Note: to the benefit of my mostly German-speaking readers I have translated all the brewing-related words to German (de: …)

Let’s brew us some beer!

I ordered some home brewing equipment from Hopfen und mehr (German only, sorry) a few weeks ago.

A lot of discussion goes on about how exact the temperatures of the enzymatic rests (de: enzymatische Rasten) during mash need to be. I didn’t want to take chances and so I build my own PID-controller. Originally I wanted to use an osPID but my osPID is still in transit from Malaysia (I hope) so I grew impatient and built one myself with an Arduino.


I had achieved some good results in the past with the OneWire temperature sensor DS18S20 so it was a natural choice. These transistor-sized devices are incredibly easy to use via their OneWire interface. As a bonus OneWire is a bus so you can connect several sensors to the same pin! On top of that there are two handy Arduino libraries ready to use in your own project one for OneWire in general and one for the temperature sensor.

For practical use I put the DS18S20 into an aluminium tube and crimped it shut with a pair of pliers. This went surprisingly well. It stayed dry or at least dry enough so that it kept working immersed in mash (de: Maische) and later wort (de: Würze) for hours. This is an advantage of the DS18S20 I forgot to mention: Preliminary tests showed that it works correctly or not at all. No false measurements.

Solid State Relais

Somehow you have to switch the heating coil of the mash tun (de: Würzepfanne) so I decided on a solid-state relais. These live very long, switch their load when the current is zero and only need a pull-up resistor on the driving side. I chose a Carlo Cavazzi RM1A23D25 but you can use any SSR that fits, you should use a zero current switching one though. Also make sure you fix it onto something that takes away the heat the SSR generates. In my case I drive a WECK WAT 24 A which consumes 1800W electrical power. I bolted the SSR onto the bottom plate of the aluminium case with some thermal grease in between. Though the SSR had to switch this amount of load the case only got slightly warm.

On the back side I added a mains socket which happened to be available. This way the switched device can simply be plugged in:

Front panel

To display the temperature I use the 7-segment display with serial interface that you can get from Sparkfun. (Note to German readers: You can order most of what sparkfun sells from Watterott at reasonable prices). I would have liked to use an alphanumberic LCD display. But that is beyond of what I can easily fit into a useful housing without ruining my hands, tools or the housing. Hardware vendors listen: We need more easy-to-use cases for our self-made electronics!

Add a three switches, and two LEDs and the hardware side is basically done.


The Software depends basically on two main parts both by Brett Beauregard, the Arduino PID Library and the Arduino PID Autotune Library. Unfortunately I have not managed to tune the PID good enough to really use it without manual intervention. I need to investigate more about that. But nevertheless the BeerPID is programmed to hold 7 different built-in temperatures. This page (in German) has a good overview over all (?) the enzymatic rest temperatures. I chose to implement those temperatures:
0 – (36° C) Glucanase rest
1 – (44° C) Xylanase rest
2 – (50° C) Saccharase rest
3 – (57° C) Protease rest
4 – (62° C) Maltose rest
5 – (72° C) alpha-Amylase rest
6 – (78° C) Mash out (de: Abmaischen)
7 – (105° C) boil
The boil temperature (105° C) is chosen simply to enforce permanent on-state on the SSR. Of course the mash tuns content it will never reach 105°.
Please have a look yourself and send me your pull requests.

Update: several people have mentioned BrewPI on twitter. Give me a couple of days to look into it, Thanks