I’ve been working on this project on and off for a few years. It started off as a simple restoration of a second hand Italian espresso machine which quickly got out of control, as most of my projects seem to do. Here’s a video showing the finished project and then a bunch of photos showing the build. I should have done the video with the camera turned the other way, sorry about that but I couldn’t be bothered re-doing it.
The Brasilia ‘Lady’ is a very simple single-group, single boiler machine. It has a 300ml brass boiler with a 3-way solenoid valve. It has a simple bimetallic thermostat which means the temperature swings wildly (although some models do have more complex thermostats). My model had no micro controller and was purely AC driven and controlled by the buttons on the front and the thermostat.
When I started restoring the machine I quickly decided that I wanted to do a PID modification to maintain a constant temperature. At the time I had just started playing around with Arduino so I thought why not just take all of the AC buttons on the front down to an Arduino and control everything through software with solid state relays for the pump, boiler and solenoid. The pictures and captions below should explain each part of the build sufficiently.
TLDR: Final assembly photos are at the bottom of the post.
Thanks to Katt for the great idea of using [PCB transfer paper.
This Sieg SX3 mill is proving to be very useful. It’s the same as the Grizzly G0619
The polishing compounds came in a set of 12 syringes
oLED Display Module
This 3M Double-sided tape is super strong.
PCB and Controller
I’m not sure why I made such an elaborate nut for this considering it’s hidden inside the machine. Never mind it was fun.
Before the final assembly I had the machine casing stripped and powder coated in flame red.
The group head temperature probe is held on with High temperature Kapton tape
Parts List: (Thanks China!)
- Top plate: 3.5mm Aluminium (from HP Server blanking panels)
- Display module: Cut from a block for 101 x 50mm Aluminium (New, local)
- Display: Hide.HK I2C 1602 LED display. (via eBay ~20USD)
- Display glass: Plexiglass 1.5mm (via ebay)
- Display Tape: 3M 300LSE 9495LE Double Sided Adhesive (sheets via AliExpress)
- PCB printed by DirtyPCBs.com
- Arduino Clone: Nano 3.0 clone (via AliExpress)
- 2x Temperature sensor chip: MAX6675ISA SPI Interface (via AliExpress)
- Connectors (via local JayCar Electronics)
- PCB Box (via AliExpress)
- Power Box – Aluminium (via local JayCar Electronics)
- Solid-State relays (Can’t remember had bunch in a parts box for years)
- DC power supply: From a Samsung USB charger
- Rubber grommet kit (via AliExpress)
- LED holder: From some stainless rod I had lying around
- Water Take outlet: Stainless M10 Bolt
- Silicon seal for water inlet – from a kit (via AliExpress)
- Water inlet: 22mm Aluminum rod (New, local)
- Silicon tube: 6x9mm food grade (via AliExpress)
- Pre-Heat tube: 6.4mm (I think) copper (New, Local)
Thanks for stopping by. Feel free to ask questions.
Here is the source code and PCB schematic designs if anyone is interested. I’d be happy to have critique on either.
- If I were to do the PCB design again (i.e. I suggest you do this), use a separate IO pin for each button, don’t try to economise with 4 buttons off a single pin like I did. I’ve sometimes had issues with buttons being mis-read. It should be possible to make it more robust in the code but using separate inputs is going to make things less complicated.
Below is the code from the original post (0.75) and the latest code (0.78) which I’m currently running. You’ll notice in the current code that I’ve commented out a lot of code related to forced heating. I was previously disabling the PID while water was being pumped and setting the heater to a pre-set power level. This is because when we’re pumping in cold water, we don’t need to wait for the PID to realise and start adjusting. However, all this starting and stopping of the PID introduced a bug somewhere and sometimes the PID would just go haywire and overheat the boiler. Since commenting out all this code and just letting the PID do it’s thing, it’s been rock-solid. I’m sure the code could be improved a lot – I’m just a wannabe developer! At some point I should get this into a repo. Or if you make improvements feel free to do so and I’ll post a link to your repo here.
- uCespresso PCB
- uCespresso Arduino Code 0.75
- uCespresso Arduino Code 0.78