I have been working really hard towards this day and I am proud to announce that as of today BrewPi is fully open source! Sorry to have kept you waiting for so long, but it just takes so much more time when you are building something that anyone should be able to use compared to hacking something together for yourself.
BrewPi is an open source fermentation controller that runs on an Arduino (for now) and a Raspberry Pi. It can control your beer temperature with 0.1 degree precision, log temperature data in nice graphs and is fully configurable from a web interface.
If you are not into brewing, but do like to thinker with electronics, give the article a read. I had to invent many little things that could be very helpful for other projects too. I can think of a lot of cool things you could that involve controlling an Arduino from a web browser.
To give you an idea of the features, here’s a slide show:
- My BrewPi has a nice 4×20 character OLED display. Very bright and clear. The settings can be changed on the fridge itself with a rotary encoder with push button
- My fermenter inside BrewPi for a test with water. The DS18B20 sensors are watertight and connected with DIN plugs. I still have to make the sensor hole air-tight before starting a real brew.
- My DIY BrewPi Arduino shield sitting on my Arduino Leonardo
- Top view of my fridge. It’s a great fridge to hack, because all circuits are accessible from the top.
- I cut the traces for the compressor and the light bulb and rerouted them through two solid state relays. These relays are controlled by an Arduino. The compressor is for cooling. The light bulb for heating and, well, light.
- Very happy with these solid state relays too! The built-in LED is very useful for testing.
- I use a powered two ampere USB hub to power the Arduino and the WiFi Dongle. Powering the Pi from the hub is possible too.
- I am so happy with these new 3-pin DIN connectors for my sensors. Very sturdy, very cheap. The sensors wires run alongside the light bulb wire.
- BrewPi can run in 3 modes: - It can follow a set of temperature points to slowly increase or decrease the temperature. - It can keep the beer temperature constant. - It can keep the fridge temperature constant. The graph in the picture is from running the temperature profile below, but BrewPi has been later set to run in beer constant mode.
- You can set a temperature in the web interface and when you hit ‘Apply’ it will be sent to the Arduino.
- BrewPi controls the fridge setting to adjust the beer temperature. The fridge setting is the beer setting plus a PID part. From the web interface, you can see how the current fridge setting has been calculated. This makes it a lot easier to tweak the algorithm to work well for your fridge. To control the fridge temperature, BrewPi uses a predictive on-off algorithm: it turns off the cooler when it expects that the overshoot will land exactly on the target temperature. The estimators to predict this overshoot are self-learning. You can see how it performs here.
- The Arduino is programmed to send and receive settings as JSON strings. This allows you to configure every detail of the control algorithm from the web interface.
- BrewPi logs all errors and notifications to stderr and all data points to stdout. These two streams are saved to txt files and can be viewed from the web interface. They automatically scroll down to the show the latest logs.
- When BrewPi is running in profile mode, it follows a set of temperature points and interpolates the temperatures in between. You can edit this temperature profile as a Google Docs spreadsheet. When you click ‘upload profile’, it is stored on the Pi as a CSV file which is read by Python.
- At the first tab of the maintenance panel you can set the data logging interval, start a new beer and change the document key for your temperature profile.
- In the maintenance panel, you can view graphs of previously fermented beers. You can also download the data as a CSV file.
- From the web interface, you can upload a new HEX file to the Arduino. The following steps are done automatically: 1. Your HEX file is uploaded to the Raspberry Pi 2. Python closes the serial port, resets the Arduino and invokes avrdude to upload the HEX to your Arduino. 3. The BrewPi script restarts and continues running.
















