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.
I think we've turned a corner because it definitely seems like it's time to start on the other kind of plumbing!
Here's one I made earlier...
(Not sure how many here will get that reference).
For those who haven't come across them before, these are modular DIN rail industrial control components - aka Lego for electrical engineers. From left to right, AC distribution, 24v DC (blue) and 5V DC (black) power supplies, DC fuse blocks, DC distribution, 12V (white) power supply in the middle, unconnected terminal blocks and a magnetic contactor for switching large loads. The grey terminal blocks come in various flavours (1x1, 1x2, 2&2 etc) and can be jumpered together, converting them into bus bars for power or signal distribution. The metal DIN rail serves as a ground bar linking all the green terminal blocks together - the equivalent of chassis ground. I put this together a while ago for another project and kept it assembled as it often comes in handy.
The 12v supply wont be necessary and neither will the contactor, but the rest will be useful. The first order of business is the temperature control. I have this nice Watlow controller which I am borrowing from another project. It has a number of features that I want to take advantage of. The first is simply speed - this thing just works: five minutes of mandatory RTFM, specify the thermocouple type, change the set point and away you go. The other advantage is that it has a PID auto tune mode which should obviate the need to empirically determine the coefficients for the three terms of the control expression.
I ordered a few of these $2 thermocouples from China a few months ago (K type if I remember correctly). They are advertised as 6mm but are in fact 1/4-20 (but the nut is metric - what a world). They also don't seal, which is a pain as it means that they can be put directly inside the boiler.
A quick side-by-side test with the thermocouple that came with my multimeter shows that all is well in this particular tiny corner of the world.
The TC is hooked to the input of the Watlow and the output is sent to a solid state relay (SSR) that will control the heating element.
The setup so far, from left to right:
Arduino and protoboard (top left)
Unused contactor (bottom left)
Autofill probe connections
24V DC / 120V low amperage control relay (light blue)
Bidoowee brand 5V to 24V and 24V to 5V optoisolated signal convertor (green IC board)
DC distribution and fuseblocks
DC power supplies
AC distribution
SSR (top right)
GFCI outlet (to the left of and connected to the SSR) (powering the heating element)
A couple of words of warning here. The wire gauge used is technically not adequate for the amperage drawn by the heating element. Also, we are playing with 15amps and lots of water, thus the GFCI (Ground Fault Circuit Interrupter). Out of frame, the whole mess is plugged into another GFCI on a 12 gauge extension cable for belt and suspenders safety.
I have been having quite a time finding the right set of steam and water taps for the build. Although I know that lever style controls are preferred by some over traditional taps, I would really like to preserve the look of the original design. Personally, I find the lever valves are akin to forelegs on a Tyrannosaurus Rex - out of proportion with the rest of the beast.
Alas, the Brugnetti valve is out of production (although there is still a little new-old stock to be found) and I have not come across any of the handles at all. I combed the databases of a number of suppliers to find a likely candidate and found one from Pavoni:
I ordered the valve body and the handle separately and was surprised to find that the handle wasn't the one in the image (it is actually nicer imho). Also, not such a nice surprise, the outlet of the of valve I received is angled back towards the body of the machine. This makes it unusable in the design and I have to find something else. I am guessing that as the Pavoni Bar 2L is still in production that the straight valves can still be found. In an ideal world however, the valve outlet would angle away from the body so that the assembly can be kept close to the backsplash. The Pavoni actually uses an additional spacer to solve this problem. Any suggestions for something closer to the original from another machine in production would be greatly appreciated. Otherwise, I will just have to sort out a right-angle Pavoni valve I suppose.
I had to install the tap that I received temporarily so that I can go on to other things.
Not right at all, but it will have to do for now.
There were a couple of missteps in the last round of plumbing that I had/wanted to fix. The first had to do with the way that the parts were supported when they were brazed. The intense heat from the oxy-acetylene torch combined with the pressure of the vise caused the brass parts to soften and deform. The result was a complete set of oval compression fittings - sniff.
I made a couple of compression dies from some scrap aluminum to try to salvage the work.
Fairly straight forward to use: drop them into the vise and crush the living *&^#&@#$ out of them.
We will find out if these are round enough when I fill the boiler!
I used North American 1/4" tubing for very first run that I made from the boiler to the manometer. The 1/4" is really close to 6mm, but the fittings, well, don't really fit. I was also not particularly happy with the stack of adaptors on the back of the meter, so I swapped it all out for a new 4mm line with a coil to catch the condensation. The nice thing about the 4mm is that it can be bent easily and without much fear of the wall collapsing. I made the coil by winding the tubing around a cylinder by hand.
Here is the line, with the fittings brazed in place (round ones this time) and ready to be installed.
I also wanted to add a tank drain to the plumbing system. I don't really understand why this isn't a more common feature. The HX setup means that the mineral concentration of the water in the boiler is constantly increasing as pure water is drawn off in the form of steam. On the Aurora, a proper boiler flush can only be done by removing the case and disconnecting the lowest convenient fitting, which is the line to the level gauge. What this actually means in practice is that boiler flushes don't get done nearly as often as they should. I built the stainless boiler as a (nearly) drop-in replacement for the copper original. However, I don't intend to build a level gauge as I think that they are vestigial and appendix-like. This means that the ports can be used for something else - e.g. a drain!
That is an ooooold valve. I'll have to find something a little better eventually.
That, I think, is it for now for the plumbing. Here are a few shots of the finished setup.