A full stack suite to add smarts to a single boiler espresso machine using a Raspberry Pi Pico as the brains. The project was started with the following goals in mind:
Uses a PID controller with a feed-forward component to regulate the boiler's temperature. The resulting temperature is within 1% the setpoint throughout the shot.
Automatically runs user configured brew routines. These will regulate the pump's power so that a desired flow rate is maintained over the course of the shot.
The temperatures, flow rate, preinfusion routine, dose, yield, and other settings can all be customized without reflashing the code. The pump switch and mode dial are used to navigate a folder structure while the three LEDs display the current values of the parameters as they are adjusted. This allowed for full customization without any additional hardware (e.g. screens, buttons, etc.).
This project can be thought of in several layers.
The lowest level is the hardware such as sensors and switches required to create a smart espresso machine. Additionally, a custom carrier board is needed to interface with these components. This PCB contains any circuitry required to support the sensors and switches. Mounted to this carrier board is the Raspberry Pi Pico W. | Front View | Back View |
---|---|---|
The next level consists of the firmware running on the Pico. This code, written in c, contains all the sensor drivers and machine logic. The firmware is partitioned onto a single core of the dual core Pico.
The network level runs on the second core on the Pico. It collects information from the firmware running on core 0 and shares that over BLE with the Mobile UI level (see below). It also passes settings received from a BLE client to the firmware so that the machines performance can be tailored to achieve the desired brew characteristics.
While ssh is fun, a mobile application would be significantly more convenient. This level would allow users to create and share their brew profiles for different coffees, visualize a shot's flow rate, pressure, temperature, etc. in real time, and troubleshoot their shots. This application would interface with the Network level using BLE, simplifying the connection process.
To help with your build, project documentation is being written in another repository. Clone and build the sphinx docs to view.
The documentation is generated from the code's comments using doxygen. Below is a sample page showing the autobrew library. Clone and build the html to view the rest.
This project has taken inspiration from others who have taken the time to write up their own builds. The two primary sources have been the Es(pi)resso project, and the Espresso for Geeks blog. Big thank you to both those makers for sharing the great work they did!
If you are interested in helping with this project, I would love to talk! You can reach me through Twitter.