DIY Espresso Machine: Dual Thermoblock, Dual Piston Pump, Single Group

Need help with equipment usage or want to share your latest discovery?

#1: Post by Pflunz »


I have not finished right now, but I already wanted to share my DIY espresso machine.

The main difference to other machines is, that instead of a vibration pump I am using a piston with a ball screw and an attached stepper motor.
For every thermoblock I have one of those pumps. This allows me to directly set the flow rate without any estimation or measurement. Alle parts are stainless steel or PTFE/Teflon.
This is the water plan:

There were two modes I wanted to include:
  • mix mode, in which I can use both thermoblocks to mix the water to the right temperature
  • steam mode, in which one thermoblock is used for steaming and the other for the espresso (like in traditional dual thermoblock machines)
Other modes like one for hot water or for filter coffe are also possible.

Here is an exploded view video from a former version. Shape changed, but main parts are still the same:
This was a photo of the first batch of parts I bought:

I electro-polished all parts (including fittings):

The only thing I couldn't do by myself was the stainless steel piston (diameter reduction and grooves for the seal). Luckily the workshop master at the company I work was a fan of this project so he helped me with the big lathe. Then I could assamble the pumps:

One of those pumps weights nearly 3kg:

I assambled the brew group:

and everything else as well:

Here are some details for the included scale under the drip tray:

Here is how I designed the shower. I made it from teflon, so that the temperature of the water is not changed:

The electronics and the programming was the main part. I designed a PCB with two stepper driver, two type K thermoelements, six Pt1000 probes, two weightcell sensors, seven valves and one output for the LED-lights for the cup illumination and two encoder for live manipulation of the set pressure and flow. The microcontroller which does all the controlling is a STM32H7. I additionally have a Raspberry PI sitting on the PCB, which is there for the display and the camera under the brew group. Additionally it is used for the GUI (PyQT5), as well as debugging and programming the microcontroller. It is connected via SPI and UART interface to the STM32H7. I also designed a 3-channel power SSR from scratch to control the heating power of both thermoblocks:

Here is one of the first dry runs:
Here with water:
To measure the behaviour under pressure I took a blind filter, drilled a hole in it and inserted a 3D-printer nozzle:

In contrast to the Decent Espresso Machine, I do not differentiate between flow control or pressure control. I always set both values and they will be increased until one hits the limit. I compare this often to a lab power supply. You choose voltage and current, but depending on the load, either the voltage is reduced to limit the current or vice versa:

By the way, here is a screenshot of the sensor signal from the type K element:

To control the temperature of the thermoblocks, I measured their impulse response and calculated a mathematical model for them. With these models I used model predictive control to control the temperature. It turned out quite well:

As you maybe noticed, those data is measured with Matlab Simulink. For this I implemented a TCP-IP server on the raspberry PI on which I can connect through Simulink. So I can control the machine on my laptop and measure for example temperature data or pressure curves ("Hardware in the loop").
Here is an example of the temperature of the water after the thermoblock, when I tried to improve the feed forward control for a single thermoblock shot (not the mixing mode):

Here is how a shot with my special blind filter and some more complex recipe i nmixing mode:
After 1,5 years (I started in July 2020) I decided it is good enough for my daily shots, so I ordered all the other parts for the housing so that I could move the machine to the kitchen.
Unfortunately I saw that the first part was not bent properly. Here is how the finished machine looks like:

And here is the problem:

I had to remove all parts, and after the holidays I send it to the manufacturer to fix the frame. Then I can assemble everything and put the machine in the kitchen.
There is also a thread i German where is some more information (also what did not work the first time): ... ne.131527/

Feel free to ask questions if there are some.
★ Helpful


#2: Post by OrvilleRooster »

Just Wow! Impressive!

Supporter ♡

#3: Post by pizzaman383 »

Very nice design and build!!
LMWDP #551
“Taste every shot before adding milk!”

Capuchin Monk

#4: Post by Capuchin Monk »

Nice work! :shock:

Can't wait to see the website with "Add to Cart". :D

Pflunz (original poster)

#5: Post by Pflunz (original poster) »

Capuchin Monk wrote: Can't wait to see the website with "Add to Cart". :D
Not going to happen. One reason is the cost:
  • Electronics 500€
  • Lasered and bent metall sheets (housing and frame) 700€
  • Motors 2x30€
  • Belt and pullleys 100€
  • Ball screw with nut and bearings 150€
  • Temperature and pressure sensors 200€
  • Valves 200€
  • Thermoblocks 2x30€
  • IQS connectors and stainless steel fittings 200€
  • Encoder 60€
  • Stainless steel for pistons and cylinder 150€
  • Minor Parts like shower screen, tubing, steam pipe etc. 400€
This is for the machine only and excludes the things I bought but didn't need and I had to buy a second time since I damaged something (400€).
If I would build ten machines, I probably could reduce the costs by 2, which is ~1500€ raw material value. Parts have to be turned and welded and in assambled for hours. I would guess the final Manufactoring costs are somewhere in the range of 2500€-3000€ all together. So the machine has to be sold for something like 5000€ - 7000€. Years of menpower has to be put into firmware and software, which nobody wants to pay for, to get it out of the beta stadium.
So, its not gonna happen.

Additionally the machine violates multiple patents (which I think are all low in inventiveness, like strain gauge sensors at the drip tray from la Marzocco or the combination of a motor with a piston and hot water for a baverage from Duval).

I forgot to mention one of my ideas I implemented. Instead of the typical 3-way valve on the brew head I used the 3-way valve differently and an additional 2-way valve. The 3-way valve is attached, that I can mix the water and measure the temperature and pass it to the tank (or back to the hot water outlet with the additional valve) or into the brew group through the shower screen. The shower screen itself is attached with a hollow screw, where the 2-way valve is located. So when the shot is finished, I close the way from the 3-way valve to the brew group and open the 2-way valve to the drip tray. This way, the "dirty" water will not go back through the shower as in traditional group heads, instead it will use the hollow screw and thus the shower will never get dirty.

During the premix (which happens after the thermoblocks and directly over the 3-way group valve) the valve itself is heated by the hot water and I can measure the current temperature with a type K element 1cm behind the mixing point. When the temperature is reached, I open the 3-way valve and the water will will directly flow into the PTFE shower. This ensures that the water will reach the espresso with the correct temperature (even thought I am also having a type K probe in the shower).


#6: Post by Marco_83 »

Dear Pflunz I am your fan! :o

Your work is just remarkable. To accomplish all this alone by passion (and on own background I guess) is really remarkable.

I send you my deepest respect.

And it's all to your credit that you decided to share it.

Bravo !

I found your post by chance on HB forum and I must admit that I enjoyed reading your posts. I too am trying to make a DIY espresso machine a bit like you. I will contact you so that we can exchange. :wink:

Supporter ♡

#7: Post by ShotClock »

Amazing work, I'm very impressed. I'm also an engineer, but very much stay in my lane. Your combination of many different fields is very impressive.

Out of interest, what is the maximum flow rate of this machine? Can you achieve better than the Decent dual vibratory pumps that can do 8ml/s or so?

User avatar

#8: Post by Chert »

Thanks for sharing. Very interesting and impressive project.

I will look at the Kaffeenetz link as well.

I don't understand the water path into the two pumps and I also am curious about the functions of the pumps in refilling between shots or high debit brewing. How much water at pressure can be delivered before the pumps have to be reset to back the piston toward "zero " position?
LMWDP #198


#9: Post by Giampiero »

Apart the massive techs skills, i like you even cared about the aesthetic, nice body shape.

Pflunz (original poster)

#10: Post by Pflunz (original poster) »

Thanks you all :)
ShotClock wrote:I'm also an engineer
Who says I am one? :D (ok, I am working as one...)
ShotClock wrote: Out of interest, what is the maximum flow rate of this machine? Can you achieve better than the Decent dual vibratory pumps that can do 8ml/s or so?
Max flow rate per pump should be in the range of 24ml/s. So basically 48ml/s could be feasible somehow. But with a thermoblock machine it does not really make sense. I could press out the ~20ml per thermoblock which are properly heated, but then the water would be quite cold since it would be only very short time in the thermoblock. I think 10ml/s per pump would work well for a limited time (the thermoblocks (which are in fact thermo coils) are probably designed for whole cup of coffee with a decent "coffee-flow" which is ~8ml/s without getting too cold)

Chert wrote: I don't understand the water path into the two pumps and I also am curious about the functions of the pumps in refilling between shots or high debit brewing. How much water at pressure can be delivered before the pumps have to be reset to back the piston toward "zero " position?
Hi, valve1 and valve2 are there to switch from filling the cylinder (when not energized they connect the tank to the cylinder) to connecting to the rest of the water path. You could also imagine one water pipe per pump to the tank. The connection between those valves is only so that there is one silicon hose to the tank.
V3 and V4 are there to be able to have the mixing mode and the steaming mode. On mixing mode V4 is open, so the two water streams from both Heaters mix before the group valve V5. On steaming mode V4 is closed and V3 opens as soon as I tap on "steaming" (or when the temperature probe for the milk milk jug recognizes a temperature lower than room temperature). When I stop steaming (or the milk probe measures the final milk temperature) V3 closes. So only the lower pump and thermoblock deliver the water for the espresso. The upper one is for the steam.
The group valve V5 and V6 are basically to decide where the hot water is flowing to. When none is energized, hot water flows back into the tank (for premixing, could also be connected to the drip tray), when V6 is activated water flows through the hot water outlet, and when V5 is energized, hot water is entering the brew group.
V7 is for flushing the puck water through the hollow screw from the shower screen when the shot is finished, so the shower is not "contaminated" with coffee particles and fat.

In steaming mode there is only one thermoblock for the espresso, so I cannot mix the water exactly to a specific temperature profile. I only get a "normal" espresso (but still with exact flow profile and good temperature, since I still can measure the water temperature after the thermoblock and set the heating power accordingly) but since it is for a cappuccino, nobody will notice if the temperature is a bit off.

Each pump contains a reservoir of just over 150ml. This is enough to deliver one complete double shot (as in steam mode, there is only one pump for espresso) per pump, including some "waste" until the water has reached the setpoint. After the shot, the pumps directly refill in a few seconds (reload is right now set to 10 ml/s per pump, but I think i will reduce it to somethink like 5ml/s to reduce noise. Never had to pull a second shot in less than 30 seconds).
I think I will add an additional mode for filter coffee, where I will put a Hario V60 under the shower

Giampiero wrote:Apart the massive techs skills, i like you even cared about the aesthetic, nice body shape.
I designed the whole machine "function first" and since the main manufacturing method I used was "adequately lasered metall sheets, sometimes bent" (I don't have much access to a CNC milling machine, I only own a small lathe), most of the form turned out as it is. I only added the additional kink on the front (if you compare the first exploded view video with the pictures). But thanks, I tried to pick up some design elements like the slots and repeat them. But I am far away from a designer :)

Overall, I am curious how many more of my plans I will implement. Right now I have to enter a recipe more or less manually (I wrote a python script for this to make it faster), so I need a GUI like Decent Espresso. I would like to detect the desired mode by the cups on the drip grid (espresso mode for espresso cups, steaming mode for larger cups). It would be nice to use the same recipe for single and double shots, but just have a button (single/double) to change some flow values to fit the selected filter. I also included a camera in the brew group, so I could maybe automatically detect blonding with a trained AI. Here is a taken picture with the old drip grid, the new one is larger and has the mirror (round "thing" on the grid, not yet polished) shifted (so I could also see the bottom from the filter and not only the cup):

If somebody is interested in some files (CAD files, circuit diagram...) I don't mind sharing.