Project Overview
The goal of this project was to motorize my Kingrinder K6 hand grinder so I could grind espresso hands-free, and to cut grind time by more than half.
Hand-grinding an 18g dose at 25 clicks took me ~79 seconds and 64 crank revolutions. Rather than guessing at a motor, I sized one from torque data I measured myself, then built it out through a test stand, a belt drive, and a formed aluminum shroud.
Objective
My original goal was a 5x reduction in grind time (70 seconds down to ~14). Before committing to it, I benchmarked against existing Kingrinder motor conversions: builders were topping out around 80–200 RPM, only ~1.5–2.5x hand-crank speed, before running into stalling, heat, and the rate at which beans can gravity-feed into the burrs. A 5x speedup would have meant redesigning the feed and adding active cooling, so I revised the target to under 30 seconds.
Open-source K6 conversions I studied:
- Honeycomb edition by Medal of Honor: a 12V 36GP-36ZY gearmotor in 80, 98, or 160 RPM versions, driven from a 12V 8A supply
- Yozer’s conversion, a remix of Adam Cook’s design: the motor and gearbox from a gutted 20V brushless drill, with a speed knob
- Nagual’s conversion: couples to the grinder’s hex with a three-jaw coupling and an SDS socket adapter

The requirements I set:
- Under 30 seconds for an 18g espresso dose
- Enough torque for light roasts, the harder case, which also covers dark roasts
- Plugs into the wall, no hand-cranking
- A brushed DC gearmotor: with short ~30 second bursts, brush wear (BLDC’s main advantage) is a non-issue, and brushed gearmotors pair simply and cheaply with the reduction needed. Every conversion I found used one.
Design Process
Torque Characterization
Grinding completeness depends on how many times the beans pass through the burrs, not on elapsed time, so the target speed came from my revolution count. I used the 25-click trial deliberately: it’s finer than my 30-click espresso setting, so sizing against it builds in margin.
Getting a trustworthy torque number took three test setups, each one exposing a flaw that motivated the next:
- Test 1: a 100mm 3D-printed pulley coupled to the grinder shaft, pulled with a luggage scale on a string. The PLA hex socket gradually rounded out under load, since the metal shaft concentrated all the force right at the hex.
- Test 2: grinder held stationary while I pulled the scale on the stock 12cm crank handle. It read 30–60 kg·cm, but it was hard to keep the pull perpendicular, and it mostly captured breakaway spikes rather than continuous grinding.
- Test 3: scale clamped to a table, with the grinder rotated against it instead. This kept the moment arm perpendicular and captured both peak and continuous force in one motion. I first read the video at 1 Hz, then re-read it frame by frame at 6 Hz (above the scale’s ~2–3 Hz display refresh) for 388 readings over 64.5 seconds. Dropping zero readings (hand repositioning) and a final 2-second yank left 364 points as the design dataset.
View data table
| Time (s) | Force (kg) | Torque (kg·cm) | Status |
|---|---|---|---|
| 0.00 | 0.00 | 0.0 | Excluded (zero) |
| 0.17 | 0.00 | 0.0 | Excluded (zero) |
| 0.33 | 0.00 | 0.0 | Excluded (zero) |
| 0.50 | 0.30 | 3.6 | Kept |
| 0.67 | 0.30 | 3.6 | Kept |
| 0.83 | 0.35 | 4.2 | Kept |
| 1.00 | 0.35 | 4.2 | Kept |
| 1.17 | 0.40 | 4.8 | Kept |
| 1.33 | 0.00 | 0.0 | Excluded (zero) |
| 1.50 | 0.00 | 0.0 | Excluded (zero) |
| 1.67 | 0.00 | 0.0 | Excluded (zero) |
| 1.83 | 0.20 | 2.4 | Kept |
| 2.00 | 0.20 | 2.4 | Kept |
| 2.17 | 0.55 | 6.6 | Kept |
| 2.33 | 0.55 | 6.6 | Kept |
| 2.50 | 0.55 | 6.6 | Kept |
| 2.67 | 0.95 | 11.4 | Kept |
| 2.83 | 0.95 | 11.4 | Kept |
| 3.00 | 1.65 | 19.8 | Kept |
| 3.17 | 1.65 | 19.8 | Kept |
| 3.33 | 1.65 | 19.8 | Kept |
| 3.50 | 1.65 | 19.8 | Kept |
| 3.67 | 1.40 | 16.8 | Kept |
| 3.83 | 1.40 | 16.8 | Kept |
| 4.00 | 1.25 | 15.0 | Kept |
| 4.17 | 1.25 | 15.0 | Kept |
| 4.33 | 1.00 | 12.0 | Kept |
| 4.50 | 1.10 | 13.2 | Kept |
| 4.67 | 1.10 | 13.2 | Kept |
| 4.83 | 3.85 | 46.2 | Kept |
| 5.00 | 1.95 | 23.4 | Kept |
| 5.17 | 1.95 | 23.4 | Kept |
| 5.33 | 0.00 | 0.0 | Excluded (zero) |
| 5.50 | 0.00 | 0.0 | Excluded (zero) |
| 5.67 | 0.25 | 3.0 | Kept |
| 5.83 | 1.60 | 19.2 | Kept |
| 6.00 | 1.60 | 19.2 | Kept |
| 6.17 | 4.00 | 48.0 | Kept |
| 6.33 | 1.45 | 17.4 | Kept |
| 6.50 | 1.45 | 17.4 | Kept |
| 6.67 | 4.00 | 48.0 | Kept |
| 6.83 | 1.20 | 14.4 | Kept |
| 7.00 | 3.25 | 39.0 | Kept |
| 7.17 | 1.05 | 12.6 | Kept |
| 7.33 | 1.05 | 12.6 | Kept |
| 7.50 | 3.80 | 45.6 | Kept |
| 7.67 | 2.20 | 26.4 | Kept |
| 7.83 | 2.20 | 26.4 | Kept |
| 8.00 | 2.05 | 24.6 | Kept |
| 8.17 | 3.55 | 42.6 | Kept |
| 8.33 | 3.55 | 42.6 | Kept |
| 8.50 | 1.80 | 21.6 | Kept |
| 8.67 | 1.80 | 21.6 | Kept |
| 8.83 | 3.05 | 36.6 | Kept |
| 9.00 | 0.90 | 10.8 | Kept |
| 9.17 | 0.90 | 10.8 | Kept |
| 9.33 | 2.05 | 24.6 | Kept |
| 9.50 | 0.80 | 9.6 | Kept |
| 9.67 | 0.80 | 9.6 | Kept |
| 9.83 | 2.35 | 28.2 | Kept |
| 10.00 | 1.90 | 22.8 | Kept |
| 10.17 | 1.80 | 21.6 | Kept |
| 10.33 | 1.10 | 13.2 | Kept |
| 10.50 | 1.10 | 13.2 | Kept |
| 10.67 | 1.75 | 21.0 | Kept |
| 10.83 | 0.40 | 4.8 | Kept |
| 11.00 | 0.40 | 4.8 | Kept |
| 11.17 | 0.55 | 6.6 | Kept |
| 11.33 | 1.95 | 23.4 | Kept |
| 11.50 | 0.95 | 11.4 | Kept |
| 11.67 | 0.25 | 3.0 | Kept |
| 11.83 | 1.05 | 12.6 | Kept |
| 12.00 | 1.95 | 23.4 | Kept |
| 12.17 | 0.40 | 4.8 | Kept |
| 12.33 | 0.40 | 4.8 | Kept |
| 12.50 | 1.70 | 20.4 | Kept |
| 12.67 | 1.70 | 20.4 | Kept |
| 12.83 | 1.70 | 20.4 | Kept |
| 13.00 | 0.40 | 4.8 | Kept |
| 13.17 | 1.65 | 19.8 | Kept |
| 13.33 | 1.65 | 19.8 | Kept |
| 13.50 | 1.40 | 16.8 | Kept |
| 13.67 | 0.40 | 4.8 | Kept |
| 13.83 | 0.90 | 10.8 | Kept |
| 14.00 | 1.65 | 19.8 | Kept |
| 14.17 | 1.65 | 19.8 | Kept |
| 14.33 | 0.55 | 6.6 | Kept |
| 14.50 | 1.45 | 17.4 | Kept |
| 14.67 | 1.45 | 17.4 | Kept |
| 14.83 | 1.10 | 13.2 | Kept |
| 15.00 | 1.10 | 13.2 | Kept |
| 15.17 | 3.35 | 40.2 | Kept |
| 15.33 | 1.75 | 21.0 | Kept |
| 15.50 | 1.75 | 21.0 | Kept |
| 15.67 | 1.00 | 12.0 | Kept |
| 15.83 | 1.10 | 13.2 | Kept |
| 16.00 | 1.10 | 13.2 | Kept |
| 16.17 | 1.85 | 22.2 | Kept |
| 16.33 | 0.70 | 8.4 | Kept |
| 16.50 | 0.70 | 8.4 | Kept |
| 16.67 | 1.00 | 12.0 | Kept |
| 16.83 | 1.00 | 12.0 | Kept |
| 17.00 | 1.45 | 17.4 | Kept |
| 17.17 | 0.45 | 5.4 | Kept |
| 17.33 | 0.45 | 5.4 | Kept |
| 17.50 | 1.05 | 12.6 | Kept |
| 17.67 | 1.95 | 23.4 | Kept |
| 17.83 | 1.95 | 23.4 | Kept |
| 18.00 | 0.60 | 7.2 | Kept |
| 18.17 | 0.60 | 7.2 | Kept |
| 18.33 | 1.55 | 18.6 | Kept |
| 18.50 | 0.95 | 11.4 | Kept |
| 18.67 | 0.95 | 11.4 | Kept |
| 18.83 | 0.70 | 8.4 | Kept |
| 19.00 | 1.60 | 19.2 | Kept |
| 19.17 | 1.60 | 19.2 | Kept |
| 19.33 | 0.60 | 7.2 | Kept |
| 19.50 | 2.15 | 25.8 | Kept |
| 19.67 | 2.15 | 25.8 | Kept |
| 19.83 | 0.85 | 10.2 | Kept |
| 20.00 | 0.85 | 10.2 | Kept |
| 20.17 | 2.10 | 25.2 | Kept |
| 20.33 | 1.05 | 12.6 | Kept |
| 20.50 | 1.05 | 12.6 | Kept |
| 20.67 | 1.55 | 18.6 | Kept |
| 20.83 | 1.30 | 15.6 | Kept |
| 21.00 | 0.30 | 3.6 | Kept |
| 21.17 | 2.05 | 24.6 | Kept |
| 21.33 | 2.00 | 24.0 | Kept |
| 21.50 | 0.10 | 1.2 | Kept |
| 21.67 | 2.00 | 24.0 | Kept |
| 21.83 | 2.00 | 24.0 | Kept |
| 22.00 | 0.85 | 10.2 | Kept |
| 22.17 | 2.10 | 25.2 | Kept |
| 22.33 | 2.10 | 25.2 | Kept |
| 22.50 | 1.20 | 14.4 | Kept |
| 22.67 | 1.30 | 15.6 | Kept |
| 22.83 | 1.30 | 15.6 | Kept |
| 23.00 | 1.05 | 12.6 | Kept |
| 23.17 | 1.09 | 13.1 | Kept |
| 23.33 | 0.80 | 9.6 | Kept |
| 23.50 | 1.90 | 22.8 | Kept |
| 23.67 | 1.90 | 22.8 | Kept |
| 23.83 | 0.95 | 11.4 | Kept |
| 24.00 | 1.90 | 22.8 | Kept |
| 24.17 | 1.80 | 21.6 | Kept |
| 24.33 | 1.00 | 12.0 | Kept |
| 24.50 | 1.00 | 12.0 | Kept |
| 24.67 | 1.15 | 13.8 | Kept |
| 24.83 | 1.80 | 21.6 | Kept |
| 25.00 | 1.60 | 19.2 | Kept |
| 25.17 | 0.40 | 4.8 | Kept |
| 25.33 | 1.30 | 15.6 | Kept |
| 25.50 | 1.30 | 15.6 | Kept |
| 25.67 | 0.85 | 10.2 | Kept |
| 25.83 | 1.45 | 17.4 | Kept |
| 26.00 | 1.45 | 17.4 | Kept |
| 26.17 | 1.60 | 19.2 | Kept |
| 26.33 | 1.60 | 19.2 | Kept |
| 26.50 | 0.40 | 4.8 | Kept |
| 26.67 | 1.40 | 16.8 | Kept |
| 26.83 | 1.40 | 16.8 | Kept |
| 27.00 | 0.85 | 10.2 | Kept |
| 27.17 | 1.05 | 12.6 | Kept |
| 27.33 | 1.05 | 12.6 | Kept |
| 27.50 | 1.35 | 16.2 | Kept |
| 27.67 | 1.45 | 17.4 | Kept |
| 27.83 | 0.40 | 4.8 | Kept |
| 28.00 | 2.05 | 24.6 | Kept |
| 28.17 | 2.05 | 24.6 | Kept |
| 28.33 | 1.95 | 23.4 | Kept |
| 28.50 | 1.00 | 12.0 | Kept |
| 28.67 | 1.00 | 12.0 | Kept |
| 28.83 | 2.00 | 24.0 | Kept |
| 29.00 | 1.35 | 16.2 | Kept |
| 29.17 | 1.35 | 16.2 | Kept |
| 29.33 | 3.20 | 38.4 | Kept |
| 29.50 | 3.20 | 38.4 | Kept |
| 29.67 | 1.05 | 12.6 | Kept |
| 29.83 | 1.20 | 14.4 | Kept |
| 30.00 | 1.20 | 14.4 | Kept |
| 30.17 | 1.15 | 13.8 | Kept |
| 30.33 | 1.15 | 13.8 | Kept |
| 30.50 | 0.15 | 1.8 | Kept |
| 30.67 | 1.95 | 23.4 | Kept |
| 30.83 | 1.45 | 17.4 | Kept |
| 31.00 | 1.45 | 17.4 | Kept |
| 31.17 | 2.55 | 30.6 | Kept |
| 31.33 | 2.55 | 30.6 | Kept |
| 31.50 | 3.85 | 46.2 | Kept |
| 31.67 | 1.25 | 15.0 | Kept |
| 31.83 | 1.25 | 15.0 | Kept |
| 32.00 | 2.40 | 28.8 | Kept |
| 32.17 | 1.50 | 18.0 | Kept |
| 32.33 | 0.60 | 7.2 | Kept |
| 32.50 | 1.40 | 16.8 | Kept |
| 32.67 | 1.40 | 16.8 | Kept |
| 32.83 | 0.60 | 7.2 | Kept |
| 33.00 | 1.65 | 19.8 | Kept |
| 33.17 | 1.65 | 19.8 | Kept |
| 33.33 | 1.05 | 12.6 | Kept |
| 33.50 | 1.10 | 13.2 | Kept |
| 33.67 | 0.80 | 9.6 | Kept |
| 33.83 | 1.55 | 18.6 | Kept |
| 34.00 | 1.60 | 19.2 | Kept |
| 34.17 | 0.60 | 7.2 | Kept |
| 34.33 | 1.60 | 19.2 | Kept |
| 34.50 | 1.60 | 19.2 | Kept |
| 34.67 | 0.85 | 10.2 | Kept |
| 34.83 | 1.35 | 16.2 | Kept |
| 35.00 | 1.35 | 16.2 | Kept |
| 35.17 | 2.40 | 28.8 | Kept |
| 35.33 | 3.10 | 37.2 | Kept |
| 35.50 | 3.10 | 37.2 | Kept |
| 35.67 | 0.40 | 4.8 | Kept |
| 35.83 | 0.40 | 4.8 | Kept |
| 36.00 | 2.10 | 25.2 | Kept |
| 36.17 | 0.85 | 10.2 | Kept |
| 36.33 | 0.85 | 10.2 | Kept |
| 36.50 | 2.15 | 25.8 | Kept |
| 36.67 | 1.40 | 16.8 | Kept |
| 36.83 | 1.40 | 16.8 | Kept |
| 37.00 | 1.15 | 13.8 | Kept |
| 37.17 | 1.15 | 13.8 | Kept |
| 37.33 | 1.75 | 21.0 | Kept |
| 37.50 | 0.40 | 4.8 | Kept |
| 37.67 | 0.40 | 4.8 | Kept |
| 37.83 | 1.00 | 12.0 | Kept |
| 38.00 | 1.40 | 16.8 | Kept |
| 38.17 | 1.40 | 16.8 | Kept |
| 38.33 | 1.20 | 14.4 | Kept |
| 38.50 | 2.45 | 29.4 | Kept |
| 38.67 | 2.45 | 29.4 | Kept |
| 38.83 | 1.75 | 21.0 | Kept |
| 39.00 | 2.05 | 24.6 | Kept |
| 39.17 | 2.65 | 31.8 | Kept |
| 39.33 | 0.45 | 5.4 | Kept |
| 39.50 | 0.45 | 5.4 | Kept |
| 39.67 | 0.40 | 4.8 | Kept |
| 39.83 | 1.50 | 18.0 | Kept |
| 40.00 | 0.50 | 6.0 | Kept |
| 40.17 | 2.10 | 25.2 | Kept |
| 40.33 | 1.09 | 13.1 | Kept |
| 40.50 | 0.25 | 3.0 | Kept |
| 40.67 | 2.00 | 24.0 | Kept |
| 40.83 | 2.00 | 24.0 | Kept |
| 41.00 | 3.85 | 46.2 | Kept |
| 41.17 | 1.05 | 12.6 | Kept |
| 41.33 | 1.05 | 12.6 | Kept |
| 41.50 | 1.45 | 17.4 | Kept |
| 41.67 | 2.00 | 24.0 | Kept |
| 41.83 | 2.00 | 24.0 | Kept |
| 42.00 | 0.35 | 4.2 | Kept |
| 42.17 | 1.90 | 22.8 | Kept |
| 42.33 | 1.40 | 16.8 | Kept |
| 42.50 | 2.45 | 29.4 | Kept |
| 42.67 | 2.45 | 29.4 | Kept |
| 42.83 | 0.15 | 1.8 | Kept |
| 43.00 | 2.00 | 24.0 | Kept |
| 43.17 | 2.00 | 24.0 | Kept |
| 43.33 | 2.25 | 27.0 | Kept |
| 43.50 | 2.20 | 26.4 | Kept |
| 43.67 | 2.20 | 26.4 | Kept |
| 43.83 | 1.20 | 14.4 | Kept |
| 44.00 | 1.30 | 15.6 | Kept |
| 44.17 | 1.65 | 19.8 | Kept |
| 44.33 | 1.55 | 18.6 | Kept |
| 44.50 | 1.55 | 18.6 | Kept |
| 44.67 | 0.85 | 10.2 | Kept |
| 44.83 | 2.20 | 26.4 | Kept |
| 45.00 | 2.20 | 26.4 | Kept |
| 45.17 | 0.40 | 4.8 | Kept |
| 45.33 | 1.90 | 22.8 | Kept |
| 45.50 | 1.90 | 22.8 | Kept |
| 45.67 | 0.40 | 4.8 | Kept |
| 45.83 | 0.40 | 4.8 | Kept |
| 46.00 | 1.45 | 17.4 | Kept |
| 46.17 | 1.15 | 13.8 | Kept |
| 46.33 | 1.15 | 13.8 | Kept |
| 46.50 | 1.10 | 13.2 | Kept |
| 46.67 | 2.10 | 25.2 | Kept |
| 46.83 | 2.10 | 25.2 | Kept |
| 47.00 | 3.15 | 37.8 | Kept |
| 47.17 | 3.05 | 36.6 | Kept |
| 47.33 | 3.65 | 43.8 | Kept |
| 47.50 | 0.85 | 10.2 | Kept |
| 47.67 | 0.15 | 1.8 | Kept |
| 47.83 | 0.00 | 0.0 | Excluded (zero) |
| 48.00 | 0.60 | 7.2 | Kept |
| 48.17 | 0.60 | 7.2 | Kept |
| 48.33 | 1.25 | 15.0 | Kept |
| 48.50 | 1.85 | 22.2 | Kept |
| 48.67 | 1.55 | 18.6 | Kept |
| 48.83 | 0.80 | 9.6 | Kept |
| 49.00 | 0.80 | 9.6 | Kept |
| 49.17 | 1.90 | 22.8 | Kept |
| 49.33 | 1.95 | 23.4 | Kept |
| 49.50 | 1.75 | 21.0 | Kept |
| 49.67 | 0.65 | 7.8 | Kept |
| 49.83 | 1.55 | 18.6 | Kept |
| 50.00 | 1.55 | 18.6 | Kept |
| 50.17 | 1.95 | 23.4 | Kept |
| 50.33 | 1.95 | 23.4 | Kept |
| 50.50 | 0.50 | 6.0 | Kept |
| 50.67 | 1.95 | 23.4 | Kept |
| 50.83 | 1.15 | 13.8 | Kept |
| 51.00 | 1.15 | 13.8 | Kept |
| 51.17 | 1.05 | 12.6 | Kept |
| 51.33 | 1.25 | 15.0 | Kept |
| 51.50 | 1.05 | 12.6 | Kept |
| 51.67 | 1.00 | 12.0 | Kept |
| 51.83 | 1.50 | 18.0 | Kept |
| 52.00 | 0.95 | 11.4 | Kept |
| 52.17 | 0.95 | 11.4 | Kept |
| 52.33 | 1.80 | 21.6 | Kept |
| 52.50 | 1.15 | 13.8 | Kept |
| 52.67 | 1.15 | 13.8 | Kept |
| 52.83 | 2.60 | 31.2 | Kept |
| 53.00 | 2.45 | 29.4 | Kept |
| 53.17 | 3.45 | 41.4 | Kept |
| 53.33 | 0.50 | 6.0 | Kept |
| 53.50 | 0.50 | 6.0 | Kept |
| 53.67 | 2.50 | 30.0 | Kept |
| 53.83 | 0.70 | 8.4 | Kept |
| 54.00 | 0.70 | 8.4 | Kept |
| 54.17 | 2.10 | 25.2 | Kept |
| 54.33 | 0.75 | 9.0 | Kept |
| 54.50 | 0.75 | 9.0 | Kept |
| 54.67 | 2.20 | 26.4 | Kept |
| 54.83 | 1.00 | 12.0 | Kept |
| 55.00 | 1.10 | 13.2 | Kept |
| 55.17 | 1.15 | 13.8 | Kept |
| 55.33 | 1.15 | 13.8 | Kept |
| 55.50 | 2.35 | 28.2 | Kept |
| 55.67 | 0.00 | 0.0 | Excluded (zero) |
| 55.83 | 0.00 | 0.0 | Excluded (zero) |
| 56.00 | 1.15 | 13.8 | Kept |
| 56.17 | 2.10 | 25.2 | Kept |
| 56.33 | 2.10 | 25.2 | Kept |
| 56.50 | 0.50 | 6.0 | Kept |
| 56.67 | 0.90 | 10.8 | Kept |
| 56.83 | 2.25 | 27.0 | Kept |
| 57.00 | 0.15 | 1.8 | Kept |
| 57.17 | 0.15 | 1.8 | Kept |
| 57.33 | 1.30 | 15.6 | Kept |
| 57.50 | 2.15 | 25.8 | Kept |
| 57.67 | 2.15 | 25.8 | Kept |
| 57.83 | 0.30 | 3.6 | Kept |
| 58.00 | 1.70 | 20.4 | Kept |
| 58.17 | 1.70 | 20.4 | Kept |
| 58.33 | 3.00 | 36.0 | Kept |
| 58.50 | 3.00 | 36.0 | Kept |
| 58.67 | 0.60 | 7.2 | Kept |
| 58.83 | 3.65 | 43.8 | Kept |
| 59.00 | 3.65 | 43.8 | Kept |
| 59.17 | 0.50 | 6.0 | Kept |
| 59.33 | 1.90 | 22.8 | Kept |
| 59.50 | 1.90 | 22.8 | Kept |
| 59.67 | 0.20 | 2.4 | Kept |
| 59.83 | 0.00 | 0.0 | Excluded (zero) |
| 60.00 | 1.90 | 22.8 | Kept |
| 60.17 | 0.30 | 3.6 | Kept |
| 60.33 | 0.90 | 10.8 | Kept |
| 60.50 | 2.30 | 27.6 | Kept |
| 60.67 | 0.25 | 3.0 | Kept |
| 60.83 | 0.25 | 3.0 | Kept |
| 61.00 | 1.80 | 21.6 | Kept |
| 61.17 | 1.30 | 15.6 | Kept |
| 61.33 | 0.75 | 9.0 | Kept |
| 61.50 | 1.40 | 16.8 | Kept |
| 61.67 | 1.40 | 16.8 | Kept |
| 61.83 | 0.20 | 2.4 | Kept |
| 62.00 | 2.10 | 25.2 | Kept |
| 62.17 | 2.10 | 25.2 | Kept |
| 62.33 | 1.00 | 12.0 | Kept |
| 62.50 | 2.00 | 24.0 | Kept |
| 62.67 | 2.00 | 24.0 | Excluded (final yank) |
| 62.83 | 1.05 | 12.6 | Excluded (final yank) |
| 63.00 | 1.05 | 12.6 | Excluded (final yank) |
| 63.17 | 3.65 | 43.8 | Excluded (final yank) |
| 63.33 | 3.80 | 45.6 | Excluded (final yank) |
| 63.50 | 3.80 | 45.6 | Excluded (final yank) |
| 63.67 | 0.30 | 3.6 | Excluded (final yank) |
| 63.83 | 1.60 | 19.2 | Excluded (final yank) |
| 64.00 | 1.60 | 19.2 | Excluded (final yank) |
| 64.17 | 4.50 | 54.0 | Excluded (final yank) |
| 64.33 | 2.10 | 25.2 | Excluded (final yank) |
| 64.50 | 2.10 | 25.2 | Excluded (final yank) |
| Percentile | Force | Torque (12cm arm) |
|---|---|---|
| Mean | 1.43 kg | 17.2 kg·cm |
| 75th | 1.95 kg | 23.4 kg·cm |
| 90th | 2.35 kg | 28.2 kg·cm |
| 95th (design torque) | 3.10 kg | 37.2 kg·cm |
| Max | 4.00 kg | 48.0 kg·cm |
I chose the 95th percentile as the middle ground: the mean would leave the motor struggling through half of real grinding moments, while the single max reflects one rare spike. With 364 points, the 95th percentile is backed by ~18 real readings rather than a handful of outliers.
Motor Sizing
I set the design torque at 50% of the motor’s stall torque. That’s a DC motor’s peak-power point, beyond which torque and speed both fall off quickly. The short burst duty cycle let me be more aggressive than a continuous-duty application on heat, but it does nothing for stall risk: a single spike above stall torque stops the motor regardless of run time. Since my data already showed spikes up to 48 kg·cm, I stopped loosening the margin at 50%.
Treating the motor’s torque-speed curve as a straight line between no-load speed and stall torque, the required no-load speed follows from putting 128 RPM at that 50% point:
The first motor I looked at, a 12V, 19:1 gearmotor, only had 4.6 kg·cm of stall torque, far short of the requirement. The DOCYKE DC90 (a 36:1 planetary gearmotor, 6–22V) fit much better: reading its published torque and speed curves, both targets converge at ~16V (~75 kg·cm stall, ~253 RPM no-load). Having one voltage satisfy both at once was the real signal it was a good match.




View data table
| Voltage | Stall torque (kg·cm) | No-load speed (RPM) |
|---|---|---|
| 6V | 12 | 84 |
| 12.4V | 45 | 186 |
| 18V | 90 | 288 |
| 22V | 120 | 350 |
For current, I anchored a current-vs-torque line with two points: a reviewer’s no-load measurements (~0.4A at 6V, 0.6A at 20V) and the spec sheet’s 25A stall. That predicted ~10.7A at my design torque, and I sized the fuse and wiring around it.
Comparing against other builds, my required stall torque was ~4.3x my mean grinding load, versus ~2–3x for working conversions. Rather than buying a second, smaller motor to find out whether I was too conservative, I planned to use the DC90’s own voltage range: at ~13.5V it behaves like the less conservative spec (~56 kg·cm stall).
Test Stand
Stacking the motor directly on the grinder was the obvious layout, but it made a tall, top-heavy assembly: 17.5cm grinder + 25mm coupler + 129.5mm motor ≈ 33cm, on a 5.2cm base, with the motor blocking the hopper. That ruled it out for the final build. For a first round of current measurements, though, direct drive was the fastest way to get real data, so I built a test stand with a printed clamp around the grinder’s grip.


The first no-load run spun 11 revolutions in 2 seconds at 20.2V (330 RPM), which lined up with the DC90’s published speed curve. That was the first real confirmation that the motor matched the charts the whole sizing was built on.
Challenges and Solutions
Arc Fault at the Motor Terminal


Challenge
- During the first loaded test, feeding one bean at a time, the third bean produced a loud pop and a spark at the motor’s terminals. Current jumped from 0.8A to 18.7A, then to 68.4A as the battery voltage collapsed from 20.3V to 4.77V, and the ammeter (rated to 50A) went dark. The DeWalt battery didn’t survive either.
- 68.4A is nearly 3x the motor’s 25A stall ceiling. A stalled motor physically can’t draw that much, so this wasn’t just a hard bean; something had shorted.
Solution
- Checked the motor before blaming it: winding resistance was still 0.9Ω, with no continuity from either terminal to the case
- Traced the root cause to a hooked connector draped over the spade tab, with nothing clamping it. It was fine at 0.8A, but as current climbed, the marginal contact heated up and arced.
- Switched to crimped female spade connectors and added a 20A slow-blow fuse, sized above legitimate grinding peaks but below the motor’s 25A ceiling. I had skipped the fuse for that first test; it would have cut power right as the short developed.
- Worked back up in steps instead of jumping straight to a full dose: no-load (0.4A at 20.4V, matching the reviewer’s data), then single beans at 40 clicks (≤0.9A), then continuous batches (3.3A)
Shaft Coupler Slipping


Challenge
- The grinder’s drive shaft is a 1/4 inch hex (6.35mm across the flats, but 7.18mm across the corners), so it doesn’t fit a 6.35mm round bore at all. In the motor’s 8mm flange coupler, it had up to ~0.85mm of play per side for two set screws to fight.
- Under continuous-feed grinding, the coupling worked loose partway through a test
Solution
- Tried three fixes: a tape shim to fill the gap, sanding the hex corners round to fit a 6.35mm flange with set-screw flats, and an 11mm flange clamped over the hex extender’s 10.95mm OD with M4 screws. Each one eventually slipped under load; the set screws left scoring on the extender instead of holding.
- These failures, together with the height of the stacked layout, pushed the final design to a side-mounted belt drive with bearing-supported shafts
Motor Shaft Support

Challenge
- On the belt drive, the pulley on the motor side was cantilevered directly off the motor’s shaft. Under load, the belt skipped teeth on that side and the shaft visibly deflected.
- After adding a printed bearing mount and tightening the belt, the extra tension went too far: it sheared material off the motor shaft
Solution
- The grinder side already had its own outboard support bearing, since the K6’s internal bushing was designed for the almost pure torque of a hand crank, not the constant sideways pull of a belt
- On the motor side, I extended the shaft with an aluminum shaft and added a second bearing mount above the motor, so the belt load is carried by bearings rather than by the motor’s own shaft
Start-Up Current Trips
Challenge
- Switching the motor on with the toggle switch tripped my bench supply’s overcurrent protection at 7–8A, even with no beans loaded, while it ran normally once it auto-reset. A laptop-style 19–20V supply capped at 6.4A reacted the same way, cycling on and off in hiccup mode.
Solution
- Identified it as inrush current: at 0 RPM there’s no back-EMF limiting current, and the motor also has to spin up the gearbox, pulley, and belt from rest. The DeWalt batteries had simply been powerful enough to absorb it.
- Found that starting from the supply’s own output button didn’t trip it, since the supply ramps its own output on. Running the bench supply in constant-current mode should have the same effect, letting voltage rise with the motor’s speed instead of applying it all at once.
- Next step: a soft-start PWM controller, with the toggle switch becoming a low-current enable signal instead of switching motor power directly

Final Design
The final layout puts the motor beside the grinder, connected by a timing belt on 3D-printed pulleys. The grinder shaft has its own outboard support bearing, and the motor side runs through an aluminum shaft extension with a bearing mount above the motor. This keeps the height close to the grinder’s own and leaves the hopper open for pouring in beans.
Enclosure
For the enclosure, I wanted the geometric simplicity of the Fellow Ode and Datum grinders: a clean rectilinear body wrapped in sheet metal with no exposed screws, sized to sit next to my Breville Bambino. Before settling on final dimensions, I tested proportions with a posterboard mockup, then modeled the enclosure in Fusion 360.


The shroud is 0.025 inch aluminum sheet (five 2ft x 2ft sheets for $16), bent by hand:
- 25mm bend radii on the corners. At that thickness, the sheet dents at any point load, so each bend needs broad, even pressure.
- A flat pattern length of 609.189mm, which falls between the shroud’s inner (607.4mm) and outer (611.4mm) circumference: the neutral axis sits ~44% of the way through the thickness (K ≈ 0.44), neither stretching nor compressing during bending

Results & What’s Next

- In direct-drive testing, ground a dose in about 20 seconds, down from ~79 seconds by hand and well under my 30 second target
- Full doses at 25 clicks usually stayed under 5A, less than half the ~10.7A my model predicted. The motor-measured peak (~16.3 kg·cm) landed right on my hand-crank data’s mean, suggesting the hand-crank method overstated peak torque.
- Kingrinder’s support team confirmed an electric drill can drive the grinder at 15–25 N·m (153–255 kg·cm), well above the DC90’s 90 kg·cm maximum
What I’d do differently: the DC90’s relatively low 36:1 reduction means it draws ~5A, where the higher-reduction 36GP-36ZY motor in the Honeycomb build is rated for ~1.2A. It’s ~4 seconds faster per dose, and everything was already validated around it, so I kept it, but a higher gear ratio would have allowed a smaller power supply.
Still open:
- Soft start, so it can start cold with beans already loaded
- Bean feed stalls: an 18g dose sometimes stops at ~9g until more beans are added. I’m investigating whether beans are snagging on the new bearing and pulley hardware or bouncing at the burr entry.
- Retention of ~1g after RDT at the printed outlet plate
Before and After
