Breville Cafe Roma Arduino control & mods

thegreatfalcon5

New member
Jan 26, 2023
1
0
Quebec, Canada
Visit site
Howdy! as they say.

For some time now, I have been tinkering with my Breville Cafe Roma in search of better brew. Maybe I should disclaim right from the start that I still haven't found it in this machine hehe. Well, after much time and efforts I believe that I was able to get a bit more consistent brew temperatures thus resulting in more consistent shots. I just wanted to write about my journey to either stimulate the modding community - which is rather weak for the CafeRoma - or strongly discourage people who think that a few bits and pieces here will lend them pro-level espresso machine coffee with a, honestly, cheap ass machine.

Welp, here's the beast:
20230126_0009_01.jpg


The first thing I had in mind was getting repeatable and preferably precise brew temperatures. The way I go about this is with two TMP36 temperature sensors mounted on the thermoblock. Each going into a separate analog input of the Arduino and then averaged in software. The sensors are mounted using the left over hardware of the old thermoswitches that come stock with the CafeRoma.
20230126_0003_01.jpg


If you think the wiring is a mess already, wait until we get to the Arduino enclosure........

Obviously, there are two pressure sensors/gauge right next to the temperature sensors. These bad guys have had holes drilled and tapped into the thermoblock. The analog gauge is often used to mod the Gaggia Classics. Can be had for around 30USD I believe. The pressure sensor is from Amazon. It's a 300PSI sensor with 1/8NPT threads (nightmare) which outputs supposedly 0.5-4.5V depending on the pressure. However, as I found out, this 25CAD sensor likes to free-run above around 80C and outputs a bunch of gibberish voltage. Since in the programming of my Arduino the pump stopped when the sensor saw 9bar+, when the sensor got into crazy mod and stuck at 18bar+, I couldn't get the pump to run at all. This sensor has been bypassed and replaced by a simple potentiometer seen on the front side of the machine, with a big knob (big knobs are koooool).

20230126_0001_01.jpg


20230126_0004_01.jpg


So as for user inputs there are:
  • The main knob/valve switching between steam and brew modes
  • The pump duty cycle control knob
  • The temperature target knob
I like seeing things so I made sure to have plenty to look at. Here's the 16x2 display:
20230126_0013_01.jpg

On the two lines, I display the current temp, and the target temp. I have some trouble with the custom characters in these shots but there's a coffee mug that should appear when the current and target temperatures are close. Anyhow, it's pretty nifty to see these parameters change over time...
The second line shows a "progress bar" depending on the position of the pump control knob. And a custom character to reflect the current mode.

Since there is no OPV in this machine, the goal is to target 9bar modulating the pump duty cycle. With the big knob it's rather easy to stay between 8 and 10 bars. The arduino is responsive enough and it's quite pleasant to use.

And here's a shot of the analog pressure gauge as seen when the machine is closed:
20230126_0010_01.jpg


And here comes the mess:
20230126_0005_01.jpg


Target Temp:
Simply a 10k potentiometer connected to VCC/GND and to an analog input of the Arduino.

Arduino Uno:
Out of the box Arduino Uno. Still many IO available.
20230126_0007_01.jpg


Heater Relay:
This is a pretty neat solid state relay. It's about 30CAD? on Amazon. Rated at 480VAC and 40A, it is more than enough for the heater. I was actually going for the 20A relay when I saw that this 40A was 1-2$ cheaper soooooo.... Works like a champ. The back of the relay is bolted with thermal paste to the stainless steel case of the CafeRoma, there's a hole cut into the plastic box to accommodate this. These relays usually need a heatsink to stay happy but sinking it's thermal output into the stainless steel enclosure seems more than enough.
20230126_0006_01.jpg


DC PSU GND anc VCC:
This is a small terminal strip to accomodate the many 5V and GND wires coming and going in all directions. The current PSU of the Arduino (plugged in the VccIN) is a 9V wall brick (off shot).

VAC stuff:
Simply a higher VAC rating terminal block for splitting the VAC stuff. There's AC120V coming in from the wall that need to go to both the pump relay and heater relay. Both have a neutral coming back. This could have been done with soldering and shrink but I wanted the flexibility and serviceability of a terminal block. And I had one lying around sooo...

Pump relay:
This is a much cheaper solid state relay. I believe that it is only rated at 120VAC/2A. This is plenty enough for the pump. However, the main drawback of this particular relay is that it only closes when the sinus crosses a 0VAC point. So this gives a rougher resolution of ON/OFF. Anyhow, with the vibratory pump of the CafeRoma, it doesn't make much difference anyway since it's pretty rough the way it operates anyway.

This is my first writeup kind of post so I don't quite know what I should add more or less. I attached my Arduino files so that if anyone's interested exploring this avenue with either a CafeRoma or another machine they'll have a starting point...

Feel free to ask questions and tell me that this heresy shall be punished by fire and stoning lol.
 

Attachments

  • espresso.zip
    4.6 KB · Views: 83
Hey there!!
Its awesome to find someone else who's so into coffee as well as modification! Thank you so much for the detailed post about your project. More specifically thanks for working with the Breville Cafe Roma since information about the machine is very much lacking, its really inspiring me to push further with my own modifications to my Cafe Roma.
My project is very similar to yours, however I am using slightly different hardware. I am using an ESP32 for the "brains" currently its just a dev c kit version however I will be specifically using the Seeed esp32 model (not a typo) as per its size. As well as since the esp32 is WiFi/Bluetooth capable using a 5V One Channel Relay Module with OPTO Isolation High Low Level Trigger from HiLetgo to be able to wirelessly turn the machine on and off. The relay is capable of a maximum load of AC 250V/10A, DC 30V/10A, which for me in America that should be fine.

I am also working on implementing a high precision built in load cell into the drip tray using an HX711 and 100g load cell. I am using web-sockets and HTML endpoints for the real-time data transmission through Arduino (although I can switch over to micro-python if I want). I also have a front-end Dashboard Application as a companion software to the program. I plan to attach this to the ESP32 to have it be served by the ESP32 itself. As well as be a standalone electron based app.

Regarding the temperature sensors, I'm interested in how you implemented them. If its not too much to ask could you share a bit more on how you did this? Are the props inside of thermo-block? If so how did you go about modifying the thermo-block and keep the integrity of it intact? The same questions applies to the pressure sensor. As well as, an additional question of it seems as though you were unhappy with your choice of pressure sensor, do you have another one you may recommend? Once you drill something into the thermo-block, is this a "permanent fixture"?

Given that this is my first time working with AC power (besides a bit during my courses) safety is my top priority for the machine and after which for me (just kidding, other way around obviously). I am concerned about what can happen to both me and the machine, especially as I am as they say treading in unfamiliar waters. Any advice you can share on the matter would be greatly appreciated!
Thank you for sharing all of the info youve currently already shared! No doubt not just me, but the coffee world as a whole (modding community too) will find it extremely useful!
 
Are you guys still in the projects on that little machine? I just got one recently, I am new to espresso and I am having fun with it.

I would like to know if someone could help me on lowering the pressure to 9bar either by installing the dimmer knob on it or dealing with that coil story which I don't know if is possible.

I have naked portafilter with a non-pressurized basket, hence the idea on lowering pressure in order to have less channeling which is bothering me atm.

I will appreciate if I can get that help.
Cheers
 
Howdy! as they say.

For some time now, I have been tinkering with my Breville Cafe Roma in search of better brew. Maybe I should disclaim right from the start that I still haven't found it in this machine hehe. Well, after much time and efforts I believe that I was able to get a bit more consistent brew temperatures thus resulting in more consistent shots. I just wanted to write about my journey to either stimulate the modding community - which is rather weak for the CafeRoma - or strongly discourage people who think that a few bits and pieces here will lend them pro-level espresso machine coffee with a, honestly, cheap ass machine.

Welp, here's the beast:
View attachment 11883

The first thing I had in mind was getting repeatable and preferably precise brew temperatures. The way I go about this is with two TMP36 temperature sensors mounted on the thermoblock. Each going into a separate analog input of the Arduino and then averaged in software. The sensors are mounted using the left over hardware of the old thermoswitches that come stock with the CafeRoma.
View attachment 11885

If you think the wiring is a mess already, wait until we get to the Arduino enclosure........

Obviously, there are two pressure sensors/gauge right next to the temperature sensors. These bad guys have had holes drilled and tapped into the thermoblock. The analog gauge is often used to mod the Gaggia Classics. Can be had for around 30USD I believe. The pressure sensor is from Amazon. It's a 300PSI sensor with 1/8NPT threads (nightmare) which outputs supposedly 0.5-4.5V depending on the pressure. However, as I found out, this 25CAD sensor likes to free-run above around 80C and outputs a bunch of gibberish voltage. Since in the programming of my Arduino the pump stopped when the sensor saw 9bar+, when the sensor got into crazy mod and stuck at 18bar+, I couldn't get the pump to run at all. This sensor has been bypassed and replaced by a simple potentiometer seen on the front side of the machine, with a big knob (big knobs are koooool).

View attachment 11886

View attachment 11887

So as for user inputs there are:
  • The main knob/valve switching between steam and brew modes
  • The pump duty cycle control knob
  • The temperature target knob
I like seeing things so I made sure to have plenty to look at. Here's the 16x2 display:
View attachment 11888
On the two lines, I display the current temp, and the target temp. I have some trouble with the custom characters in these shots but there's a coffee mug that should appear when the current and target temperatures are close. Anyhow, it's pretty nifty to see these parameters change over time...
The second line shows a "progress bar" depending on the position of the pump control knob. And a custom character to reflect the current mode.

Since there is no OPV in this machine, the goal is to target 9bar modulating the pump duty cycle. With the big knob it's rather easy to stay between 8 and 10 bars. The arduino is responsive enough and it's quite pleasant to use.

And here's a shot of the analog pressure gauge as seen when the machine is closed:
View attachment 11889

And here comes the mess:
View attachment 11890

Target Temp:
Simply a 10k potentiometer connected to VCC/GND and to an analog input of the Arduino.

Arduino Uno:
Out of the box Arduino Uno. Still many IO available.
View attachment 11892

Heater Relay:
This is a pretty neat solid state relay. It's about 30CAD? on Amazon. Rated at 480VAC and 40A, it is more than enough for the heater. I was actually going for the 20A relay when I saw that this 40A was 1-2$ cheaper soooooo.... Works like a champ. The back of the relay is bolted with thermal paste to the stainless steel case of the CafeRoma, there's a hole cut into the plastic box to accommodate this. These relays usually need a heatsink to stay happy but sinking it's thermal output into the stainless steel enclosure seems more than enough.
View attachment 11891

DC PSU GND anc VCC:
This is a small terminal strip to accomodate the many 5V and GND wires coming and going in all directions. The current PSU of the Arduino (plugged in the VccIN) is a 9V wall brick (off shot).

VAC stuff:
Simply a higher VAC rating terminal block for splitting the VAC stuff. There's AC120V coming in from the wall that need to go to both the pump relay and heater relay. Both have a neutral coming back. This could have been done with soldering and shrink but I wanted the flexibility and serviceability of a terminal block. And I had one lying around sooo...

Pump relay:
This is a much cheaper solid state relay. I believe that it is only rated at 120VAC/2A. This is plenty enough for the pump. However, the main drawback of this particular relay is that it only closes when the sinus crosses a 0VAC point. So this gives a rougher resolution of ON/OFF. Anyhow, with the vibratory pump of the CafeRoma, it doesn't make much difference anyway since it's pretty rough the way it operates anyway.

This is my first writeup kind of post so I don't quite know what I should add more or less. I attached my Arduino files so that if anyone's interested exploring this avenue with either a CafeRoma or another machine they'll have a starting point...

Feel free to ask questions and tell me that this heresy shall be punished by fire and stoning lol.
Love this project! I recently added a dimmer to the Cafe Roma and gifted it my son who uses it only with a pressurized basket and doesn't care much about temperature/pressure.
I am tempted to find another cheap cafe roma and install a ready-made PID, along with a pressure gauge inserted between the pump and block. I think that might be easier than drilling/threading the block.
Anyway thanks for doing all this work and sharing with everyone!
 
Back
Top