Mechanical Design + Embedded Systems + Arduino
A precision machine that cuts wire to length and strips insulation on both ends, fully automated. Designed from scratch in CAD, 3D printed, and programmed on Arduino with NEMA stepper motors, an OLED interface, and rotary encoder control.
01 CAD Design
Every part was designed in CAD and 3D printed. The mechanism uses a linear motion system driven by NEMA stepper motors for blade actuation, and a separate extruder stepper to feed wire through the cutting head. Red parts are structural, blue parts are mounting brackets, and black is the electronics enclosure.
02 Cutting Cycle
Set wire length, stripping lengths for both ends, stripping depth, and quantity on the OLED screen using the rotary encoder.
The blade stepper drives down to sever the wire at the starting point, creating a clean edge.
The extruder stepper feeds wire by the first strip length. The blade partially closes to the configured depth, scoring the insulation without cutting the conductor.
Wire advances by the main wire length. The blade strips the second end at the configured depth. Wire advances the final strip length, then a full cut separates the piece.
The cycle repeats for the configured quantity. Each piece comes out cut to length with both ends stripped.
03 The Code
The firmware runs on an Arduino with two NEMA stepper motors: one for the linear motion blade (cutting and stripping) and one for the wire extruder (feeding). A rotary encoder with a push button lets the operator configure all parameters on a 128x64 OLED display: strip length for each end, wire length, stripping depth, and batch quantity.
The cutting cycle is a sequence of moveWire() and moveBlade() calls. A full cut drives the blade down by 17,750 steps. A strip only goes partway, controlled by the depth multiplier. The extruder moves wire by the configured length times a calibration constant (408 steps per unit). The whole sequence loops for the batch quantity with configurable delay between pieces.
Calibration mode lets you fine-tune the wire movement multiplier by feeding a known length and adjusting until it matches physically. Two manual buttons allow blade positioning during setup.
void runAutoCuttingStripping() { cut(); delay(DELAY_BETWEEN_CUTS); for (int i = 0; i < comps[QUANTITY].value; i++) { moveWire(comps[STRIP_LEN_1].value); strip(); moveWire(comps[WIRE_LEN].value); strip(); moveWire(comps[STRIP_LEN_2].value); cut(); delay(DELAY_BETWEEN_CUTS); } } void cut() { moveBlade(-CUTTING_STEPS); // 17,750 steps down moveBlade(CUTTING_STEPS); // return to home } void strip() { // partial close: depth * 300 steps moveBlade(-(comps[DEPTH].value * STRIPPING_MULTIPLIER)); moveBlade(comps[DEPTH].value * STRIPPING_MULTIPLIER); } void moveBlade(int steps) { linMotSteppers.step(steps); } void moveWire(int steps) { extruderStepper.step( steps * WIRE_MOVEMENT_MULTI); // 408 steps per unit }
04 Skills