5 Dof Wearable Robotic Arm
$${\color{white}06/15/2025 \space project \space statement \space and \space planning}$$
I have an idea!
Problem statement: Two arms can get everything done. But a third one can be nifty, huh? Even if itās for simple applications, it can still be vastly useful. What if youāre holding everything in your two arms, and you need to open a door? What if you are typing and want to get a glass of water to your lips without breaking momentum? What if, possibly, you are performing a surgery and need some assistance? What if youāre doing some sort of combat sport, and want to get a bit creative? What if you just wanna show off at parties?
Objectives: wearable Robotic arm that follows the following specifications:
5 degrees of freedom: wrist, elbow, shoulder roll, shoulder pitch, gripper.
Graphical User interface that controls arm movements.
minimum payload 100-300 g
Angular accuracy: +/- 2-3 degrees with high-resolution servos or steppers+encoders
Position repeatability: 1-2 mm at full reach. Depends on backlash and compliance
Backlash: <0.5mm. Use zero backlash gearboxes or direct drive.
Delay must be <=500 ms from user input to motor response.
Should stay relatively still when āattachedā to the userās back
Should have a safety mechanism so the user doesnāt get shocked by the 24v battery
I may use the local collegeās lab to get some cheap hardware. I doubt they have the exact parts, but they may potentially have potentiometers, resistors, capacitors, Microcontrollers, etc.
PLANNING:
VNH5019 modules for motor driving have already been designed and are available for $15-20 a pop. You see, weāre kinda budget-tight, so weāre going to design a PCB with 4 of the bare VNH5019A-E ICsā$5 eachā to attach to our Maxon EC-i 40 + GP 10 A gearbox. Also note that the VNH5019 only drives brushed motors.
$${\color{white}5/16/2025}$$
Stepper motor possibility (but a few hours later)
The brushed DC motor mentioned earlier is gonna set us back 120 dollars each. We can use a NEMA 23 stepper motor with a large gearbox ratio for the desired torque output instead. Currently thinking 20:1, but Iāll have to see a more experienced engineer later to see if that is possible. Because stepper motors kinda canāt be run using the VNH5019, weāll instead look into the possibilities of the TMC2226 motor driver.
Update: Weāre going with the NEMA 23 stepper motor with TMC 2226 motor driver
Possibilities of using in revision: 1. harmonic/planatery reducer for motors to extract highest torque instead 2. Using encoders (AS5600, AS5048A) instead of potentiometer for position feedback. Can be a bit more expensive, and weāll have to learn some things.
$${\color{white}6/18/2025}$$
Break: Heart project
All that planning for the Robotic arm project is stressing me out. So weāre gonna take a break and make a PCB with LED lights in the shape of a heart, lighting up in sequence. This is the schematics I made.
Utilizes 2 ICās: 555 timer to send clock signals in astable mode, and DC4017 to āchaseā LEDs in a sequence. Powered by 3 coin batteries, of course.
Iāll either add this to the robotic arm, or give it as a trinket to my friend. They gave me a heart keychain a few months ago. Regardless, Iāll make the PCB layout for this in my next break.
I can also possibly modify the design to make it act as an error tester later on the road.
1 hour
$${\color{white}6/22/2026}$$
Weāre on vacation, so progress is slow. A wrist-mounted control panel for the arm would be cool as hell, no? Weāll probably have to take on even more disciplines though⦠Like Embedded UI, power management, and probably ergonomics. Bluetooth for communication, maybe a charge controller for safety, a TFT LCD for affordability and durability, and a MCU for the spi communication; Perhaps an ESP 32 would suit the application. Iāll add this as an idea for next iterations of the arm.
The design for the PCB with the TMC2226-SA motor driver has been commenced, and will probably finish by the end of the day. Moving on next, weāll figure out the programming and software, and where we can get the mechanical design for the arm. Weāll also tinker around with ROS2, and use Gazebo for simulation (letās also copy paste the URDF files for the actual arm). My old computer has Ubuntu installed, so letās do that.
We can potentially use the 24V battery volt source to power the Nano by using a LM2596 voltage regulator.
Todayās progress (Elbow joint driver and MCU):
3 hours
$${\color{white}7/1/2025}$$
Just came back after climbing Mount HuangShan, it was peak (ahahaha).
Anyways, gonna crank out the basic PID code for the arduino nano and for driving the NEMA 17. Honestly, I am quite inexperienced on implementing PID, even though I know alot about the theory.
I work in bursts anyways, so hopefully I can get most of it done today. Todayās code:
3.5 hours
$${\color{white}7/2/2025}$$
Further project planning + parts selecting
Ok, so, weāre gonna keep the pcb Designs, but there will no longer be any centralized PCB (like as if itās a critical hit area in a video game). Essentially, the drivers will be placed right next to the motors in the form of small PCBās, with terminals connecting from the base, which houses the MCU, voltage regulator, and whatnot. Wait, so the 24v power supply to the motors will have a long wire too? I wonder if thatāll introduce even more problems.
To offset this, weāll make the power supply slightly larger than 24V to compensate for the higher resistance (26v, 28v). Weāll also add a bulk cap (100-470 uF) decoupling capacitor as well as a ceramic cap (0.1-1uF). right next to Vin of Drivers, as well as ferret beads on the power supply line right before the driver. This is a pretty crude, unelegant method but itāll probably be enough.
Main reason weāre still using our own design for the motor drivers is because theyāre lowk expensive ($30+) and too big to fit in the joints.
Final decision:
Main PCB will sit at base of robotic arm, containing the STM32 Bluepill (STM32F103C8Tx); 2 motor drivers for shoulder yaw and shoulder pitch; and a voltage regulator connected to 24v power source. Elbow joint will have their own motor driver for the TMC2209 NEMA 17
Tmc 2209-LA info: Footprints and symbol Datasheet Finally decided on the specific models: Nema 17 Nema23 (There are links to these in the original doc)
Reminder, Driver compatibility is about matching current, voltage, and inductance to the driverās chopping frequency and thermal rating!
Thus, the TCM2226-SA will be used to drive the NEMA 17, while the dual TCM2209-LA will be used to drive the NEMA 23.
Today's schematic progress (so far):
Iteration for Mark II: Just watched ēØęåās video on his dummy robotic arm, and felt kinda envious when compared to my own design. Thus, I have a wishlist for Mark II in case I build a second robotic arm: CAN bus Per-joint MCUs Force sensors (Encoders instead of potentiometers) Sleeker driver IC layouts Smarter GUI Power optimization AI vision (optional) glove to control robotic arm movement
For now, we just need to worry about making A robotic arm.
Taking notes on TMC2209 driver features:
Stealthchop: Silent operation, good for lower velocities
Significantly improved microstepping with low-cost motors - Motor runs smooth and quiet - Absolutely no standby noise - Reduced mechanical resonance yields improved torque
Spreadcycle: Good for higher velocities.
After a few hours, I have finished the schematic FULLY, and have reviewed it to have no errors (so far, I will review it once more when I prepare for PCB layout). Here is the full schematic:
I should probably add redundancies for overheating, since running all these on the same PCB will fry it easily. But I feel like moving on to software for now, so thatāll have to wait until I prepare for the PCB layout.
Btw ignore PB5. I've already removed that label; it's just a small error.
8 hours total
$${\color{white}7/6/2025}$$
Ok, platformIO is acting up. Not only did I lose the Main.cpp file for the main PCB board, but I literally canāt find the folder itself. The folder is also nowhere to be seen on the project tab of VScode.
So, weāre gonna ditch platformIO for STM32CubeIDE.
Hip hip hooray! We get to rewrite the ENTIRE code for the main PCB, but this time in HAL =D! I canāt WAIT to basically learn a whole different language =DDDDDDDD.
Just played around with STM32cubeIDE for a while, and learned from guides/documentations on youtube. Philās Lab my GOAT fr
Ran into some problems with the clock configurations, seems like the APB1 peripheral clock frequency is too low.
After some tweaking and painfully reading the STM32F1 reference manual, this minor speedbump has been remedied.
Pins are configured, and so are the clocks. Now all we have to do is figure out how to set the STM32 up to receive serial from the Mac, what to do with certain info, and create the GUI. Finally, weāll create the 3D physical model and weāll be done.
3 hours
Note: Kinda been dodging a core problem right now, but we gotta confront the fact that carrying around a 24v battery can kinda cause some lowkey agonizing pain if something goes wrong. So we'll have to overload on safety mechanisms when we get to mechanical design. We'll also have to make additions on our PCB to further prevent overheating
$${\color{white}7/17/2025}$$
Just came back from camp, back to the grind. This also means weāll have to ramp up productivity. A review of the arm: Shoulder 1. will have 3 D.O.F. 2. 2 NEMA motors will be driven by main PCB, 3. 3rd one will be driven by Arduino Nano interfaced via I2C STM32F1 will be master MCU. We have 48 MHz of processing power and we will use the full 48 MHz of it! 4.Power source: 24 volts, will be placed in a heavily insulated box to prevent shocks Elbow: A singular Arduino nano and TMC driver for Nema 17. Further iterations might utilize belts to lower torque on elbow Wrist: Simple MG90 servo. Just use PWM vro GUI: will be built in tkinter. Interfaces with the Uart serial to STM32. Alright, today weāll get serial done, and begin on the mechanical design.
This means we'll gonna have to LEARN UART programming, including HAL and serial parsing. Here's the code so far:
5 Hours
$${\color{white}7/23/2025-7/25/2025}$$
I have chipped down the DRC more and more on clearance violations, and have connected the pins together finally. We have decided to use GND and power planes for noise and emi reduction, though it will be a bit more expensive.
We have also finally added PCBway constraints into the settings. Thus, weāll have to switch from 0402 components to larger ones, because lowk theyāre unable to tolerate the close proximity of the components.
We WILL add heat pours in the futureāafter finishing the DRC.
I have also met with a longtime friend, a Umich alumni in robotics about this design. he says itās good so far, so thatās something to think about =].
12 hours
May seem like a long time, but trust me, I havenāt done something this complex before so I MUST make sure everything runs as good as possible.
$${\color{white}7/26/2025}$$
Yayyyy, mechanical design! Woohoo, Yippee.
Constraints:
0.5-1 meters
2 kg payload minimum.
Fully covering circuitry
Openable via screws to access circuitry and wires
Separate compartment for wires and circuitry
Hexagonal comb design. Will have one side honeycomb, the other three sides will be solid
25:1 gearboxes, compromise for torque and speed
7075 or 6061 aluminum for linkages. More Carbon fiber towards end of arm. Steel for joints and base.
Planetary gearboxes for zero backlash if we can afford it (probably not for the first design. May be employed for future iterations )
Modular end factor for different attachable functions. Module will have plugs that attach to end factor to communicate to a microcontroller on what to do. Will also have latches to maintain connection.
Alright, let's get started.
The specs are as follows: shoulder (base) will have 3 degrees of freedom to mimic actual human arm. Will contain the main PCB, alongside slave MCU PCB to drive the additional motor. The motors will all be NEMA 23s.
The elbow joint will be 1 D.O.F. and uses arduino nano + TMC2226SA for the Nema 17. Will also interface with main PCB. Only comment lightly on the fact that we're using I2C protocol for the ~.33m distance between the main mcu and slave mcu.
The wrist will use SG90S microservo. Optional, actually.
Link length from** shoulder joints to elbow joint will be .33 m. From elbow to wrist is .46 m.**
All 3 shoulder motors will be placed closely together at the base to reduce torque
Joints decisions:
Shoulders:
Options:
Welded Pivot Bracket joint.
Pros:
extremely strong and rigid,
zero backlash.
Cons:
Permanent. Make a mistake? Womp womp, you canāt fix it. You also canāt take them out, so theyāre not modular
You kinda need to know how to weld, and get welding equipment (DEALBREAKER)
Bolt on bracket system (WEāRE USING THIS ONE)
Pros:
Still pretty strong
Bolted, not welded (NOT DEALBREAKER)
Looks pretty clean
Elbow:
Clevis + Pin Joint.
Pro:
Can be laser cutted
Pretty compact
Strong enough
VEX robotics people use it
Con:
Need retainer clips or shoulder bolts
Needs TIGHT tolerances
Letās not talk about end effector for now.
Of course, weāll also need:
Bearings
10 mm bore, 26mm OD Flanged bearing
Shaft link hub / coupler
Shaft collar
Mounting brackets or housing to hold bearings in place and constrain all movements except rotation
One side must hold rigidity, (bearing pocket or press-fit)
Spacer(s) and Shoulder Bolt / Axle Bolt
Prevents axial shrifting, keeps rotations smooth
Space prevents the bearing from rubbing against joint arm or frame. Shoulder bolt has a section that fits bearing ID perfectly.
Weāll mount the Nema 17 at elbow. But if we NEED to optimize torque, then we can just place them at the back with a belt loop.
rectangular holes are probably for ventilation and weight \; weāll employ that.
1 Hour
7/27/2025
Mechanical design marathon.
Aluminum 6061 is very expensive, datasheet . So hereās the plan:
At the base, weāll use some sort of steel alloy. Cheaper, but 3 times the density
Aluminum 5052 could be a substitute.
I feel the plan right now is model a rough diagram of the arm on paper, create a multidimensional function of stress, strain, load, and torque in terms of density of the material selected, and the width/girth of the arm. THEN we'll choose the components based on our application.
Alright, weāve finished the analysis of the arm at itās worst scenario: Perfectly horizontal.
30 minutes
Not gonna do other angles, because weāve already accounted for worst case scenario. Also, itās probably not likely that itāll just collapse on itself if i raise it perfectly vertical even if the axial stress is at its strongest.
Time for parts selection!
Code for calculations:
import math
==== Inputs ==== Geometry (in meters) L1 = 0.33 # Length of Link 1
L2 = 0.46 # Length of Link 2
w = 0.1 # Width of rectangular cross-section
h = 0.1 # Height (thickness) of rectangular cross-section
Material (Aluminum 6061-T6) E = 68.9e9 # Modulus of Elasticity (Pa)
sigma_y = 276e6 # Yield Strength (Pa)
tau_y = 207e6 # Shear Strength (Pa)
fatigue_strength = 96.5e6 # Fatigue Strength (Pa)
Density = 2700 #kg/m3
Masses (kg) m1 = L1 * Density * w * h # Mass of Link 1
m2 = L2 * Density * w * h # Mass of Link 2
payload = 4200 # force from punch or weight (Newtons)
Angle of payload force relative to the link axis (in degrees) theta_deg = 0
theta = math.radians(theta_deg)
Safety Factor FoS = 1.5
Gravity g = 9.81 # m/s2
==== Derived geometric properties ==== A = w * h # Cross-sectional area
I = (w * h**3) / 12 # Second moment of area
c = h / 2 # Distance from neutral axis
==== Forces ==== P_parallel = payload * math.cos(theta) # Axial component
P_perp = payload * math.sin(theta) # Transverse (bending) component
==== Torques ==== tauelbow = m2 * g * (L2 / 2) + Pperp * L2
taushoulder = (m1 * g * (L1 / 2) +m2 * g * (L1 + L2 / 2) +Pperp * (L1 + L2))
==== Stresses ==== sigmaaxial = Pparallel / A
sigmabending = ((Pperp * (L1 + L2) + (m1 * g * L1/2) + (m2g(L1 + L2/2))) * c) / I
sigmatotal = sigmaaxial + sigma_bending
AFoS = 276e6 / sigma_total
==== Strain ==== strain = sigma_total / E
==== Deflection ==== Tip deflection of link 2 under end load only delta = (P_perp * L2**3) / (3 * E * I)
==== Checks ====
print(=== ROBOTIC ARM STRESS REPORT ===
)
print(fAxial Stress: {sigma_axial/1e6:.2f} MPa
)
print(fBending Stress: {sigma_bending/1e6:.2f} MPa
)
print(fTotal Stress: {sigma_total/1e6:.2f} MPa
)
print(fStrain: {strain:.5e}
)
print(fDeflection (L2): {delta*1000:.2f} mm
)
print(fElbow Torque: {tau_elbow:.2f} Nm
)
print(fShoulder Torque: {tau_shoulder:.2f} Nm
)
print(ffactor of safety: {AFoS}
)
print(\n=== SAFETY CHECK ===
)
print(fYield Limit ({sigma_y/FoS/1e6:.2f} MPa) : {'Yessir!' if sigma_total < sigma_y / FoS else 'No =['}
)
print(fFatigue Limit ({fatigue_strength/FoS/1e6:.2f} MPa): {'Yessir!' if sigma_total < fatigue_strength / FoS else 'No =['}
)
print(fDeflection Check (< {L2/250:.2e} m): {'Yessir!' if delta < L2/250 else 'No =['}
)
Weāll play around with the variables until we find something desirable.
*15 minutes*
Ok so, it turns out that if we were to go with a 0.1 m x 0.1 m approximate cross sectional area of the arm using aluminum 6061, weāll need 28 Nm of torque⦠Nema 17 can only produce 0.14-0.75 nm max. Weāll have to redo the PCB to change the Nema 17 to a Nema 23. On top of that, aluminum 6061 is frick-ton expensive even if hollow(~$200 for one link), so weāll have to find other materials and compromise.
Material alternatives:
370 MPa yield
248.2 MPa yield
Material selection later. Letās just design the arm now.
Weāll begin with the joint, constraint definitions:
1. Houses Nema 23 motor
Houses the gearbox along the Nema 23 motor
Rotate well
Holes for wires to connect with motor
There will be 2 type of joints; the shoulder joint, and elbow joint.
Thatās basically it honestly
We originally considered HTD5 timing pulleys, but thatās too mechanically advanced for me. So weāre going to use NEMA23 **worm gearbox (50:1)** as simple add ons to the motor. Cheaper than planetory, and we donāt need industrial level precision so we may get away with $150 total.
Just learned the method is called a *Euler angle joint** chain mimicking the glenohumeral (shoulder) joint
The first base will be larger than the second base to compensate for having to carry extra weight. We might have to āoverengineer: the coupling between the bases to prevent backlash and slippage. Of course the final rotational joint will just be bolt on bracket.
inexpensive planetory gearboxes
7/29/2025
(TORQUE POTENTIALLY TOO LOW)
Ugh, it seems weāll have to go searching for gearboxes again.
Weāll use Aliexpress if we need to.
Weāll add bearings to this sliding point later to both reduce stress on the main motor and to reduce friction. Oh, and the lid for this part will be honeycomb pattern for aesthetics and saving on material.
Iām back with the design, and I just realized.
LOOK AT THE SIZE OF THAT THING HOLY C- BANANA FOR SCALE BY THE WAY.
Realistically, we have 2 options:
Redesign the shoulder from scratch
Severely cut down on the container size for each motors.
If we go with number 2, which is the most alluring option by far, we might just have the motors exposed. Cuts back on cost and torque too, I guess.
Main issue comes from the motor + gearbox, which is 0.15 m by itself. Holy-
Direct motor mount, weāll be using this
Alright, much more manageable now. (Banana for scale)
5 hours
7/29/2025
Continued with the mechanical design. We had to dig through various sources to get semi fluent. In short, weāve decided to use bracket mounts to hold the motors in place and flanged couplers to get it attached to stuff, ball bearings and honeycomb pattern pending. Of course, there are holes for the I2C wires to go through.
Finally, weāre finished.
Now all we have to do is provide the wiring diagram, and BOM.
This is the wiring for now. Of course, *We will add clips during assembly to hold the wires down. *
**8 hours** (I didnāt know much about mechanical design)
Even if there are many flaws in the design; Ngl, this has been a wild month, and a wild ride. Iāll never forget the 15 hour PCB marathon on the plane. Oh, and I hope my journals entertained somebody.