← BACK TO PROJECTS

automating a chocolate production line

CASE CHOCOLATES · ENGINEERING TECHNICIAN · HOUSTON, TX · APRIL 2026 – PRESENT · ONGOING

sole engineer. i’m building it one module at a time. this is module one, and it runs.

FIG. 01 · MOTORIZED PRESS · REV C · MODULE 1
The motorized chocolate press on the workbench, three-quarter view
THE PRESS · AS BUILT

overview

CASE Chocolates is automating its production line. The larger goal is an automated production system; the system is modular by design, because each subsystem has to deliver value on its own. The press , the machine that forms the product, is the first module, taken from prior static CAD to a working software-controlled prototype. The powder sifting and containment subsystem and the electronics enclosure are in flight. The remaining downstream modules are scoped, not built.

I am the sole engineer, end to end: CAD, prototyping, sourcing, motor and driver selection, wiring, firmware, and testing , building on prior CAD from two previous engineers.

SYSTEM MAP · AUTOMATED PRODUCTION LINE · RENDERING = STATUS
  1. MODULE 01 · BUILT · RUNS
    motorized press
  2. MODULE 02 · IN PROGRESS
    powder sifting & containment
  3. MODULE 03 · IN PROGRESS
    electronics enclosure
  4. MODULE 04 · SCOPED, NOT BUILT
    remaining downstream modules
BUILT, SOLID, LIT, CLICKABLE IN PROGRESS · HALF-MATERIALIZED▢ SCOPED, WIREFRAME ONLY

WHAT’S SOLID IS WHAT EXISTS. WHEN THE NEXT MODULE SHIPS, ITS BOX MATERIALIZES.

the problem

BEFORE · OPERATOR LOWERS THE PLATE BY HAND
The original hand-operated press before motorization
THE STARTING POINT

The press cycle was manual: an operator lowering and raising a heavy plate by hand, every cycle, with depth and dwell set by feel. The machine replaces that with a commanded cycle, home, descend to a fixed depth, hold, retract, repeatable to the step.

the constraints

FOOD SAFETY
the product-contact surface admits zero penetrations. no holes, no fasteners, no thread paths.
CONTAMINATION CONTROL
powder gets everywhere. moving elements must tolerate it or be sealed from it.
COST & MVP DISCIPLINE
the most valuable work was often deciding what not to build. every part earns its place.
MODULARITY
each subsystem has to deliver value on its own, the system ships one module at a time.

drive architecture selection

Four candidate architectures for moving the plate. Click between them, three were rejected for specific reasons, not preference.

SELECTED · one motor, one screw, symmetric load path through the plate center. this is the geometry the full assembly grew from.
Hand sketches comparing timing-belt, dual-motor, single-center-actuator and worm-gear drive options
THE ORIGINAL TRADE STUDY, ON PAPER

the torque budget

LOAD        ~5 kg plate
REQUIRED    21.5 N·cm  ████████░░░░░░░░░░░░
AVAILABLE   40–60 N·cm (NEMA 17)
VERDICT     sized, not over-specified
THE FOOD-SAFETY GEOMETRY CONFLICT · SECTION A–A
01 · NAIVE · CENTERED SCREW THROUGH THE PLATE

The naive layout drives the plate from its center, which puts a threaded hole through the one surface that isn’t allowed to have one. Splitting the plate resolves the conflict without weakening either constraint: the backing plate carries every hole, every fastener, and the motor whose screw climbs through the fixed crosshead nut; the product-contact plate below it stays completely solid, bolted at the perimeter only. The backing plate also acts as a stiffener, resisting racking under off-center load.

contamination-resistant motion

PTFE-lined self-aligning bearings

Cocoa powder ends the argument for rolling elements: an open ball bearing packs its raceways and seizes. The PTFE-lined bushings have no raceways to clog, run dry with no lubricant to foul, and tolerate 0.5° of misalignment.

OPEN BALL BEARING · RACEWAYS PACK, THEN SEIZE
PTFE BUSHING · NO RACEWAYS, RUNS DRY, SHEDS
The manual press guide bearing running caked in starch powder
THE ARGUMENT, PHYSICALLY · THE OLD BEARING, RUNNING IN POWDER

the parametric bellows

The lead screw needs a cover that lives between two moving planes and survives washdown, a part that doesn’t exist off the shelf at this geometry. A Python script generates it instead: target length and convolution count in, printable TPU geometry out, auto-split into segments when it exceeds the build volume.

PARAMETRIC BELLOWS GENERATOR · LIVE
BUILD VOLUME 180 mm → AUTO-SPLIT INTO 2 PRINTABLE SEGMENTS, BONDED AT VALLEYS
Printed TPU bellows segments bonded into the full-length cover
THE PRINTED PART

hardened guide rods

GUIDE RODS   HARDENED STEEL Ø8 ON ALUMINUM SHAFT SUPPORTS
STIFFNESS    ~30× STIFFER THAN PRINTED PLASTIC
CREEP        NONE · GEOMETRY HOLDS UNDER SUSTAINED LOAD

electronics & firmware

The control stack is deliberately plain: an Arduino running C++ firmware, a stepper driver, the NEMA 17, two limit switches for homing and interlock, and an analog joystick for manual jog. Open-loop, step-counted, sufficient because the load is known and the screw is self-locking.

JOYSTICKANALOG · MANUAL JOGLIMIT SW ×2HOMING · INTERLOCKARDUINOC++ · OPEN LOOPSTEP COUNTEDSTEPPERDRIVERMICROSTEPMNEMA 1721.5 N·cm REQ
The Arduino, stepper driver and joystick wired together on the bench
THE CONTROL STACK
// ─── TUNABLE PARAMETERS ─────────────────
const float PRESS_DEPTH_MM= 12.4;
const float PRESS_SPEED= 48.0; // mm/s
const float ACCEL= 220.0; // mm/s²
const bool JIGGLE_RETRACT= true;

THIS IS THE REAL FIRMWARE’S SETTINGS BLOCK. A NON-PROGRAMMER TUNES THE MACHINE HERE WITHOUT TOUCHING CONTROL LOGIC · DRAG A SLIDER AND THE MACHINE RETIMES MID-CYCLE.

LIVE · CYCLING AT COMMANDED PARAMETERS

the acceleration-ramp fix

The first firmware commanded the target step rate in one jump. A stepper’s torque collapses if the rotor can’t follow the field; above ~50 mm/s the motor stalled and silently lost position, the failure mode open-loop control cannot tolerate. The fix is a trapezoidal velocity profile: ramp up, cruise, ramp down.

FIXED-RATE vs ACCEL RAMP · COMMANDED 60 mm/s
mm/stime6050STALL LIMIT · NO RAMPFIXED RATE → STALL, STEPS LOSTACCEL RAMP → CLEARS 60 mm/s

powder sifting & containment · electronics enclosure

Sifting and containment. A sealed enclosure with a hinge and latch for washdown access, and a fixed brush that levels the powder bed at plate height, geometry doing the job instead of an extra actuator.

Electronics enclosure. No vents, deliberately: the driver runs below its thermal limit, so venting would only admit powder and moisture. The revisions below are the cutout geometry converging on the final component layout.

The sealed powder sifting enclosure showing its hinge and latch
SIFTER · SEALED, HINGED, LATCHED
The final electronics enclosure with the joystick installed
ENCLOSURE · AS INSTALLED

engineering judgment

DECISION LOG · INSTINCT → ANALYSIS → CALL

  1. THE INSTINCT
    friction, add a coating to the plate.
    THE ANALYSIS
    the product released cleanly on approach and stuck only on retraction. that's not friction, it's suction. a flat plate lifting off a soft surface pulls a vacuum, and a coating does nothing about a pressure differential. a fundamentally different problem than the one the symptom suggested.
    THE CALL
    vacuum release plus a programmed jiggle-retract (±0.4 mm, 3 cycles), not surface treatment.
  2. THE INSTINCT
    the bearing is wrong, redesign it.
    THE ANALYSIS
    the binding appeared while testing on a single guide rod. one support point cannot react a moment, by definition, any off-center load must tilt it. the four-rod production geometry resists tilt through wide spacing, the way a table resists tipping.
    THE CALL
    keep the bearing. the test setup was the artifact, not the part.
  3. THE INSTINCT
    the board is fried, tear the circuit down.
    THE ANALYSIS
    logic rails were reading 3× the supply voltage, which no failure mode of the board could produce. the instrument was the suspect: the multimeter was failing. isolating the instrument before trusting it saved a teardown of a working circuit. separately: caught a 12 V supply outputting 4× rated voltage before it reached the electronics.
    THE CALL
    verify the measurement chain before believing the measurement.
  4. THE INSTINCT
    more force is safer, spec a bigger motor, add force feedback.
    THE ANALYSIS
    the plate's own weight supplies most of the press force. the motor's job is controlled positioning, not brute force. required torque came to 21.5 N·cm against 40–60 available from a NEMA 17, which is why open-loop stepper control with a fixed depth target is sufficient and force feedback isn't needed.
    THE CALL
    NEMA 17, open loop, fixed depth. sized, not over-specified.
  5. THE INSTINCT
    the plate binds on the guide rods, lubricate them.
    THE ANALYSIS
    food-safe lubricants exist, but grease plus airborne starch makes clumps, and the design premise of the entire motion system is that it runs dry. a fix that violates the premise is not a fix, it is a maintenance schedule. the real cause was geometry: off-center load tilting the bearings on the rods.
    THE CALL
    no lubricant. re-mounted the manual press's old wheel guides mid-frame to react the moment before it reaches the bearings. the plate glides, dry.
  6. THE INSTINCT
    the motor can't lift the plate at speed, buy the strongest NEMA 17 made.
    THE ANALYSIS
    the stall appeared only at speed and got worse as the driver warmed up. that is a thermal signature, not a torque ceiling: the old driver was folding back current as it heated. the torque budget said the motor was sufficient, and the budget was right.
    THE CALL
    same motor, bigger driver (TB6600) and a 24 V supply. full speed, no stall, zero dollars spent on motors.
  7. THE INSTINCT
    swap the actuator for a cable-and-pulley lift, much cheaper.
    THE ANALYSIS
    checked with the production team first and learned force is applied after the plate is fully lowered, and free-dropping the plate produces a defective result. the shortcut would have failed in production.
    THE CALL
    kept the actuator. asking first turned a wasted build into a half-hour conversation.
“asking first turned a wasted build into a half-hour conversation.”

two weeks in july

everything above is the design. this is the build, straight from the work log: the two weeks where the machine fought back, and then gave in.

JUL 16 · THE DIAGNOSIS

the plate binds on its guide rods. the culprit is geometry, not parts: any off-center load puts a moment on the plate, the moment tilts the bearings on the rods, and a tilted bearing is a brake. the plate has to stay level and the rods perpendicular, at all times, or nothing else matters.

JUL 20 · BRUTE FORCE

found two steel support bars, drilled them, then discovered they were never tapped. hand-tapped every hole. hours of slow, careful threading. bolted the bars on, ran the plate. still stuck.

JUL 23 · THE LOW POINT

the bushings i ordered to add surface area on the rods arrived, went on, and made it worse: extra friction, no extra stability. i was very close to giving up on the whole approach. the tempting shortcut was food-safe lubricant, and i refused it: grease plus airborne starch makes clumps, and the entire premise of this machine is that it runs dry.

JUL 24 · GLIDES LIKE BUTTER

the fix was not a new part. the old wheel guides from the manual press, re-mounted mid-frame on both sides, catch the moment before it ever reaches the bearings. ten hours at the bench: wheel guides on, big motor and screw in, nut mounts seated, limit switches wired. one problem left, the plate only rises at a crawl.

JUL 25 · IT WAS NEVER THE MOTOR

the stall showed up at speed and got worse as the driver warmed. that is a thermal signature, not a torque ceiling: the old driver was folding back current as it heated. a TB6600 driver and a 24 V supply from the university workshop, firmware re-tuned to match, and the plate comes up fast without a single stall. bellows on, full cycle test. it works, very well.

JUL 26 · THE MANUAL

a machine is not finished when it moves. it is finished when someone who did not build it can run it. wrote the operator manual.

JUL 27 · FIRST STARCH

ran the machine on real starch for the first time. better than expected. the one flaw: product clings on retract. tried adding vibration and it made the sticking worse, which confirmed the suction theory, air cannot refill the gap under the plate fast enough. a slow peel at the end of the cycle helps; the tuning continues.

A freshly pressed starch bed, a full grid of crisp cavities, with the press behind it
THE FIRST PRESSED BED · EVERY CAVITY CRISP

JUL 30 · FIRST FEEDBACK

aaron ran it and reported the press does not reach deep enough on some molds. the fix costs two metal rods: raise the starch bed instead of redesigning the press. permanent motor bar in, screw fully sealed inside the bellows.

AUG 03 · SETTLING IN

bed rods drilled and mounted, a bigger electronics box printed and installed on the frame. the machine lives at the shop now. next on the list: the sifter gets its hinge and latch.

An operator loading a mold frame under the press at the shop
IN PRODUCTION HANDS

where it stands

the press is real now. it homes, descends to a commanded depth, holds, retracts, and it has done all of that on actual starch, in the actual shop, with someone other than me at the joystick.

current work is refinement under production conditions: tuning the retract against mold suction with the slow peel, raising the starch bed so every mold pattern reaches full depth, and the sifter’s hinge and latch so the containment story closes.

the remaining modules follow from there.

  1. MODULE 01 · BUILT · RUNS
    motorized press
  2. MODULE 02 · IN PROGRESS
    powder sifting & containment
  3. MODULE 03 · IN PROGRESS
    electronics enclosure
  4. MODULE 04 · SCOPED, NOT BUILT
    remaining downstream modules
The press assembly as it stands today, mid-integration
AS OF TODAY
← BACK TO PROJECTS