CREMA Revision A – Prototype 1

So I’ve finished the board for CREMA Revision A – Prototype 1. It’s a beaut!

I’ll have it printed and wire it up. I can’t wait.

Unfortunately due to size constraints, all components are surface mount (to the exclusion of the Molex headers etc.) Fair warning: unless you have a reflow oven, soldering this board will not be for the faint of heart. There are no components smaller than a 0603 resistor so if you’re good with that, then this will be a breeze!


The prototype has the following functions / features:

  • Dual P.I.D. Boiler Control (PWM based)
  • Dual PT100 RTD Temperature Sensors with 24-bit resolution providing 0.05°C temperature accuracy
  • Single Pump Control (PWM based: allows for pressure profiling)
  • 16×2 Display Module
  • Onboard real-time clock with two alarms
  • Bluetooth or WiFi (using Electric Imp) connectivity for remote control

Some of the design details include:

  • Onboard 5V 2,000mA power supply with resettable fuse and ESD protection
  • Faston Quick Connect tabs to be compatible with internal wiring of many espresso machines
  • Power indicator LEDs for Boiler A, Boiler B, and Pump solid state relays
  • Zero-crossing solid state relay to allow precise control of vibratory pumps
  • Line-voltage sensors to determine switch states without requiring any special wiring
  • Molex connectors with gold-plated pins to minimize connection problems

Once I work out any underlying bugs, I’ll firm-up the firmware 🙂 and make a public release of the board.


9 Replies to “CREMA Revision A – Prototype 1”

  1. Hi Josh,

    Firstly nice project you’ve got here, I’ve been hoping for a PT100 arduino breakout board for a while which lead me here.
    Im curious about the PWM based PID, does it mean you’re intending to use proportional SSR’s?
    Also about the ADS1247… the resistor values changed between the first post about it and the schematics, whats the impact of the changes?
    I haven’t been able to find 0.05% tolerance resistors at a reasonable price, how much error would there be with 0.1% resistors and would the error be a constant +/-?

    Finally, are you planning to produce this as a final product or kit or boards?


    1. Hey! Thanks for your interest in the project. The resistor values only changed to reflect the values of the resistors that I was using during the prototyping. The first full prototype board uses these resistors (available from Digikey): RG16N150WCT-ND and RG16N750WCT-ND. These resistors will be true to their value (150 ohm and 750 ohm respectively) to within 0.05%. In effect, the accuracy of these resistors dictates the accuracy of the temperature measurement. It is impossible to tell without empiric measurement of the resistors whether it is + or – 0.1%. Thus, you must assume that the sum of the variances will equate to the maximum accuracy that you can attain. In your case it’s sqrt(0.1^2 + 0.1^2) which is approximately 0.14%.

      With regards to the PWM based pump, because the Silvia uses a vibratory pump, the voltage cannot be changed without affecting the pumps ability to drive the pump piston (and thus eject water). Instead, power to the relay is toggled to coincide with the AC zero crossing point. This allows the pump to skip a stroke or two or more. Since the pump operates at 60Hz here in North America (50Hz in Europe et al), a 10% duty cycle on the pump for example corresponds to 6 strokes every second. The volume of water ejected (the flow rate) is thus proportional to the pressure of extraction. Coincidently, this method also allows for single stroke pulses of water to be injected into the boiler during steaming to avoid boiler burn-up. If you’re interested in the PWM method, it takes advantage of the 10-bit Timer 4 (OC4D). The two boilers use Timer 1 (OC1A) and 3 (OC3A) for PWM output which are independent but identical-in-function 16-bit timers.

      I honestly haven’t had any serious plans to produce this board commercially or as kits for that matter, but a number of people seem keen on it. So I might redesign another version with the ATmega32U4 simply on-board to maximize board efficiency without sacrificing space (for header pins etc.) or design a through-hole version for easier solderability for the DIY-ers.

      As soon as I’ve got the prototype PCB in hand, I’ll have a new post to put up.

      1. Thanks for the information on the resistor values, I’ve got a shipping quote from digikey of $49 for the $4 of resistors (to Australia) so I will go with less accuracy that’s available locally.

        With regards to the pwm I was referencing the pid control of the boiler, is the output from your code/board designed to work with a proportional ssr? I don’t have a solenoid pump in my Silvia anymore but I’d like to move to an arduino based pid, and heat the group head with a 500ohm resistor.

        1. That sucks with shipping – I’m not sure if there are any other distributors that might service Australia a bit more conveniently. If you use a rotary vane pump in place of a vibratory pump, you’ll need to use a DAC (digital to analog converter) to generate a specific voltage that you’d then use for the proportional voltage for your SSR. Analog Devices makes some great chips (both ADCs and DACs) and has a Sample program – no doubt you could get a couple DAC chips on the house to do your prototyping. I came across this one that ought to provide a high resolution output: … Alternatively you can use their ‘digital potentiometer’ series ( Either way, you’ll need some way of creating a voltage range that can be digitally controlled. I’m inclined to favour the digital potentiometers simply because their drive current is a bit higher and can be used in line with the SSR. Moreover they’ve got a number of I2C compatible chips which means little modifications to the current board design (you’d need to add another I2C port but that’s trivial).

          EDIT: This looks like it could also do the job well … (The AD5667RBRMZ-1)

          Check it out, and let me know – I could try implementing it in my designs too! I am toying with the idea of using a thermoblock to preheat water before it enters the boiler. I just need to harvest an old CC1 or the like should I come across one …

          1. Hey,

            I should have mentioned I have a gear pump installed, which takes 0-24v from a motor driver shield, I hope you didn’t just find those links for me… 🙂

            I would test your pumping system first before investing too much time with preheating, controlling the pump to maintain 9bar without the need for the OPV to open (and vent water thats taken some heat from the OPV/boiler) will help temperature stability on the Silvia. Activating the element for some % of time when the pump is on is another option that becomes more attractive when theres no loss out the opv.

          2. Hey! I do like the idea of having an onboard DAC 🙂 so it wasn’t JUST for you. I’m hoping to make this design broad enough to be applicable to more machines than just the Silvia, although many design decisions have been made around her so far. The only concern I have with the motor driver shield and compatibility with the CREMA board is whether or not it uses some of the same pins. If this is the case, they will not likely be compatible. What shield are you using?

            I was considering the thermoblock though to preheat the incoming water so that during extraction the temperature remains consistent during the extraction process. Drawing even two ounces of water into the boiler (pulling your double shot) is sufficient to drop the boiler temperature by about 12°C. Realistically, the OPV should never open if your grind is dialled in correctly so water (and thus heat) loss back to the tank should be minimal. The current CREMA firmware is set to engage the boiler elements at 100% duty when the temperature is less than 5 degrees of its target. Within 5 degrees, the PID takes over and stabilizes the temperature. Thus drawing water through the boiler will almost always engage the boiler element to begin reheating it. I’ll post a video shortly of the PWM-based pump in action.

  2. Im using the rugged motor driver by rugged circuits, it uses pins 3+12 and/or 11+13 on the uno by default.

    I have some videos of it in action…
    Pressure profile playback (Since improved with better filtering on pressure sensor)
    Manual control

    Regarding 9 bar being achieved if grind/dose is right, it depends on your pump, how much water it pushes at 9 bar, and whether the coffee you’re using gets it best flavor at a grind/dose which results in 60ml/30sec/9bar pour. You are limiting your options if you rely on the grind/dose to get you the 9 bar.

    Im having good results with heating in response to pumping, about 60% until the pressure rises and the flow slows once the void space is filled, then ~15% until the end. The pid readout shows a degree or so reduction in the first few seconds and at the end of the shot its back to the setpoint. Relying on the pid alone the temp would show a few degrees cooler at the end.

Leave a Reply