DIY Robot Arm 6 Axis (with Stepper Motors)

by MircoSlepko in Circuits > Robots

53550 Views, 264 Favorites, 0 Comments

DIY Robot Arm 6 Axis (with Stepper Motors)

DIY Robot manipolarore 6DOF autocostruito (teaser)
MR-6 - Homemade Robot cooperate with K40 laser
form_to.jpg
20190928_100123.jpg
20190927_190644.jpg
20190927_071139.jpg
20190925_183052.jpg
locandina.jpg

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.

Supplies

CAD Design

bg_blog_robot.jpg
part_progetto_robot.png
IMG_20190502_185218.jpg
sezione_J5_J6.jpg
sezione_J4.jpg
sezione_base.jpg
render_albero_j3.jpg
sezione_J2.jpg
IMG_20190502_185407.jpg
IMG_20190502_185242.jpg

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.

Preparation and Assembly

IMG_20190504_163141.jpg
IMG_20190511_115318.jpg
IMG_20190721_102446.jpg
IMG_20190505_082457.jpg
IMG_20190728_100558.jpg
IMG_20190728_100444.jpg
IMG_20190714_101313.jpg
IMG_20190714_100052.jpg
IMG_20190713_092248.jpg
IMG_20190707_084545.jpg
IMG_20190706_115004.jpg
IMG_20190706_113710.jpg
IMG_20190407_120707.jpg
IMG_20190609_112244.jpg
IMG_20190526_122123.jpg
IMG_20190526_120621.jpg
IMG_20190519_092404.jpg
IMG_20190519_080532.jpg
IMG_20190512_104251.jpg
IMG_20190511_080912.jpg
IMG_20190505_082506.jpg

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.

First Motion Tests

MR-6 Robot Arm
Test di ripetibilità con comparatore centesimale
DIY Robot - test di ripetibilità su Y (2°)
20191005_105654.jpg

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.

Painting and Reassembling

20190925_085858.jpg
20190907_182955.jpg
20190907_182929.jpg
20190924_182355.jpg
20190923_202642.jpg
20190907_182934.jpg
20190909_183150.jpg
20190914_102301.jpg
20190914_093809.jpg
20190914_092104.jpg
20190913_180307.jpg
20190911_072134.jpg
20190911_072126.jpg
20190911_071751.jpg
20190910_075422.jpg
20190910_074430.jpg
20190910_072638.jpg
20190910_072525.jpg
20190910_065829.jpg
20190909_204233.jpg

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.

Bug Fix N.1

bugfix1.fw.png
20190921_095939.jpg
20190928_100123.jpg
20190921_092416.jpg

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.

Bug Fix N.2

bugfix2.jpg
20190924_201443.jpg
20190923_202625.jpg
20190924_201834.jpg
20190924_202512.jpg
20190925_183107.jpg
20190925_183223.jpg
20190927_185504.jpg

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.

Electronics

20190824_101015.jpg
IMG_20190810_095207.jpg
20190909_184143.jpg
IMG_20190810_083012.jpg
IMG_20190808_071003.jpg
20190823_062426.jpg
IMG_20190811_113311.jpg
IMG_20190811_103818.jpg
IMG_20190811_083950.jpg
IMG_20190811_083456.jpg
20190927_190658.jpg
20190925_183211.jpg
20190925_183113.jpg

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.

Software Considerations

blender.PNG
2blender.PNG

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 (www.anninrobotics.com) 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.

Pneumatic Clamp

20191005_101553.jpg
20190823_062334.jpg
20191005_100134.jpg
20190824_085656.jpg
20190928_081830.jpg
20190928_083552.jpg
20190928_081836.jpg
20190928_084219.jpg
20190928_084325.jpg
20190824_090215.jpg
20190824_090448.jpg
20190823_062426.jpg

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.