5 Axis Robot Arm
My final project is a 5 axis serial manipulator arm. It uses stepper motors with gearboxes and belt reductions for greater torque, and 3d printed links for the majority of the structural components. It is controlled by LinuxCNC running the genserkins module on a Raspberry Pi 4 sending commands via a custom program to a Pico 2W running custom firmware, which then calculates the number of steps needed to reach the commanded position given the steps per rotation. LinuxCNC is an incredibly powerful (and equally frustrating) software, and it enables complete control over the arm: you can synchronize each axis to run complex gcode, trace patterns in the air, and repeat any pattern you command. It was among the hardest parts of this build process, but by far the most rewarding. For the arm, I used the following weeks:
Week 2: CAD week
As most of the project is 3D printed, I made heavy use of CAD. I used Fusion 360 to completely model the entire arm, with interactive joints (including stepper motors, which are obviously not 3d printed). Here is the model of the arm:
Not my Work
I borrowed this guy's motor mount bracket + belt tensioner for the wrist joints, after realizing that my current method for tensioning belts is extremely silly. I did modify it a little, but barely. It helps to tension the belts on joints 3 and 4.
I also downloaded ALL of the stepper motor + gearbox combos from the official Stepperonline website. You can find links to the downloads in the BOM for each respective component. This is a purely cosmetic thing, as it is just so the 3d model of the arm looks more complete.
Week 4: Embedded Programming
For this week, I made use of a Raspberry Pi Pico 2W as the microcontroller, soldered to a PCB breakout board for easier interfacing with the electrical components of the arm.
Week 5: 3D Printing
As a majority of the components of the arm are 3D printed, this week is very important to the final product. I printed each part of the arm individually on my and the lab's Bambu A1s, with 8 wall loops and 25% gyroid infill for all parts above the shoulder arm mount. All parts including and below the shoulder arm mount are 16 wall loops and 100% infill, as they support the weight of the entire arm + payload, and they are not being supported by any motors, so their weight is not important.
Week 6: Electronics Design AND Week 8: Electronics Production
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.
Week 9: Input Devices
To try and better the accuracy (and automaticity) of the arm, I added limit switches into the design. So far, I have two, and I believe that is all I will have/need. The base's switch sits ~90 degrees offset from the joints home position, and the shoulder's switch sits ~90 degrees from home as well.
ADD IMAGES OF WHERE THE SWITCHES SIT
Week 10: Output Devices
This week is another essential week to the integrity of the project: the motors are what creates movement in the arm. I use screw terminal stepper drivers, with the elbow down being from Stepperonline, and the rest being from Amazon. You can refer to my BOM for more info. The drivers pull from my 24v PSU with an E-Stop in between to break the circuit. While it is an immature location for an estop (it should be tied to the enable pins), I chose this location to be able to completely shutoff power in case of emergency (electrical shocks, fire). The drivers take step/dir in from the Pico 2W and fire the corresponding coils. For more precise control, I have encoders on the elbow and shoulder (the motor drivers handle position feedback) and use 1600 steps per rotation for each joint.
Week 11: Networking and Communication
For communication between the Pico 2W and LinuxCNC on the RPI4, I had the use claude to create a custom serial protocol, which includes joint angles and E-Stop/Machine Power status. You can find the repo (on my personal github) here.
Week 14: Interface Programming
To actually visualize the robot arm's movement, I used claude to generate a vismach python script, initialized automatically by LinuxCNC. It takes ASCII stls, repositions them given different translation functions, and finally links their rotation origins to the actual arm's joint position. You can find the vismach file on my repo here
Week 15: System Integration
On this page, I document how each individual part (the drivers, arm, and computer) connects to each other to form the complete system.
The Robot Arm
I am not quite sure why I decided to pursue this project. There is really no need, and I am not really solving any existing problem. I guess I just thought it was cool. It is a serial 5 axis robotic manipulator, inspired by Annin Robotic's AR4. Here is the BOM for the robot arm. To get a better look, the link is here
Project Timeline
A Gantt chart is a horizontal bar chart that maps the tasks of a project against a timeline, showing when each task starts, how long it lasts, and how it overlaps with the others. Its purpose here is to lay out the full path from mid-March through the June 10 presentation so I can see at a glance which phases are done, which are in progress, and how the remaining documentation and deliverables stack against the deadline.
gantt
title Robot Arm Final Project — Path to June 10 Presentation
dateFormat YYYY-MM-DD
axisFormat %b %d
section CAD & Design
Finalize Fusion 360 model :done, cad1, 2026-03-16, 14d
Design revisions / part remakes :done, cad2, 2026-03-30, 35d
section 3D Printing
Base & turret parts :done, p1, 2026-03-16, 10d
Shoulder parts :done, p2, 2026-03-23, 10d
Elbow parts :done, p3, 2026-04-06, 10d
Wrist parts :done, p4, 2026-04-20, 10d
Reprints / iterations :done, p5, 2026-04-20, 21d
section Mechanical Assembly
Base turret + tapered bearings :done, m1, 2026-03-23, 7d
Shoulder joint + gearbox :done, m2, 2026-04-01, 10d
Elbow joint + bearings :done, m3, 2026-04-13, 7d
Wrist joints :done, m4, 2026-04-27, 7d
section Electronics
PCB schematic + layout (KiCad) :done, e1, 2026-04-06, 5d
PCB milling on Carvera :done, e2, 2026-04-13, 3d
Wiring drivers + PSU + E-stop :done, e3, 2026-04-20, 7d
Limit switch install :done, e4, 2026-04-27, 4d
section Firmware & Software
Pico 2W firmware (step/dir) :done, s1, 2026-04-20, 10d
LinuxCNC + genserkins setup :done, s2, 2026-04-27, 14d
Serial protocol (Pico ↔ RPi) :done, s3, 2026-05-04, 7d
Vismach visualization script :done, s4, 2026-05-11, 7d
section Integration & Tuning
System integration :done, i1, 2026-05-11, 10d
Motion tuning + repeatability :active, i2, 2026-05-18, 12d
Payload & gcode testing :i3, 2026-05-28, 7d
section Documentation
Process section (photos) :active, d3, 2026-05-25, 6d
Evaluation / results writeup :d4, 2026-05-30, 4d
Fix placeholders, typos, links :d5, 2026-05-26, 4d
Hero photos of finished arm :d6, 2026-06-02, 2d
section Final Deliverables
1-minute presentation video :d7, 2026-06-04, 3d
1920x1080 slide PNG :d8, 2026-06-06, 1d
Final review pass :d9, 2026-06-08, 2d
Presentation :milestone, m, 2026-06-10, 0d
Licensing
This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License. You are free to share, remix, and alter this project for any non-profit or educational purpose as long as you provide proper attribution. For any commercial use or intent to sell this work, you must obtain explicit written permission from the creator.
The Problems
What does it do?
It is a 5 axis robot arm with around a 500g payload (although I am working to increase that). You can upload gcode via linuxcnc and have it run different patterns.
Who's done what beforehand?
The only project I could find that was close to mine was this machine week project. I would like to add, however, that they used an existing design, while mine I created from the ground up (in the humblest way possible). I also found this, but it was unfortunately what I was trying to avoid: he used servos.
What did you design?
I designed the entire assembly in fusion, save for the drivers. That was one of my regrets, that I didnt create a custom stepper board and instead simply bought them. I also created the simple interface PCB.
What sources did you use?
I used claude code a significant amount for the software side. I also took a lot of inspiration from the AR4 robot arm project.
What materials and components were used?
The structure was mostly PLA printed on my lab's Bambu A1s. I used belts for power transmission, a significant number of heat inserts, M5 screws to hold everything together, wire + heatshrink for signals, gearboxes, steppers, stepper drivers. For the base, I used a chunk of wood that has been sitting outside for most of my childhood, and a 24v power supply.
Where did they come from?
All of the CNC-related things (drivers, steppers, PSU) came from Stepperonline, and all the other miscellaneous things came from Amazon. I was able to find small things like heat inserts from the lab.
How much did they cost?
The project was roughly $400 in total. I see this as a win, as other projects of similar scale and capability cost ~$2000>.
What parts and systems were made?
I made the mechanical systems, the driver housing, and the interface PCB.
What processes were used?
3D printing: For almost all of the physical parts of the project Milling: for the PCB.
What questions were answered?
What worked? What didn't?
How was it evaluated?
Can it produce smooth motion from point to point utilizing each joint indepedently? Can it move from point to point with high repeatability?
What are the implications?
Multi-Axis manipulators can be DIYed at home, to obviously amatuer levels of success.
The Process
Firstly, I started out with the 3d modeling. I really just dove into this without any real sense of direction or what the final product should look like (or even how it would work) but I managed to figure it out as I went. The modeling process took me roughly 20 hours total, as a conservative estimate, so I will not be discussing that in depth. If you are reading this, I am assuming you know how to extrude a sketch. Here is a sped-up video of the timeline, from start to finish, of the arm in Fusion:
Then, I had to assemble it. I used M5 screws with heat inserts for all of the places where parts connect. For the base joint, I used tapered roller bearings, an extremely overkill but equally effective option. I also used a tapered roller bearing/thrust roller bearing combo for the elbow, which produced smooth motion. For the shoulder, I used large 90x70mm bearings and a metal flange hub to connect the motor to the link. The wrist joints both use 45x32mm bearings, which I had laying around from the cycloidal drive project.




