All the functionality shown in the state diagram will be built into the programming of the microcontroller (an Arduino at least for now as it is so convenient). The extreme democratization of microcontrollers just makes having discrete industrial controllers a non-starter. I could purchase Arduinos and just hand solder a rat's nest of components for less than the cost of a single Gicar, never mind the $300+ PID and $100 pressurestat. Once the electronic design is finished, a custom PCB will reduce the cost even further (if one neglects the not insignificant work that will go into it :).
What is required for the autofill is essentially a comparator - a circuit that checks to see if a voltage level is above or below a certain threshold. The essence of the circuit is a switch that is grounded by the water when it touches the probe.
The switch in the diagram is analogous to the probe touching the water or not (and assumes that the boiler is physically connected to the same ground as the microcontroller). When the switch is open, the analog pin on the Arduino "sees" the full 5 volts. When the switch is closed, the value "seen" by the pin drops to (close to) zero. In reality, as a result of the resistance of the water, the boiler, the probe etc., this value is not zero; thus the need for a comparator. But this is easy to implement on the microcontroller:
autoFillProbeValue = analogRead(autoFillProbePin);
if (autoFillProbeValue < 500) {
digitalWrite(autofillSolenoidPin, HIGH);
}
else {
digitalWrite(autofillSolenoidPin, LOW);
}
The Arduino is an 8-bit device and the logic level is 5v, so values between 0 and 5v are mapped by the analog to digital convertor to values between 0 and 1023 (2 to the 8th power values). So anything lower than 500 will open the solenoid. By putting in a timer which counts while the pin is high, it is possible to trigger an alarm when the tap has been on for too long. When that alarm is triggered, the state machine switches off the solenoid and the heater and waits for a reset signal before it will do anything else.
As the probe is sitting in water in close proximity to a heating element that is powered by a 15amp 120v circuit, I also added a diode rated for the voltage in the line to the probe. I will have to consult a higher power to see if there are any other safety precautions that should be taken.
The temperature and auto-fill controller code is done. I put a little extra logic to allow for calibration of the thermocouple sensor. For now, the screen shows the current state at the top left, time elapsed, bottom left, two temperature readings (upper is current reading from thermocouple, lower is the set point) and three bits of data: A is the alarm state, H is the heating element and F is the solenoid. The reading in ice-water was a few degrees above what it should be.
A second data point is taken using boiling water.
Then, the corrected temperature can be calculated using the formula:
CorrectedValue = (((RawValue - RawLow) * ReferenceRange) / RawRange) + ReferenceLow
where ReferenceLow is 0.01 for ice water and ReferenceRange is the boiling point at your elevation minus the ReferenceLow.
Although there is a bit of swing in the readings, the corrected output for boiling point looks pretty good. I would say that this thermocouple setup is accurate to +/- 0.5C - which is certainly good enough for boiler control. Without better reference tools, I will just have to assume for now that the rest of the range (i.e. above 100 C) is similarly accurate.
Meanwhile...
Here is something else to contemplate: a state machine diagram for the operation of the controller.
Key -
PWM - pulse width modulation (for the solid state relay that drives the heating element)
AF - autofill
OT - overtemperature
I've spent the last couple of days getting my head into code and hooking sensors to arduinos. This is a setup that controls a reflow oven lent to me - along with the code - by a friend.
I'll report back when I have something to show...
In the meanwhile, I had a go at some proper LRFs (little rubber feet).
I've come to the conclusion that plastic is, well, too plastic. Good coffee is a luxury that merits the use of premium materials.
In that spirit, I broke out the king of woods, the champion of the rainforest: mahogany.
I generally try to avoid working too much wood in the shop because of the mess. So much dust... For the same reason, I have not purchased a jointer or planer. So, a ripping blade in the table saw will have to do.
After a change the blade to do the cross cuts.
A 1/8" round-over in the router to finish 8 of the 12 edges.
Then it is into the milling machine with a vacuum cleaner running to keep the dust from getting anywhere it shouldn't.
Flip the block and drill a blind hole. For now, as this wood is hard enough to hold a bolt intended for metal, that is what I will use. Ultimately, I will likely anchor some threaded rod in with epoxy and use a nut.
Cut and glue on some rubber pads to provide the necessary friction.
Then. having previously sanded them to take off the burn marks from the table saw and router the blocks can be finished with some tung oil.
...damn. Forgot to take a picture of them installed. Watch this space.
The last piece????
Ok, well not technically the last piece, but the only one standing between me and an entirely functional machine.
The check valve cap for the group is fairly straight forward. I had ordered a couple of carbide 60 degree threading inserts and a holder a few months ago to eliminate the guess-work. I had initially gone "old-school" and used a jig to grind a thread cutter from tool steel. It works, but it isn't perfect and it can't thread as close to a shoulder as the insert. Having turned down some hex stock to the major diameter of the M18x1 thread and added a relief groove at the shoulder I set up the lathe to cut the thread in 29 passes and left it to its own devices.
The hex stock is a short-cut - ideally, I would machine a smaller concentric hexagon on the top as there isn't enough room to get a socket driver on when it is installed in the group. It will do for now however.
... and that is it. A complete working machine! I threw together a temporary drip tray from some aluminum sheet, metal duct tape and copious use of a hammer - file under ain't pretty, but works.
Now, while I wait for sheet metal done by my betters, it is time for the somewhat drier (literally, not metaphorically) work of testing, coding and electronics.
Yesterday I actually did boil water.
I am missing a few pictures. The first thing to do was to take the 1/4-20 screw off the TC and to put it into an adaptor which threads into the top of the tank. The probe is now in direct contact with the airspace above the water. The lag between the installed TC and the faster-reading TC from the multimeter is now down to about 7 degrees. I set the temperature controller to auto-tune to a set point of 70 degrees C and did something else for an hour and a half. Then I moved the set point to 95C. I don't have the data with me but the controller overshoots by 5 or 10% or so during a cold start. After a short period (roughly 15 minutes total) the installed probe catches up with the reading from the multimeter. If the set point is then increased slowly, the two readings move pretty much in lock-step. This means that with a little tweaking of the PID coefficients (likely the D), the controller could probably be made to hit the set point with little or no overshoot. I think however, that it may just be easier to divide this into two problems. The first is heating up from a cold or warm start. The second is maintaining temperature at the set point. With a micro controller replacing the temperature controller it will be easy to set a safe initial set point, wait for the heat to disperse through the system so that readings become reliable, and then move the set point to its final value.
The good news is that the controller is already very good at keeping the temperature stable once it gets there.
The two pictures I did take yesterday :
Today I (nearly) boiled water.
The result of the squirrelly form factor of the thermocouple is this ridiculous adaptor:
I put a drop of heat-transfer grease on the tip of the TC to aid the conduction of the heat and attached the whole lot to the boiler. Then I did a quick test of the controller using a lamp in place of the heating element.
Now for the real thing. I put the multimeter TC probe directly into the boiler so that I can compare it with the controller TC. Time to 'put the kettle on'.

As I feared, the lag created by the thermal mass of the lump of brass in the adapter and the less than ideal position in which it is installed (close to the bottom of the boiler) is significant. After about 8 minutes, the water got pretty close to boiling but the controller probe was nearly 30 degrees behind. After another ten minutes or so, the gap had narrowed to about 9 degrees, but this is far from ideal. Quite possibly, everything will stabilise once the heat is completely diffused through the entire system and in theory, with some calibration of the set point and proper PID coefficients, the overshoot can be reined in. However, a twenty minute plus sample rate just isn't acceptable. To remedy the situation, I am going to move the TC to the top of the boiler and look for a better form-factor - one that can be installed through the wall of the boiler.