O'Reilly logo

DIY Coffee by Brian Jepson

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Chapter 4. Hot on the Spot

image with no caption

Photography by John F. Murphy

Get consistent shots by adding precise temperature control to your espresso maker.

By John F. Murphy

The art of espresso making is fraught with many variables — coffee bean origin and blend, degree of roast, fineness and consistency of grind, tamping force and technique, and on and on and on. The temperature of the water used to brew the shot is one of the most important variables. In most espresso machines, the brew temperature is controlled by a wildly inaccurate thermostat.

However, control over the brew temperature is key to espresso quality. Different blends of espresso beans and different degrees of roast develop different flavors when brewed at different temperatures. Malabar Gold may taste sweet at a temperature that makes DSB taste sour. Control over the brew temp allows the skilled barista to coax the best flavor from each blend and each roast. In a stock Silvia espresso maker, relative brew temperature is roughly guestimated by “time surfing,” or pulling the shot a certain number of seconds after the stock thermostat turns on the heating element. Surfing does work, but it requires careful attention and lacks accuracy.

A better way is to use a PID controller. It’s easy to use (just set the desired temp and let the PID do its thing) and highly accurate, meaning the brew temperature of the next shot can be very nearly the same — if not exactly the same — as the last shot. And consistency from one shot of espresso to the next is the holy grail of espresso fanatics.

image with no caption

The Rancilio Silvia outfitted with temperature control.

PID Basics

In simple terms (which is about all I can understand), a PID controller is a precise, computer-controlled thermostat. PID is an acronym for “Proportional, Derivative, Integral,” which has something to do with how the controller holds the boiler (in this application) at a precise temperature.

Here’s an analogy that explains how the PID works and why it is a good thing. Imagine you are driving your car down the street at 60mph. Ahead is an intersection controlled by a stop sign. If you continue to travel at 60mph until you reach the intersection and then slam on the brakes, your car is going to shoot past the stop sign before coming to rest. If, on the other hand, you gradually apply the brakes well in advance of the stop sign, you can come to a controlled stop right at the intersection. (This analogy is paraphrased from an explanation in the Fuji PXV3 manual.)

The stock brew thermostat in the Silvia is like the driver who slams on the brakes at the stop sign. The stock thermostat supplies full power to the boiler’s heating element until it reaches a certain temperature, and then cuts the power off completely. When the power is cut, the heating element continues to heat the boiler water for some seconds until the heating element cools off; this is like the car skidding through the intersection. On my Silvia, the stock thermostat turns off the heating element at around 220° F, but the water continues to heat up until it reaches about 238° F. This is called “overshoot.”

The PID controller is like the driver who gradually applies the brakes and slows down as he approaches the intersection. The PID controller turns the heating element on and off at one-second intervals. As the boiler approaches the desired temperature, the PID turns the heating element on for shorter intervals — like a driver braking harder the closer he gets to the stop sign (this is where the proportional, integral, and derivative calculations come in). Thus, the PID is able to hold the boiler at the desired temperature with very little overshoot. I usually see a 1° F or less overshoot with my PID’d Silvia. Compare that to the 18-degree overshoot with the stock thermostat.

Once the boiler is at the desired temperature, the PID cycles the heating element on and off at intervals calculated to maintain the boiler very close to that temperature. Mine fluctuates by about 1° F. The stock thermostat, by contrast, has a fluctuation of at least 40° F!

The Rancilio Silvia

If you’re going to be finicky enough about your coffee that a few degrees variation in brew temperature is a big deal, you’d better start off with a decent espresso machine. The internet is replete with raves about Rancilio’s Silvia, so I’ll just touch on one key feature: temperature stability. Silvia contains a lot of heavy brass in the boiler, the grouphead, and the portafilter. Once all that brass gets up to operating temperature, it tends to stay there.

When you pull a two-ounce double, the hot brass of the grouphead and portafilter keep the brew water from cooling off before it hits the coffee grounds. Likewise, the brass boiler stays hot even as cool water from the reservoir replaces the water used to make the shot. Without good temperature stability during a shot, accurate temperature control is useless, if not downright impossible.

PID Shopping List


Fuji DIN PID controller


TTI Global


Solid-state relay (230V/40A out, DC in, zero switching)


TTI Global


Type J thermocouple, washer probe, at least 30" long


TTI Global


14-gauge wire (50′ spool)


Home Depot


4mm washer and nut


Home Depot


Double-sided foam tape


Home Depot


Lamp extension cord, 6′


Home Depot


Crimp-on connectors




Lighted rocker switch




Project box, 5″x2.5″x2″





I also used the following tools and supplies that I had on hand: wire stripper/crimper (RadioShack sells them for under $8), soldering iron, solder, heat-shrink tubing, coping saw, and various small screwdrivers. (The last three items were all used solely for installing the optional switch.)


Note: I did not actually follow these steps in the order presented. I did a lot of trial fitting, testing, etc., before I arrived at the final assembly. But if I had it to do all over again, this is the way I would do it.

1. Prepare the enclosure. Fitting the PID into the project box was a bit tricky for someone of my limited craftsmanship. The screw towers and circuit board holders in the enclosure interfered with the placement of the PID. I ended up cutting a slot through one end of the enclosure with a hand miter saw and a coping saw. The distance between the circuit board holders molded into the enclosure is very close to the height of the PID, so I simply cut down along the circuit board holders, broke out the piece of plastic between the cuts with a pair of pliers, and reamed out the opening with a power drill until the PID fit.

I also drilled a ¼″ hole in the back of the enclosure to run wires to the PID and a ¾″ hole in the top towards the back to mount the (entirely superfluous) lighted rocker switch. Actually mounting the PID in the enclosure is simple enough once the opening is prepared: slip the white mounting collar over the PID, slide the PID into the enclosure, then cinch the mounting collar up tight against the inside of the enclosure. This is easier to do than it is to describe.

2. Open Silvia. (Unplug it first!) Silvia is a breeze to open — especially compared to my first machine, a DeLonghi, which was held together by hidden tamper-proof screws.

2a. Remove the water reservoir. Shake the excess water out of the two water hoses into a towel or sink.

2b. Remove the four screws that hold on Silvia’s top. Set the top aside.

2c. Remove the two screws that hold on the front splash panel. Set the splash panel aside.

3. Install the thermocouple. Now that Silvia’s innards are exposed, you can see the bronze-colored boiler with many wires and two blue cylinders attached to it. The blue cylinders are the thermostats. The thermostats are attached to the boiler by three screws. Remove one of the screws, slip the washer end of the thermocouple under the “ear” of the thermostat, and then replace the screw through the thermostat and the thermocouple washer (see Figure 4-1). I test-mounted the thermocouple under the leftmost screw, but later moved it over to the rightmost screw, which is closer to where the cold water enters the boiler. I’m not sure it makes any difference in operation.

Thermocouple washer installed under screw of steam thermostat.

Figure 4-1. Thermocouple washer installed under screw of steam thermostat.

4. Remove wires from brew thermostat. The brew thermostat is the blue cylinder on the left. Unplug both connectors from the thermostat (see Figure 4-2).

Removing brew thermostat connectors.

Figure 4-2. Removing brew thermostat connectors.

5. Attach heater circuit wires to the solid-state relay (SSR).

5a. Cut two pieces of wire about 12″ long. Strip the ends of both wires.

5b. Crimp a connector onto one end of each wire.

5c. Plug the connectors into the wires detached from the thermostat in step 4 (see Figure 4-3).

5d. Run the other ends of the wires through Silvia’s chassis so that they protrude down behind the splash-guard.

5e. Attach the bare wire ends to the SSR. There are four terminals on the SSR; on mine, they were labeled L1, T1, A2(+), and A2(-). Attach the wires to L1 and T1. It does not matter which wire goes to L1 or which to T1. My SSR has screw/clamp terminals; simply slide the wire into the terminal and tighten the screw to hold it in place. If necessary, trim the wires before attaching to the SSR so there is not an excess of wire behind the splashguard (see Figure 4-3).

Boiler detail with thermocouple and SSR wires installed.

Figure 4-3. Boiler detail with thermocouple and SSR wires installed.

6. Attach the PID control wires to the SSR.

6a. Cut two more pieces of wire, about 36″ each. They need to be this long because I decided to run the wires out to the PID. Strip the ends.

6b. Since all of the wire I used was the same color, I marked both ends of one piece with tape so I could identify it later.

6c. Run one end of each wire from the boiler compartment down to the SSR.

6d. Attach the wire marked with tape to the ‘+’ terminal on the SSR. Attach the other wire to the ‘-’ terminal (see Figure 4-4).

SSR wiring detail.

Figure 4-4. SSR wiring detail.

7. Run control wires and thermocouple wire out to the PID. I did not want to cut a hole for the wires in Silvia, so I decided to run them out of an existing gap in the bottom left corner at the back of Silvia.

7a. Remove the panel that fits between the water reservoir and the boiler compartment. It is held on with two small machine screws and lock washers on the water reservoir side. The panel is angled and may need a bit of fiddling to get it to slide out (see Figure 4-5).

Reservoir panel.

Figure 4-5. Reservoir panel.

7b. Run the cycle time (TC) and control wires (the ones attached to the + and - terminals of the SSR) out of the boiler compartment, along the bottom of the water reservoir compartment, and out the opening in the bottom corner of the water reservoir compartment (see Figure 4-6).

7c. Reinstall the panel removed in step 7a.

Wire path out of Silvia.

Figure 4-6. Wire path out of Silvia.

8. Wire the PID.

8a. Cut the receptacle end (not the end that plugs into the wall) off of the extension cord and strip the ends of the wires about ¼″.

8b. Run the extension cord, TC wire, and SSR control wires through the hole drilled in the back of the enclosure.

8c. Slide the white mounting collar over the back of the PID (it must go on before the wires are attached, for obvious reasons).

8d. Attach the wires to the PID as follows (see Figure 4-7). The PID has simple screw clamp terminals, so just slide the wire into the appropriate terminal and tighten the screw.

PID pinout.

Figure 4-7. PID pinout.

8e. The ends of the thermocouple wire go to terminals 2 (red wire) and 3 (white wire). The first time I wired up my PID, I had the leads reversed. When the PID turned on the heating element, the temperature readout started to drop instead of rise.

8f. The ends of the SSR control wires go into terminals 4 and 5. Be sure to match the + wire from the SSR to the + terminal on the PID, and the - wire to the - terminal. That’s why I marked the wire with tape in step 6b.

8g. The ends of your power cord go into terminals 8 and 9. (Note: The lighted rocker switch, if used, gets wired between the power source and the PID. I left that step out because the switch is totally superfluous.)

8h. Terminals 1, 6, and 7 are unused.

9. Mount the PID in the enclosure. Slide the PID into the enclosure. Cinch the mounting collar snug against the inside of the enclosure. Screw the cover onto the enclosure. I attached the enclosure to Silvia with double-sided foam tape. Not the most elegant solution, I guess, but it is cheap, fast, simple, and reversible.

10. Secure the SSR, and reinstall the splash panel. Behind Silvia’s front splash panel is a bolt that can be used to secure the SSR. I did not have a 4mm washer and nut (available at your local hardware store) to use for this purpose, so I simply hung the SSR on the screw, and then put the splash panel back in place.

11. Reinstall Silvia’s top and water reservoir. Put the top back on, tighten up the four screws that hold it down, and reinstall and refill the water reservoir.

12. Fire up! Plug Silvia in, plug the PID in, and turn Silvia on. The PID should display the boiler temperature after a second or two. Press the SEL button on the PID to see the setpoint temperature; use the up and down arrow buttons to adjust the setpoint to 230° F.


In order for the PID to work its magic, various parameters must be set on the controller itself. Fortunately, the PID controller takes care of the hard parts through a process called “autotuning”; through trial and error, the PID determines its own optimum settings necessary to hold the boiler at the desired setpoint. There are a few parameters, however, which need to be set by hand.

Manual Settings

Make the following settings by hand. There are about 50 parameters that can be set manually; I only changed 5.

1. Primary Menu: Press and hold SEL key for 3 seconds. The only item of interest on the primary menu is autotune, which is discussed in the autotuning section below.

2. Secondary Menu: Press and hold SEL key for 7 seconds.

TC (cycle time): I have mine set to 1.

P-n2 (input type): Make sure this is set to 2 for type J thermocouple or 3 for type K.

P-dP (decimal point resolution): Set this to 1 to display temps in one-tenth degree increments.

3. Factory Presets Menu: Press and hold SEL for 9 seconds.

P-dF (input filter constant): This setting filters out quick changes in thermocouple readings and slows down PID responses, which is a bad thing for our application. I have mine set to 0.

FUZY (fuzzy logic): Helps eliminate overshoot. Set to On.


Autotuning is the process where the PID controller determines how output to the heating element affects boiler temperature. After autotuning, the PID sets its own proportional, integral, and derivative parameters so you don’t have to worry about it.

To activate autotuning

  1. Turn on Silvia and the PID and let her warm up for, say, an hour.

  2. Run some water through the portafilter or steam wand to lower the boiler temp.

  3. Press the SEL key for 3 seconds, and then the down arrow key until AT (looks like A7) appears on the PID display.

  4. Press the SEL key once to select autotuning.

  5. Press the UP key once. The PID should display 1. The autotune LED on the PID will start to blink.

  6. Wait a while (about 7 minutes in my experience). When autotuning is complete, the PID will return to the current temperature display.

That’s all there is to it. Silvia is ready to go.


The modifications described on these pages reflect the author’s own experience and are not intended to serve as a guide or instructions for others. These modifications involve tampering with high-wattage electrical circuits in a wet environment, which could result in electric shock, burns, other serious personal injury, or death, as well as fire, explosion, and other property damage. The author is not an electrician and the fact that his modifications were successful was purely a matter of luck. The author and/or MAKE is not responsible for injury or damage to or caused by anyone foolish enough to follow his example. Before you tinker with an espresso machine or any home appliance, make sure you know what you are doing or get help from someone who does. Modifying Silvia voids any warranty provided by the manufacturer and/or retailer.

John F. Murphy is a government lawyer in Fort Worth, Texas, who relies on espresso to fuel him through the work-a-day drudgery.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required