I just bought an espresso machine, and it’s crazy that something as simple as a PID controller justifies a several hundred dollar markup on some models. The processing power needed is miniscule...!
Does the optional dimming of the boiler make a difference in your design? Mine just fully turns on and off all the time, and I reckon dimming would probably be easier on the power grid. 2000W on/off vs ~80W average (I measured) is quite the difference.
I am using SSR with zero crossing and it makes much difference.
First, I am dithering the boiler power (the power is applied to the boiler on only some AC cycles), I am basically deciding per cycle whether I want my boiler turned on for the next 1/100th or 1/120th of the second. I am already running my model about 50 times per second (not using PID) so that's ok.
Being able to apply fractional power to the boiler means it is quiet and much less scale deposits.
Also due to the zero-crossing control I have much less electrical noise. Turning the boiler fully-on blindly causes electrical noise which is not nice for other devices (my Baratza Sette grinder turns on spontaneusly when this happens).
Your measurement seems to match up. It makes a difference in the fact the meCoffee PID can adjust its P response 100 times a second, it can react much faster.
Dimming such heavy loads is not within spec in all jurisdictions though.
I love my brewing water to be perfect temperature, too!
I am currently writing model-predictive controller with moving horizon estimator for my Silvia!
The idea of the controller is to model boiler water temperature based on current brew head temperature and previous heating/brewing history. Then the model-predictive part settles the boiler optimally, without any over/undershoots.
The estimator (general case of what is also called Kalman filters) monitors the operation to update model parameters. It is detecting the scale buildup over time! Kinda neat.
I like the idea of taking the brewing into account. It’s clear that the added cold water from the pump will result in cooling of the boiler water, and the amount of cooling is easy to calculate. But you probably need to add a sensor to measure the water flow.
I have a sensor for water flow (bought replacement part from Saeco machine) and also sensor that measures the tank water temperature. The sensor is on a spring touching the bottom of the tank so that nothing has to be disconnected:)
I also have a water level sensor which is a small plastic pipe mounted to the side of the tank. Inside it there is a floating magnet. On outside of the tank, there is a flat spring which pushes two reed switches to touch the side of the tank where the pipe is. This allows me to detect when water falls below acceptable level.