A robotic arm is a type of mechanical arm, usually programmable, that is designed to move materials, parts, tools, or specialized devices through various types of programmed motions for the purpose of manufacturing, assembly, testing, inspection, and other tasks. Robotic arms are widely used in a variety of industries, including automotive, aerospace, electronics, food processing, and pharmaceuticals. 

One of the main advantages of using a robotic arm is its ability to perform tasks with a high degree of accuracy and repeatability. This makes them well-suited for tasks that require precise movements, such as welding, painting, and packaging. In addition, robotic arms can work continuously for long periods of time without getting tired or making mistakes, which makes them an ideal choice for tasks that are too hazardous or tedious for humans to perform.

There are several different types of robotic arms, each with its own unique set of features and capabilities. The most common type is the articulated arm, which is made up of a series of interconnected joints that allow the arm to move in a wide range of directions. Other types of robotic arms include parallel arms, which are designed for high-speed movement, and cylindrical arms, which are best suited for tasks that require precise rotational movements.

So in this tutorial we are going to make and assemble the first type of robotic arm which we can control with the help of joystick and take make it move in various directions. Let’s build our robotic arm!

 

Components required

Software Required

  • Arduino IDE

 

Assembling of Robotic Arm

Step 1: Box structure assembly

Part number included: 3,4,5,6,7,8

Fix the servo motor with the help of M2.5 type screws and nuts. To fix all the parts mentioned above, we have used M3 type 10mm screws and nuts respectively.

TOP VIEW

robotic arm top view

SIDE VIEW

robotic arm side views

Step 2: Bridge and clips assembly

Part number included: 9,10,11,12,13,14,15,16,17

Screw all the parts as shown in the figure. Here you have to use M3 type 10 mm screws. Don’t over-tighten the screws. If needed you can also include spacers and M3 type 10 mm screws for extra space for nuts.

Robotic Arm Parts 

Step 3: Clipper assembly

Part number included: 19,20,21,22,23,24,25,26

For clipper assembly all the screws of M3 type 10mm are used.

robotic arm parts assembly

Step 4: Base mount assembly

Part number included: 1,2

Fix the servo motor with the help of M2.5 type screws and nuts. To fix part number 1 and 2, we have used M3 type 25mm screws and nuts respectively.

robot arm parts

robotic part assembly

Step 5: Body Attachment

Part number included: 18,27

To attach the part number 18 and 27, we have to use M3 type 12mm screws and nuts respectively.

Robo Part

Step 6: Clipper and Base mount Attachment to the body

Clipper and  Base mount are screwed together with the help of M3 type 10mm screws and nuts.

Robot Parts Assembling

Final assembly looks like:

Robot Arm Assembled

 

Circuit Diagram

Robotic Arm Circuit Diagram

Follow this table in order to make your connections.

Joystick 1

Arduino Pins

5V

5V

GND

GND

VRX

A0

VRY

A1

 

Joystick 2

Arduino Pins

5V

5V

GND

GND

VRX

A2

VRY

A3

 

Servo pins

Color code

Arduino Pins

5V

Red

5V

GND

Black

GND

Servo 1

Orange

6

Servo 2

Orange

9

Servo 3

Orange

10

Servo 4

Orange

11

 

Arduino Source Code

//Quartz Mini Robotic ARM - Testing code  

//Joystick 1 and 2 is connected to A0,A1, A2 and A3

//SERVO CONNECTIONS

//Neck sero - D10 - pos is saved at EEPROM 3

//Front and Back - D11 - pos is saved at EEPROM 2

//UP and Down - D9 - pos is saved at EEPROM 1

//Gripper - D6 - pos is saved at EEPROM 0

//created by: Aswinth Raj

//created for: quartzcomponents.com

#include <Servo.h>

#include <EEPROM.h>

//All the gripper positions will be saved and read from eeprom to resume same positon

int gripper_pos = EEPROM.read(0);

int updown_pos = EEPROM.read(1);

int frontback_pos = EEPROM.read(2);

int neck_pos = EEPROM.read(3);

// Create a servo object - one each for 4 servos

Servo Gripper_servo;

Servo UpDown_servo;

Servo FrontBack_servo;

Servo Neck_servo;

//Function the control the servo based on joystick position

void control_servo (Servo &current_servo, int current_pos, int EEPROM_addr)

{

    //positon should alwasy be between 0 to 180

    if (current_pos>=180)

    current_pos=175; //jitter at maximum limit

    if (current_pos<=0)

    current_pos=10; //jitter at minimum limit

    current_servo.write(current_pos); //update servo postion

    EEPROM.write(EEPROM_addr, current_pos); //save position in EEPROM

    Serial.print(EEPROM_addr); Serial.print(" = "); Serial.println(current_pos); //for debugging on serial monitor

}

void setup() {

  Serial.begin (9600);

  Gripper_servo.attach(6);

  Gripper_servo.write(gripper_pos);

  UpDown_servo.attach(9);

  UpDown_servo.write(gripper_pos);

  FrontBack_servo.attach(11);

  FrontBack_servo.write(gripper_pos);

  Neck_servo.attach(10);

  Neck_servo.write(gripper_pos);

}

void loop() {

  /*//USE FOR DEBUGGING

  Serial.println ("Gripper, UpDown, FrontBack, Neck");

  Serial.print(gripper_pos);Serial.print(",");

  Serial.print(updown_pos);Serial.print(",");

  Serial.print(frontback_pos);Serial.print(",");

  Serial.print(neck_pos);Serial.println(".");*/

  delay(50); //predefined  delay to make the servo move slower

//A0 to control Gripper Servo

  int Joy_value_X1 = analogRead (A0);

  if (Joy_value_X1 > 700){

    gripper_pos = gripper_pos + 1;

    control_servo (Gripper_servo, gripper_pos, 0);

  }

  if (Joy_value_X1 < 300){

    gripper_pos = gripper_pos - 1;

    control_servo (Gripper_servo, gripper_pos, 0);

  }

//A1 to control UpDown Servo

    int Joy_value_Y1 = analogRead (A1);

  if (Joy_value_Y1 > 700){

    updown_pos = updown_pos + 1;

    control_servo (UpDown_servo, updown_pos, 1);

  }

  if (Joy_value_Y1 < 300){

    updown_pos = updown_pos - 1;

    control_servo (UpDown_servo, updown_pos, 1);

  }

//A2 to control FrontBack Servo

      int Joy_value_X2 = analogRead (A2);

  if (Joy_value_X2 > 700){

    frontback_pos = frontback_pos + 1;

    control_servo (FrontBack_servo, frontback_pos, 2);

  }

  if (Joy_value_X2 < 300){

    frontback_pos = frontback_pos - 1;

    control_servo (FrontBack_servo, frontback_pos, 2);

  }

//A3 to control Neck Servo

        int Joy_value_Y2 = analogRead (A3);

  if (Joy_value_Y2 > 700){

    neck_pos = neck_pos + 1;

    control_servo (Neck_servo, neck_pos, 3);

  }

  if (Joy_value_Y2 < 300){

    neck_pos = neck_pos - 1;

    control_servo (Neck_servo, neck_pos, 3);

  }

}

Code Explanation

#include <Servo.h>

#include <EEPROM.h>

Here we have included servo and EEPROM library. All the position will be saved in EEPROM and will resume from the last position.

int gripper_pos = EEPROM.read(0);

int updown_pos = EEPROM.read(1);

int frontback_pos = EEPROM.read(2);

int neck_pos = EEPROM.read(3);

We have allotted the pin number to the respective joysticks to operate different arms of the robot.

Servo Gripper_servo;

Servo UpDown_servo;

Servo FrontBack_servo;

Servo Neck_servo;

Created a servo object for all the four servos.

In the void control_servo section, servos are controlled with the help of joysticks. The Current position of all the servo motors gets stored in the EEPROM.

void setup()

In this section, we have defined the pins of servos respectively.

void loop()

In this section, as the joysticks are operated, the value gets increases by 1 and the maximum and minimum values are allotted as 700 and 300. With the increment function, the value will reach till 700 and the servo will operate according to the value fed by the joystick.

 

Troubleshooting

Servo motor is not working?

    Cross-check your connections with the Arduino.  The Servo motor must be supplied with the 5v supply. If you feel that the servo is not getting proper supply from the Arduino, then try to power the servo from the separate 5V power supply.

    Robotic arm is not having smooth motion?

      For this, you have to loosen the screw a little bit such that the joints ensure a free motion exactly as same as human joints like elbow and knees.

      Facing a loose joints issue?

        Try to add the spacers provided with the kit. These spaces will provide a smooth motion and will eliminate the spaces between the joints. Use them as per your requirements.

        Leave a comment

        Please note, comments must be approved before they are published

        Your cart

        ×