Saturday, 29 July 2017

Sheeeeeeet metal part 2 - unboxing

All of the sheet metal parts showed up in a nicely packed box yesterday.

The drip tray insert is just laser cut for the moment. I wanted to check it for the fit before paying for the custom tooling required to stamp the holes.



The drip tray itself is pretty much good to go like this. There is a slight difference in the finish at the corners where the discoloration from the welding was buffed out, but this is actually more visible in the photo than it is in reality. 


The warming shelf - ready to go except for the system for retaining it in place.


The cup warmer rails.


The backsplash, ready to be installed.


... and the cover. This is the most difficult part of the lot because of the radiused corners at the back. Those have given me much pain both to model in cad and in finding a supplier able to make them. 



A test fit of the cover and the drip tray...


... and, following a complete disassembly of the machine, a test fit of the the backsplash and cover.


Monday, 17 July 2017

Shakerato

Over the last six weeks I have been making some progress plugging away at the firmware for the controller. As anticipated, the code for the human interface is both more complicated and voluminous than the code required to control the actual machine itself. I've got proof of concepts done for both halves of the code (i.e. the menu system and the state machine) and now I'm working on putting them together. 

I'm also waiting to get the first batch of sheet metal in. I went through about ten suppliers before I found one that had the required tooling, was willing to do the prototyping and make a small run. I should have some pictures in a few days. I finished up the package of cad drawings during a trip to Italy where I had some great (and some not so great) coffee. The best was, of all places, in terminal 3 at Rome Airport at a generic chain café. That is one of the things I love about Italy - the last time I was there the best coffee I had was in a gas station by the side of the highway - great coffee is normal. While I was in Rome, I made the trip to Caffè Sant Eustachio. 




This place is great. They have a two-page(!) menu of bizarre coffee drinks any one of which would be enough to draw the crowds. Their signature is Il Gran Caffè (speciale). They make it behind a privacy screen to stop you seeing how they do it (nor will they tell you if you ask ;)). I believe the technique comes from Naples where they take the crema from the start of the pull and whip it up with sugar before putting it back on the rest of the espresso. The result is an inch of sweet, creamy crema mouse on top of a great espresso. That, along with a pastry from the counter opposite the bar and you are totally set for sugar for the day.

The star at the bar, however, is the "Shakerato" which is made in what has to be the most hilarious machine I've seen in a while:



Iced coffee and milk go in a cocktail shaker that sits in the stainless steel receiver. Then the machine shakes the crap out of it for two or three minutes. And it's orange. What can I say? I want one!







Shakerato II - revenge of the tumbler

Thursday, 25 May 2017

Controller part 6 - autofill

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.

Monday, 22 May 2017

Controller part 5 - code and callibration

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. 























Tuesday, 16 May 2017

Controller part 5 - state machine

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

Controller part 4 - dweenos and sensors and proper LRFs

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.