“So our software solutions are so great, they could even make you coffee”. The request was to make that sales pitch a reality, and that’s how CremaBot came into existence. The Specific coffee machine was sourced and handed over for me to go to work on.

Throughout the process I kept a full video blog of the project progress and also later decided that I would open source the full project. Read on.

Project Bob (Code name) update

Project Bob. A.K.A.: CremaBot


To keep things simple, I opted for a small simple solution based on the Arduino Nano v3.0. The USB port would be connected to a computer which already occupied the boardroom and managed the full room control which would then also double as the web server for the final solution.

The Hardware

In the first version the display is actually not interfaced with and simply passed directly from the input to the output.

On the front of the Jura, controls include 6 press buttons and a rotary encoder which also incorporates a press button. The only interface in version one is to the 6 buttons.

One of the initial design constraints I put down was to make as few as possible physical changes to the machine itself. I.E. I did not want to solder pins onto buttons and just run wires directly to and from them.

Once I had the machine open, I could see that it was made up of two distinct circuit boards (Excluding the display section), one which managed the overall machine and another control interface. The 6 buttons, together with the display, connected to this second board. I decided that I would simply interject at this point.

The display module would therefore be unplugged from the default control board and plugged into CremaBot. CremaBot would in turn provide an output which then goes directly to the original control board.

Hardware Architecture

Below are more videos showing the process I went through to analyse and design the final product.

Gineer: CremaBot Schematic (HD)

CremaBot: Jura Display Hack - Theory

CremaBot: Reading from Inputs

CremaBot: Bug Resolved

The Server Side

On the server side, the Arduino exposes the USB port as a virtual COM port. Using a simple dll, I could expose this COM port to an ASP.Net MVC web page to provide the user interface to the “remote” users.

I also implemented signalR to allow for real time synchronisation of all connected devices because all these devices where interfacing to a single physical machine, which at the end of the day, can only execute a single command at a time. In this way, if one user pressed a button, all other users would be notified of the action and not be able to request an additional action until the first one had completed.

Server side Software Architecture


The firmware was kept as simple as possible and simply provides an integration between the input buttons and the commands from the machine which are then passed to the coffee machines internal control board.

In the video below I present a full walkthrough of the firmware.

Gineer: CremaBot - Firmware walkthrough

Server Side

The video below shows a code walkthrough of the server side code which provides a rich user interface to the remote users of the coffee machine.

Gineer: CremaBot - Server Side Code


I opted for a 3d printed enclosure purpose designed using OpenScad to allow for a package that was small and compact enough to fit inside the limited available space not already occupied by the original Jura Hardware and/or electronics, while also providing internal support and wire management.

In the video below, I was through the OpenScad model and also the printing and finishing process of the enclosure which was installed inside the Jura Impressa XF50 Classic.

Gineer: CremaBot - The enclosure

Assembly and Testing

Once all the components where fully tested and confirmed to be fully operational, the process of reassembling the Jura machine with CremaBot fully embedded inside the machine. The only difference to the original machine was a new USB port installed into the back of the machine.

The video below shows the assembly process step by step with final testing.

Gineer: CremaBot - Assembly


Installing the machine at the client when as smoothly as expected and all was working perfectly. The only complications that have plagued the machine so far were users not understanding the machine interface itself and where to add water and coffee beans.

The poster below was placed in close proximity to the machine itself. Interestingly, there is no simple reference guide like the one below provided with the Jura Machine from the manufacturer. I think this is an oversight and something I would strongly suggest Jura adds into the box.

Jura Impressa XF50 Classic - Quick reference poster by Gineer

Next Steps

Development of Phase two has already commenced. The current version of the hardware already supports plugging in a stepper motor and two end-stops. Watch this space for more developments soon.

Additional Content