
Lalit Saini
Robotic Gripper
Commencement
The idea of this project came from the ROBOTS being used in the automobile industry for the assembly of car parts. So we started gathering information about the pick and drop mechanisms and robotic grippers and the mechanisms being used in such machines, so that we can ramp up our own pick and drop mechanism or the mechanism which can be used perfectly in this robotic gripper.
At last, we ourselves started thinking about various mechanisms that could be used in our robotic gripper. We tested various mechanisms keeping this in mind that our gripper should be based on PURE MECHANICS.
Various mechanisms tested were :
Firstly began with Cable wires:

1.

2.
Secondly, tried metal sheets instead of wires.




3.
Some links are broken.
4.
Final mechanism which was smooth and fit for the gripper.
Mechanical Structure
Keeping this thing in mind, that the gripper should have the appearance of a human hand, its mechanical structure is designed. The whole finger mechanism is designed in SolidWorks software with proper measurements.
Here are some pics while operating the gripper mechanism.









Final structure of the robotic gripper

Material used for the construction of gripper
-
Aluminium Sheets
-
Galvanized Iron Sheets
-
Screws (3mm dia.)
-
Rubber washers
-
Wooden Board
-
Bearings (15mm dia.)
Electrical Devices used:
-
Servo Motors (7 in no.)
-
Potentiometer
-
Push button Switch
-
LEDs (RedColor)
-
Arduino Micro Controller
Working
The mechanical moving portion of the robotic hand is run with the help of servo motors. The servos which are used have a torque rating of 3Kgfcm. I have used this rating because i was unaware about required force and this torque rating is normal.
The motion of servo motors can be controlled with the help of Arduino controller. Arduino UNO is used because it can be easily programmed with the help of computer by writing codes in its given programming toolkit.
Two programs are included for the grasping operation in the robotic hand which can be operated with the help of pressing push buttons, that are fixed on the bread board. Potentiometers are installed for the manual postioning of fingers and thumb, and also for the rotation of wrist. One potentiometer is used to increase the grasping power of the robotic hand.
The whole electronics is operated at 5 volts which is provided by the SMPS. SMPS is used because it can provide a large current value to the Robotic Hand which is required.
// made by lalit
#include<Servo.h>
Servo motor_1;
Servo motor_2;
Servo motor_3;
Servo motor_4;
Servo motor_5;
Servo motor_6;
Servo motor_7;
int servoPin_1 = 13;
int servoPin_2 = 12;
int servoPin_3 = 11;
int servoPin_4 = 10;
int servoPin_5 = 9;
int servoPin_6 = 8;
int servoPin_7 = 7;
int button_1 = 6;
int button_2 = 5;
int button_3 = 4;
int potm1 = A0;
int potm2 = A1;
int potm3 = A2;
int led1 = 3; // indicator
int led2 = 2; // indicator
unsigned int m1, m2, m3, m4, m5, m6, m7;
boolean currentButton1, currentButton2, currentButton3 = LOW;
boolean lastButton1, lastButton2, lastButton3 = LOW;
boolean a = false;
boolean b = false;
boolean c = false;
boolean d = false;
boolean e = false;
boolean f = false;
boolean g = false;
void setup()
{
motor_1.attach(servoPin_1);
motor_2.attach(servoPin_2);
motor_3.attach(servoPin_3);
motor_4.attach(servoPin_4);
motor_5.attach(servoPin_5);
motor_6.attach(servoPin_6);
motor_7.attach(servoPin_7);
pinMode(button_1, INPUT);
pinMode(button_2, INPUT);
pinMode(button_3, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
motor_1.write(0);
motor_2.write(0);
motor_3.write(0);
motor_4.write(0);
motor_5.write(0);
motor_6.write(0);
motor_7.write(0);
}
boolean debounce1 (boolean last1)
{
boolean current1 = digitalRead(button_1);
if (last1 != current1)
{
delay(5);
current1 = digitalRead(button_1);
}
return current1 ;
}
boolean debounce2 (boolean last2)
{
boolean current2 = digitalRead(button_2);
if (last2 != current2)
{
delay(5);
current2 = digitalRead(button_2);
}
return current2 ;
}
boolean debounce3 (boolean last3)
{
boolean current3 = digitalRead(button_3);
if (last3 != current3)
{
delay(5);
current3 = digitalRead(button_3);
}
return current3 ;
}
void loop()
{
currentButton1 = debounce1 (lastButton1);
if (lastButton1 == LOW && currentButton1 == HIGH)
{
a = !a;
}
lastButton1 = currentButton1;
if (a == false)
{
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
currentButton2 = debounce2 (lastButton2);
if (lastButton2 == LOW && currentButton2 == HIGH)
{
if (g == false)
{
b = !b;
c = !c;
}
}
lastButton2 = currentButton2;
if ( b == true && c == true)
{
for (int i = 0; i <= 250; i++)
{
int mm1 = i;
mm1 = constrain(mm1, 0, 72);
m1 = map(mm1, 0, 72, 0, 84);
motor_1.write(m1);
if (i > 30)
{
int mm2 = i;
mm2 = constrain(mm2, 30, 100);
m2 = map(mm2, 30, 100, 0, 92);
motor_2.write(m2);
if (i > 60)
{
int mm3 = i;
mm3 = constrain(mm3, 60, 170);
m3 = map(mm3, 60, 170, 0, 135);
motor_3.write(m3);
if (i >= 110)
{
int mm4 = i;
mm4 = constrain(mm4, 110, 190);
m4 = map(mm4, 110, 190, 0, 90);
motor_4.write(m4);
if (i >= 140)
{
int mm5 = i;
mm5 = constrain(mm5, 140, 250);
m5 = map(mm5, 140, 250, 0, 110);
motor_5.write(m5);
}
}
}
}
delay(5);
if ( i == 250)
{
i = 0;
b = !b;
d = !d;
break;
}
}
}
else if ( b == true && c == false)
{
motor_1.write(m1);
motor_2.write(m2);
motor_3.write(m3);
motor_4.write(m4);
motor_5.write(m5);
delay(5);
m1--;
m2--;
m3 = m3 - 5;
m4--;
m5--;
if (m1, m2, m3, m4, m5 == 0 )
{
b = !b;
d = !d;
}
}
currentButton3 = debounce3 (lastButton3);
if (lastButton3 == LOW && currentButton3 == HIGH)
{
if (d == false)
{
e = !e;
f = !f;
}
}
lastButton3 = currentButton3;
if ( e == true && f == true)
{
for (int i = 0; i <= 476; i++)
{
int mm1 = i;
mm1 = constrain(mm1, 0, 84);
m1 = map(mm1, 0, 84, 0, 84);
motor_1.write(m1);
if (i > 84)
{
int mm2 = i;
mm2 = constrain(mm2, 84, 176);
m2 = map(mm2, 84, 176, 0, 92);
motor_2.write(m2);
if (i > 176)
{
int mm3 = i;
mm3 = constrain(mm3, 176, 286);
m3 = map(mm3, 176, 286, 0, 135);
motor_3.write(m3);
if (i > 286)
{
int mm4 = i;
mm4 = constrain(mm4, 286, 376);
m4 = map(mm4, 286, 376, 0, 90);
motor_4.write(m4);
if (i > 376)
{
int mm5 = i;
mm5 = constrain(mm5, 376, 476);
m5 = map(mm5, 376, 476, 0, 110);
motor_5.write(m5);
}
}
}
}
delay(5);
if ( i == 476)
{
i = 0;
e = !e;
g = !g;
break;
}
}
}
else if ( e == true && f == false)
{
motor_1.write(m1);
motor_2.write(m2);
motor_3.write(m3);
motor_4.write(m4);
motor_5.write(m5);
delay(5);
m1--;
m2--;
m3 = m3-5;
m4--;
m5--;
if (m1, m2, m3, m4, m5 == 0 )
{
e = !e;
g = !g;
}
}
}
else if (a == true)
{
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
int val1 = analogRead(potm1);
m1 = map(val1, 0, 1023, 0, 85);
m2 = map(val1, 0, 1023, 0, 92);
m3 = map(val1, 0, 1023, 0, 140);
m4 = map(val1, 0, 1023, 0, 98);
m5 = map(val1, 0, 1023, 0, 100);
motor_1.write(m1);
motor_2.write(m2);
motor_3.write(m3);
motor_4.write(m4);
motor_5.write(m5);
}
int val2 = analogRead(potm2);
m6 = map(val2, 0, 1023, 0, 90);
motor_6.write(m6);
int val3 = analogRead(potm3);
m7 = map(val3, 0, 1023, 0, 110);
motor_7.write(m7);
}