Robot Arm
Arm Assembly + Showcase page
This page features the physical assembly of the arm, as well as the wiring and organizational steps taken throughout the project.
The 3d model of the robot arm:
And the model of the future arm (if I have time before the end of Fab)
And a video showing current progress:
Mechanical assembly
Shoulder and elbow gearboxes
The shoulder (NEMA 23) and elbow (NEMA 17) motors use the same general steps: mate the gearbox to the motor, tighten the collar, then install the hole covers.
Lay out the kit parts—motor cables, closed-loop driver, and serial debug cable as needed.
NEMA 23 closed-loop motor, driver, and related parts on the table.
Pick up the shoulder gearbox and offer it to the motor shaft (loosen the collar first so the shaft slides in).
Shoulder gearbox aligned with the motor before bolting.
Fasten the gearbox to the motor with four M5×12 screws.
Tightening the gearbox mounting bolts.
Tighten the collar with a 2.5 mm Allen key, both sides.
Collar fully tightened on the gearbox.
Press the supplied tabs into the collar access holes.
Hole cover tabs in place on the gearbox.
Collar holes covered.
Repeat the same idea for the elbow NEMA 17 and its gearbox, using the kit’s M3 fasteners.
Elbow-side gearbox before mating to the smaller motor.
Gearbox screwed to the NEMA 17 on the bench.
Tighten that collar and fit the tabs the same way as on the shoulder.
J0: Base turret, spindle, and shoulder plate
J0 is the rotating turret: printed base, two roller bearing stacks, the aluminum spindle, and the shoulder mounting plate. Heat-set inserts are different on the printed turret shell versus the aluminum spindle: the turret takes 10× M3 inserts, and the spindle takes 14× M5 inserts—8 on the top face and 6 on the bottom.
The bare spindle before inserts:
Aluminum J0 spindle before heat-set inserts.
Install 14× M5 inserts into the spindle: 8 around the top face and 6 on the bottom, matching the hole pattern on each side.
Spindle with 4 of 8 inserts for demonstration purposes (this angle shows one end of the part).
Bearing and insert install
A bearing press is ideal. If you do not have one, a careful press fit with a soft drift or similar works (I used a hammer). Keep M3 work on the turret and M5 work on the spindle so you do not mix insert sizes.
Set the printed ribs aside and work with the main turret shell. Press 10× M3 heat-set inserts into the turret body; the bottom view is the easiest place to confirm you filled every hole.
Turret shell with support ribs set aside on the bench.
Bottom of the turret shell—M3 insert locations for all ten inserts.
The outer races have to be pushed fully into the printed pockets in the turret—each side of the shell has a seat sized to the race OD. Start from the first face you are building from: keep the race square to the bore, support the turret so it does not flex, and press or drive the race straight in until it bottoms evenly all the way around. A bearing press is ideal; otherwise use a socket or tube that only pushes on the outer ring of the race and tap lightly (I used a hammer and drift). Do not hammer the inner ring or a cage, and if the race tilts, pull it back, deburr any flash, and re-seat it—otherwise the stack will feel gritty or bind. You will repeat the same “push the race into the pocket” idea on the other face of the turret after the spindle is in (see the flip step below).
Turret with the first race driven into its pocket; remaining race and rollers still loose.
Lay the roller bearing (needles and cage) into the race you just seated so it sits concentric in the groove.
Roller stack dropped into the seated race in the turret.
Drop in the spindle; the flanged side should end up on the same side of the turret as the top ring of 8× M5 inserts in the spindle.
Spindle dropped into the turret with the flange on the insert side.
Flip the assembly over for the second bearing.
Turret flipped after the first bearing pass.
On this side, push the second outer race into the turret pocket the same way as the first—square, even pressure on the race OD until it is fully seated—then drop in the remaining roller stack so the spindle is captured between the two races.
Second race and rollers in place after flipping the turret over.
Prepare the shoulder plate: four M3 inserts (bearing tension screws) and eight M5 inserts (shoulder motor mount).
Shoulder plate with M3 and M5 insert layout.
The M5 inserts carry the shoulder motor; the M3 inserts are for pulling the turret bearings into alignment.
Bolt the shoulder plate to the turret with four M5×20 screws.
Shoulder plate aligned on the turret before final tightening.
Shoulder plate screwed down to the turret.
Tension the turret bearings through the M3 insert holes with four M3×25 screws.
Bearing tension screws installed at the side of the stack.
Mount the turret to the base
Place the completed turret on the base plate. The base needs M5 inserts for the ribs and for the base motor bracket.
Top of the base plate before the turret is fixed.
Underside or edge detail of the base.
Ten M5 inserts—ribs and motor mount locations.
Base with heat inserts installed.
Set the turret into the circular recess.
Turret seated on the base without screws yet.
Lock it with ten M3×10 screws.
Top view: mounting holes for the turret.
Photo to add
Add a close-up of the turret M3 insert pattern (or base plate M5 pattern) here when you have the shot.
Attach the five support ribs with ten M5×15 screws (five of six rib slots are used; the spare slot is intentional for later).
Detail of base, turret, and rib hardware.
Progress check: partial rib set (three of five printed at the time of the photo).
Wide shot of the base and partial rib install.
Base motor, pulleys, and HTD belt
The base rotation uses a NEMA 23, a 20-tooth motor pulley, a large driven pulley on the spindle, and an HTD 3M belt (447 mm in this build).
Base NEMA 23 motor.
Mount the motor to its bracket with four M5×12 screws and fit the 20T pulley to the shaft (kit Allen key).
Motor on bracket with pulley installed.
Fit the large pulley to the bottom of the spindle with six M5×20 screws. The photo shows a printed stand-in pulley and only two screws for now.
Large driven pulley on the spindle (prototype setup).
Mount the motor bracket to the base with four M5×10 screws.
Motor bracket fixed to the base, assembly upright.
Flip the stack over. Route the HTD 3M-447 belt over the motor pulley and the spindle pulley; it does not need to be tight on the first pass.
Belt looped on both pulleys, slack acceptable at first.
Tension by lifting evenly on the motor and bracket near the mounting plane, then locking the screws while the belt stays taut.
Belt tensioning: motor pulled to take up slack.
That completes the base drivetrain. Next is J1.
J1: Shoulder motor mount and arm link
Start with the vertical fasteners on the J1 motor mount—they need a bit of patience. Keep the mount on the side that has the vertical insert pattern.
Motor mount: vertical fastener side.
Snug those screws, then add the rear hardware.
Mount after the first screw pass.
Drive three M5×20 screws in from the back.
Motor mount secured to the turret.
On the shoulder arm link, install six M5 head inserts for the flange hub and four M3 inserts for the elbow motor.
Shoulder arm—back view with insert prep.
Bolt the aluminum flange hub with six M5×20 screws and press in the 90×70 bearing. The photos use a printed hub stand-in; line up the hub’s set-screw hole with the hole in the arm.
Flange hub and bearing on the shoulder arm (prototype hub).
Offer the arm onto the J1 bearing pocket on the motor mount.
Shoulder arm seated on the motor mount bearing holder.
Mounted overview (still with the PLA hub placeholder).
Installed position of the arm on J1.
Same hub detail for reference:
Flange hub area, final aluminum part will replace the print.
Opposite side of the shoulder bearing mount:
Opposite side of the shoulder and bearing stack.
Electronics: Pico interface PCB
To tidy routing between the stepper drivers and the Raspberry Pi Pico 2 W, I laid out a small interface board. Each driver gets three landing pads—STEP, DIR, and ENABLE for a possible software e-stop. Three 2-pin headers pair limit switches to GPIO and GND. I also added 1×4 and 1×6 2.54 mm headers for extras (driver ALARM, future wrist limit, and other GPIO).
In KiCad, signal pads use the 3 mm mechanical solder-pad footprint; headers use standard 2.54 mm footprints. The large pads are easier to land stranded wire from the drivers than single header pins. Copper geometry is 0.5 mm on the pad nets and 0.25 mm on the header signals, with a flooded GND pour tying driver returns to logic ground.
Schematic of the interface PCB.
Board layout with pours and traces.
Design Rules Check before fab:
DRC results—no unresolved errors before export.
From KiCad I exported Gerbers and drill files, then moved to the Carvera workstation and built toolpaths from saved profiles.
Carvera CAM profiles for the board.
Four operations: a long isolation/engraving pass for traces and pad outlines, two drill cycles (headers vs wire pads), and an outer contour to release the board from stock. The pad drills ended up too small for the wire gauge I wanted, so I plan to solder those leads on the copper side instead of threading through the holes.
Toolpath preview in the milling software.
The first article looked good after machining.
Photo to add
Drop in a photo of the bare, freshly milled PCB here.
Photo to add
Add an installed shot with driver wires soldered and the board mounted on the arm.














































