Introduction: DIY Robot Arm 6 Axis (with Stepper Motors)

About: Responsible web development and senior web developer at Titanka! Spa (San Marino - RSM)

After more than a year of studies, prototypes and various failures I managed to build an iron / aluminum robot with 6 degrees of freedom controlled by stepper motors.

The most difficult part was the design because I wanted to achieve 3 fundamental objectives:

  • Low realization cost
  • Easy assembly even with little equipment
  • Good precision when moving

I designed the 3D model with Rhino several times until (in my opinion) a good compromise that meets the 3 requirements.

I'm not an engineer and before this project I didn't have any experience in robotics so a person more experienced than me could find design flaws in what I did but I can still say I'm satisfied with the final result I achieved.


Step 1: CAD Design

Before arriving at the final model I designed at least 8 different prototypes with different transmission systems but none could satisfy the 3 requirements described above.

Putting together the mechanical solutions of all the prototypes made (and also accepting some compromises) the final model came out. I didn't count the hours I spent in front of the CAD but I can assure you that they were really many.

One aspect to keep in mind at the design stage is that even a single gram added to the end of the robot's wrist is multiplied at the expense of the torque resistance of the motors at the base and therefore more weight is added and the more the motors must be calculated for endure the effort.

To "help" the engines to withstand the stress I applied gas pistons of 250N and 150N.

I thought of reducing costs by creating the robot with laser-cut iron plates (C40) and aluminum with thicknesses ranging from 2, 3, 5, 10 mm; laser cutting is much cheaper than 3D metal milling.

After designing each individual component, I made the shapes of the pieces in .dxf and sent them to the cutting center. All the rest of the components were made by myself at the lathe.

Step 2: Preparation and Assembly

Finally it's time to get my hands dirty (that's what I do best) ...

The construction phase has taken away many hours of work for the preparation of the pieces, the manual filing of the holes, the joints, the threads and the turning of the hubs. The fact of having designed every single component in order to be able to work with just a few working tools has led me to not have any big surprises or mechanical problems.

The most important thing is not to hurry to finish things but to be scrupulous and follow every single line of the project, improvising at this stage never leads to good results.

Realizing the bearing seats is extremely important because each joint rests on them and even a small play of a few percent could compromise the success of the project.

I found myself having to redo the pins because with the lathe I had removed about 5 cents smaller than the bearing hole and when I tried to mount it the game was monstrously obvious.

The tools I used to prepare all the pieces are:

  • drill press
  • grinder / dremel
  • grindstone
  • manual file
  • lathe
  • English keys

I understand that not everyone can have a lathe at home and in this case it will be necessary to commission the pieces to a specialized center.

I had designed the pieces to be laser cut with the slightly more abundant joints in order to be able to perfect them by hand because the laser, however precise it may be, generates a conical cut and it is essential to consider it.

Working with the file by hand every joint I made in order to generate a very precise coupling between the parts.

Even the holes in the bearing seats I had made smaller and then reamed them by hand with the dremel and a lot (but really a lot) of patience.

All the threads I made by hand on the drill press because the maximum perpendicularity between the instrument and the piece is obtained. After preparing each piece the long awaited moment of truth has arrived, the assembly of the whole robot. I was surprised to find that each piece fit exactly into the other with the right tolerances.

The robot is now all assembled!

Before doing anything else, I preferred to do some movement tests to make sure that the engines have been properly designed, if I find any problems with the engines, especially their tightening torque, I will be forced to redo a good part of the project.

So after also mounting the 6 engines I took the heavy robot to my attic lab to submit it to the first tests.

Step 3: First Motion Tests

After completing the mechanical part of the robot I quickly assembled the electronics and connected only the cables of the 6 motors.
The test results were very positive, the joints move well and in the pre-established angles, I discovered a couple of easily solved problems.

The first problem concerns joint no. 3 which at maximum extension overloaded the belt too much and sometimes caused loss of steps. The solution to this problem has led me to various arguments that we will see in the next step.

The second problem concerns the joint no. 4, the solution of the belt torsion was not too reliable and generated problems. Meanwhile the iron parts of the robot were starting to make small points of rust so with the opportunity to solve the problems I also took the opportunity to paint it.

Step 4: Painting and Reassembling

I don't particularly like the painting phase but in this case I am obliged to do it because I love it even less.

On the iron I put first a primer that serves as a background for the red fluo paint.

Step 5: Bug Fix N.1

After the test results I had to make some changes to improve the accuracy of the robot.
The first modification concerns the joint # 3 in particular when it was in the most unfavorable condition exerted an excessive traction of the belt and consequently the engine was always under stress. The solution was to help by applying a force contrary to the direction of rotation.

I spent whole nights thinking about what could be the best solution without having to do everything again. Initially I thought of applying a large torsion spring but looking online I didn't find anything satisfying so I opted for a gas piston (as I had already designed for joint # 2), but I still had to decide where to place it because I had no space enough.

Giving up a bit on aesthetics, I decided that the best place to place the piston was on the side.

I made the calculations on the necessary power of the piston considering the point where it had to exert the force and then I ordered on ebay a 150 N piston long 340 mm then I designed the new supports to be able to fix it.

Step 6: Bug Fix N.2

The second change concerns joint no. 4 where initially I had planned the transmission with the twisted belt but I realized that the spaces were reduced and the belt did not work as well as hoped.

I decided to completely redo the entire joint by designing the shoulders so as to receive the motor in a parallel direction with respect to them.
With this new modification now the belt works correctly and it is also easier to tension it because I have designed a key system to easily tension the belt.

Step 7: Electronics

The motor control electronics is the same that is used for a classic 3-axis CNC with the difference that there are 3 more drivers and 3 more motors to manage.
All the axes control logic is calculated by the application, the electronics has the sole task of receiving instructions about how many degrees the motors will have to rotate so that the joint does not reach the desired position.

The parts that make up the electronics are:

  • Arduino Mega
  • n. 6 driver DM542T
  • n. 4 Relè
  • n. 1 24V power supply
  • n. 2 Solenoid valves (for the pneumatic clamp)

On Arduino I loaded the sketch that deals with simultaneously managing the movements of the motors such as acceleration, deceleration, speed, steps and maximum limits and is programmed to receive commands to be executed via serial (USB).

Compared to the professional motion controllers that can cost up to several thousand euros, Arduino in its own small way defends itself too obviously too complex operations it is not able to manage such as for example the multithread useful especially when you have to manage multiple engines simultaneously.

Step 8: Software Considerations

Each robot has its own shape and different angles of movement and the kinematics are different for each of them.
At the moment to run the tests I'm using the software of Chris Annin ( but the math written for his robot doesn't fit perfectly to mine in fact some areas of the work area I can't reach them because the calculations of the corners are not complete.

Annin's software is fine now for experimenting, but I'll have to start thinking about writing my own software that fits 100% with my robot's physics. I've already started doing some tests using Blender and writing the Python part of the motion controller and it seems like a good solution, there are some aspects to develop but this combo (Blender + Ptyhon) is very easy to implement, especially it's easy to plan and simulate movements without having the robot in front of you.

Step 9: Pneumatic Clamp

To be able to take objects to the robot I have equipped it with a pneumatic clamp.

Personally I do not like pliers with servos, they do not give me much confidence on the seal so I thought that a pneumatic pincer specifically adjusting the pressure could satisfy all needs.

With square aluminum profiles I modified the clamp to take both small objects and large objects.

Later, when I find time, I will gather all the information about the project so I can download it.

I hope you enjoyed this instructable.

Robotics Contest

Participated in the
Robotics Contest