Though I'd worked with a Basic Stamp, I'd never programmed an Arduino so I decided to try one here. Programming proved to be relatively straightforward. For the interface circuit, I had a few rules:

Interfacing the Arduino turned out to be easier than I thought. A discarded relay board from a dehumidifier yielded an appropriate relay but even better, a seven-channel 500mA ULN2003 relay driver IC with integral flyback protection -- something I didn't realize even existed. Paralleling two channels provided enough current to power the grinder motor and another two supplied the dump solenoid. I used one for the heater relay and one for an indicator light, leaving one spare.

I used a 0.1-ohm resistor left over from a bass amplifier repair to implement current sensing on the power line. This allowed me know when the beans are completely ground by detecting reduced current draw from the gearmotor.

As I started counting up the pins on the H-bridge motor driver, the relay driver, the Arduino, the power in and out, and the various signal lines to and from the stir motor, the grinder motor, the servo motor, the solenoid, etc., it became clear than hand-wiring a shield for the Arduino wasn't going to be feasible. I laid out both the logic board (shield) and the power board in the software from ExpressPCB and used their service to have the boards fabricated. Because of packaging considerations, I had to stack the boards one on top of the other.