Water temperature is an important factor in the espresso extraction process and is rather difficult to control on La Pavoni espresso machines (especially pre-millennium models). Users resort to extreme measures to manage temperature including using ice water to cool the group or portafilter, installing dipper mods on pre-millennium models to eliminate steam contact with the group neck, installing insulating gaskets between the group and the boiler, etc. One user went so far as to install a commercial PID controller through an extremely involved process requiring permanent modification of the boiler (making a hole). I love this kind of DIY hacking, and was interested in trying something similar. However, I was not willing to make any permanent modifications to my La Pavoni (made in 2000 but is a pre-millennium configuration). Furthermore, since the La Pavoni can only operate when the boiler is pressurized, there is no reason to measure the water temperature as this information can be obtained from the boiler pressure (measuring water temperature for PID control is only needed when the brewing temperature is below boiling as is the case with most PID machines). Therefore I decided to build a pressure-based PID control system. I’ve documented the parts, code and assembly in case anyone would like to build something similar. Note: Because I only modified the electronics by inserting a relay to open/close the heating circuit, the existing safety systems (pstat and thermofuse) still function normally.
Things to note:
- You should have some familiarity with Arduino IDE, particularly how to install libraries as this code uses two.
- You will need basic soldering equipment (not included in parts list) and should know how to safely work with mains power (i.e. unplug your machine first…).
- I have not made a wiring diagram since it would vary depending on the Arduino/components used. However, all of the required connections are evident from the Arduino code (from the pin assignments) – you will need to know how to wire the components apart from their control pins on the Arduino, but this information would be available in their data sheets. If you get stuck on this part just leave a comment or shoot me an email.
- MAINS POWER (110V OR 220V) IS DANGEROUS – ATTEMPT THIS PROJECT AT YOUR OWN RISK – YOU SHOULD ALSO ENSURE THAT YOUR RELAY CAN SAFELY HANDLE THE CURRENT DRAW OF YOUR HEATING ELEMENT
- 1 x Adafruit Pro Trinket 3.3V 12Mhz WITH the lipoly and lipoly backpack
- 1 x Adafruit CP2104 Friend – USB to Serial Converter for programming the Pro Trinket – not needed if you have a regular Arduino
- 1 x Solid state relay
- 1 x Hydraulic/Gas pressure transducer
- 1 x Mini breadboard – with modular links cut off to make it smaller
- Potentiometer – pretty much any will do, but I designed the enclosure for one with a 7mm neck.
- 2 position switch – any will do, but I designed the enclosure for one with a 6mm neck.
- 2 DIP-style LEDs and accompanying 100ohm resistors for ~ 15mA draw per LED.
- # x Brass fittings (I got mine from Ace Hardware – see picture of how I did it, but keep in mind it could be configured to point down so as to not stick out as much).
- 3D printed project enclosure (STL file: upper, lower) – this was designed to fit the breadboard linked in this list, but you can use any enclosure that fits your parts.
- Wire – pretty much any gauge will work since there is minimal current draw from all component.
- HC-05 Bluetooth transceiver (optional)
- The Arduino code – Non-Bluetooth
- The Arduino code – With Bluetooth and remote settings control (via wired or wireless connection)
- PID library – can be installed through the library manager in the Arduino IDE
- Relay library – can be installed through the library manager in the Arduino IDE
Note that the wiring/pin assignments are noted in the code, and are not discussed here. Usage instructions, important notes and calibration procedures are also written within the code document.
Prototyping the control board. Solid state relay shown with wires coming from the underside of the LP. Rainbow ribbon cable connects the controller to an FDTI programmer (bottom), which in turn allows programming and data transfer between the controller and the computer.
All closed up and powered on. The yellow light indicates that the controller is booted and also indicates that the battery is not dead (light would not turn on otherwise). The green light indicates that the pressure set point (set using the potentiometer) is within 0.02 atm of the measured pressure (i.e. ready to use at the selected pressure).
Relay placement inside the LP. Note the green and white wires coming from the control box (not shown) are routed unter the bottom plate and through one of the ventilation holes to the relay. The relay opens/closes the connection between the on switch (black wire) and the pstat (read wire) to regulate heat generation. In this configuration the pstat and thermofuse function normally and would override the relay if necessary.