This post describes the modification of I did on my coffee grinder to add an automatic stop functionality. The built-in mechanical timer has been replaced by an Arduino monitoring the load on the motor and stopping it after the load drops under a threshold.
In this first entry I’ll describe the grinder, the original design and the first prototype I made to verify my idea. It will be followed by another entry where I’ll try to make it more professional.
My coffee grinder is Capresso infinity. It is a burr grinder with variable grind fineness settings and a timer. The unit is a reasonably priced and I’ve been satisfied with it so far.
The grinder has a timer. I suppose that the manufacturer’s intention was to store the beans in the top compartment and then use the timer to grind the required amount of coffee. I don’t like this approach from two reasons
- Precision: I weight my coffee so I can get a consistent coffee to water ratio.
- Air: I prefer storing my beans in an airtight container to keep them fresh longer. The top compartment of the grinder is not airtight.
I use the grinder in a different was. First, I measure a precise amount of beans on a kitchen scale. Then, I put them in the grinder and set the timer to maximum to grind all of the beans. The beans are usually ground well before the timer finishes. Therefore, I have to wait for the timer before I can use the grinds. For my use-case it would be better to just have the grinder run until there are no beans and then automatically shut off.
Inside of the machine
There is no active electronics in the grinder. The only parts are
- 110 V DC motor
- safety switch disconnecting the motor if the top compartment is not installed
- mechanical timer
The motor is connected with the timer and the safety switch in series. Also, the motor is powered through a rectifier.
My first idea was to install a sound detector. The noise of beans being crushed by the burrs is very distinctive in intensity. I run a quick test with a microphone and discovered, that my microphone gets saturated if placed too close to the grinder. My intention was to build the modification inside of the grinder, where the noise would be even stronger.
The second idea I tried was to sense the load on the motor. It is build around the thought that grinding beans puts some load on the motor and thus increases the current draw. I built a simple current transformer and placed it on one one of the wires. The secondary of the current transformer is a coil from a DC-DC power supply having the motor wire going a few times through the opening as the primary winding. I know, not ideal. The core from a DCDC is also probably not the best for this application. A put a 10 ohm resistor across the secondary and measured the waveform on my scope. I was able to see the current waveform of the motor.
Since the output from the current transformer was only a few mV, I had to amplify it in order to read it with Arduino. I simple inverting amplifier did the job.
I used Arduino as the controller for this project. It samples the amplified signal from the current transformer, computes a simple running average and compares it to a threshold. If the signal is less than the threshold for a few seconds it disables opens the relay and thus turns off the motor.