Arduino TutorialsDIY Arduino Projects For BeginnersProjectsRobotics

How To Make A Robotic Arm With Arduino

Learn How To Make A Robotic Arm With Arduino

In the last tutorial, we discussed intuitively at length how a servo motor works, and how to use servo motor with arduino. In this tutorial, we shall use servo motors to build a robot. The type of robot we shall design is an articulated robotic arm. Meanwhile, let’s define what an articulated robot is.

Articulated robot: this is a robot that has a rotary base with two or more rotary joints.

Video Tutorial

The design of robots requires a mastery of at least the following three topics:

  1. Sensors and machine vision
  2. Kinematics
  3. Motion control

Imagine you are standing in a room and wishes to drop a cup in your hand on a table, well, that might be a very simple task. However, designing a robot that can do that is a very sophisticated task.

Firstly, the robot has to scan its environment to spot where the table is located in the room and differentiate the table’s image from the images of other objects in the room. This is made possible by sensors and machine vision of the robot.

Secondly, the robot will have to move its arm with respect to the location of the table, this is called kinematics. This requires the robot manipulating its actuators to assume the right joint angles for its arm’s motion.

Thirdly, the robot has to drop the cup on the table with the appropriate speed and force as it moves its arm. If the robot moves faster than it should or exerts more force than required, it might miss the table or throw the cup off the table. The ability of the robot to achieve smooth and accurate motion is called motion control.

Before we delve into discussing our robot design, let’s define and explain some important concepts in robotics, meanwhile, Robotics is an engineering and technological interdisciplinary field that comprises of electronics, mechanics and computing. Robotics is laden with a lot of mathematics, but we shall reduce the mathematics to bare minimum and focus more on the design.

Articulated body

An articulated body is a dynamic framework (skeleton) of a human, animal or a system. It is a tree of linked chains. The linked chains are made up of links and joints.

Link

A link is a rigid body, i.e. a body that does not move

Joint

A point or region that allows free movement with some constraints

Degree of Freedom (DoF)

Simply put is the minimum number of actuated joints to control the robot or the number of independent ways by which a dynamic system can move, without violating any constraint imposed on it.

Linkage

When a joint and a link merge together, they form a linkage.

The model of an articulated body made from linkages is called a Kinematic chain. A kinematic chain is shown below.

A robotic kinematic chain
Figure 2: A robotic kinematic chain

Linkages are designed to manage forces and movements in a robot, like changing the direction of force or making two parts move at the same time.

The nature of movement of a link is determined by the type of joint used in the robot design. The figure below shows the various robot joints we have.

various robot joints
Figure 3: various robot joints

Our robot is going to have just one type of joint, a revolute joint.

A revolute joint is a type of joint that rotates round a link much like how a clock hand rotates round the center pin of the clock.

3D depiction of a revolute joint
Figure 4: 3D depiction of a revolute joint

Having talked about few concepts that are necessary to understanding an articulated robot design, we will now proceed to the design proper.

Our robot will be a simple articulated robot with two degrees of freedom using revolute joints.

The complete process of how the robotic arm is designed is shown in the video above.

Please subscribe to our youTube channel and click the notification bell for updates on new videos.

The arduino code for the robot is shown below.

#include <Servo.h>
Servo myservo1;  // create servo object to control a servo at the arm
Servo myservo2;  // create servo object to control a servo at the base
Servo myservo3;   // create servo object to control a servo at the end effector
  int pos;    // variable to store the servo position for the base
   int pos1;  // variable to store the servo position for the arm
void setup()  // the codes inside this function runs once immediately the arduino is powered or reset button pressed
{myservo1.attach(9); // attaches the servo on pin 9 to the servo object myservo1 
  myservo2.attach(10); // attaches the servo on pin 10 to the servo object myservo2 
    myservo3.attach(11);   //// attaches the servo on pin 11 to the servo object myservo3

for (pos1= 0; pos1<=50; pos1+=1)
{                                    // we use a for loop to increamentally move...
  myservo1.write(pos1);             //...the arm of the manipulator to 140 degrees in 1 degrees steps
    delay(50);
      }
        }
 void loop()                   //    the codes inside this function functions repeatedly 
  {for (pos = 0; pos <=180; pos+=2)  // we use a for loop to move the base rapidly to 0 degrees position...
    {myservo2.write(pos);          // ...and slowly to 180 degrees position where it will pick an object
      delay(50);}
 delay(1000);                    // the robots does nothing for one second
    myservo3.write(150);             // we open the gripper(robot's end effector)
     delay (1000);                      // the robot does nothing for half a second
 for(pos1 =50; pos1>=0; pos1-=1) // we use a for loop to move the arm 50 degrees lower, to pick an object
 {myservo1.write(pos1);        
   delay(50);
   }
    delay(1000);     // the robot does nothing for second
 myservo3.write(125);  // the robot gripper(end effector) closes    
     delay (1000);       //the robot does nothing for one second
 for(pos1=0; pos1<=50; pos1+=1) // we use a for loop to movw the arm to 50 degrees position
  {myservo1.write(pos1);
     delay(50);}
     
       delay (1000);      // the robot does nothing for one second
for(pos = 180; pos >=0; pos-=1)  // we use a for loop to return the arm...
 {myservo2.write(pos);          //...to 0 degrees position where the gripper will dropo the object
   delay(50); }
     delay(1000);                   //the robot does nothing for one second 
myservo3.write(150);             // the gripper opens and drops the object
  delay(2000);                    //the robot does nothing for one second 
    myservo3.write(125);              // the robot closes its gripper
     }

If you encounter any difficulties while designing the robot, please let me know in the comment section.

Leave a Reply

Your email address will not be published. Required fields are marked *