Introduction: Three-Fingered Electric Gripper

Are you a mechatronics fan and are looking for a simple Arduino project to do? Well, here is a simple yet very important mechanism used in many robots nowadays. Robots are designed to satisfy a certain need or to make life easier in a certain way. The gripping action is actually a common task performed by many robots to fulfill their assigned mission. In this instructable, you will learn how to make a three-fingered electronic gripper automated with pushbuttons. Check out the gripper in motion here: Video

Step 1: Bill of Materials

Mechanical Components:

  • Threaded rod 8mm diameter
  • 8 mm nut to fit with the rod

Electronic Components:

  • Microcontroller:
    • Arduino Uno Board
  • Sensors:
  • 12V DC geared motor- Order here
  • L298N H-bridge motor driver-Order here
  • LCD 16x2 I2C-Order here
  • 12 V DC power supply
  • Breadboard
  • Push-button(x2)
  • 10kOhm resistors(x5)
  • Jumper wires

Tools and Equipment:

  • 3D printer
    • PLA for all the printed parts (other materials can also be used, like ABS)
  • Laser cutter
    • MDF 3mm
  • Soldering iron
  • Multimeter
  • Metal saw
  • Electric tape
  • Wire Stripper
  • Pliers
  • Hammer
  • Screwdriver
  • Zip ties small size
  • 3mm nuts and bolts

Step 2: Mechanical Design

You can check teh following video for the assembly:Assembly Video

3D-printed Parts

  • Fingers

The fingers have a special geometry that deforms in alignment with the shape of the object to be gripped. Three fingers were chosen instead of two to have a firmer grip. Each finger is connected to the rotation base from their backside and to the moving plate from their front side.

  • Moving plate

The nut, which is fixed to the moving plate, translates vertically due to the rotation of the threaded rod.The vertical displacement of this plate increases or decreases the angular displacement of each finger by the same amount.

  • Rotation base

This base is connected to the support columns, and as this base is also connected to each finger, it prevents the rotation of the moving plate. The nut has a tendency to rotate due to the threaded rod's rotation. This fixation prevents the fingers along with the moving plate to rotate, hence forcing the nut to translate up and down

  • Support columns

This support serves as fixation for the Rotation base as well as a casing for the DC motor. The sliding potentiometer is also fixed to the support columns' wall.

  • Shaft coupler

A 3D-printed coupler is used to transmit rotation from the DC motor to the threaded rod.

Laser-cut Parts

  • Sliding pot coupler

This coupler is used to connect the sliding pot stick to the moving plate. The coupler translates through the empty space inside the rotation base and the moving plate.

Please, find enclosed the CAD design files.

Step 3: Electronics(choices of Components)

  • Microcontroller: Arduino Uno board

Open-source hardware and software. Cheap, easily available, easy to code. This board is compatible with a vast range of electronic components. Furthermore, multiple tutorials and forums are readily available online which makes it very helpful to learn and solve problems.

  • Pressure sensor: DF9-40(0-20 kg)

When the sensor detects outside pressure, the resistance of the sensor will change. Pressure signals can be converted into a corresponding electrical signal output using a simple circuit. Although expensive, this sensor enables the fingers to grip delicate objects with a certain pressure range. Five pressure intervals are displayed on the LCD screen: No pressure( almost zero kg), light(less than 4 kg), bit heavy(less than 8 kg), medium( less than 12 kg) , and heavy (less than 20 kg). This tutorial was used to learn about the pressure sensor: tutorial

  • Screen: LCD 16x2 I2C

Cheap, readily available, and easy to program with the I2C module. The I2C module was chosen as it requires fewer wires than in the case of the LCD alone. The following tutorial was used to learn about the LCD screen: LCD tutorial

  • 12V DC geared motor

This DC motor comes with its own gearbox. it has good torque and acceptable speed; therefore, it makes a good choice. A modified servo into 360 degrees rotation was first used to avoid having a motor driver, but it was too slow.

  • Motor driver: L298N H-bridge

This driver is very cheap, easy to program, and comes with its own circuit protection. It also has an H-bridge which rotates the motor clockwise and counter-clockwise directions i.e. enabling the gripper to open and close. Furthermore, its speed can be reduced when the pressure sensors' readings reach a predefined range or when the linear potentiometer reaches its max and min limits. This tutorial was used to learn about the motor driver: tutorial

  • Dual output linear potentiometer

This potentiometer is used to read variation in the vertical position of the moving plate. This is needed in order for the motor not to break the fingers with overload torque. max and min limits must be determined through experiments so that the motor is cut off from power when the translation of the moving plate exceeds these limits. This potentiometer is quite accurate but is hard to couple. Another way of determining position is to use a rotation sensor for the DC motor. This way, the number of turns to reach max and min limits can also be determined.This tutorial was used to learn about the linear potentiometer: tutorial

  • Push-button:

Two push-buttons were used to make the gripper open and close which basically means to rotate the rod clockwise and counterclockwise. This tutorial was used to learn about push-buttons: tutorial

  • 12 V DC power supply

A variable-range DC power supply can be used or a 12 V battery is equally acceptable.

Step 4: Electronics(Wiring of Components)

The free wires coming out of the motor driver are to be connected to a power source( battery or variable DC supply. Please note that this schematic is for a set-up powered wholly by the power source. If you wish to connect the Arduino to your PC to upload your code, remove the Vin wire coming from the motor driver and plug it in after you finish uploading.

Please, find enclosed the table of connections in pdf format.

Step 5: Assembly

Assembly steps. Note that the assembly methods suggested here may not be the best options, so feel free to adjust them.

Mechanical Assembly:

  • 3D_print all the parts except for the support columns. 3D-print the support columns without its lower-most disk(the reason will be clarified later) and then 3D-print the lower disk alone.
  • Cut 5 cm of the length of the threaded rod using the metal saw. Make sure you fix the rod very well. Any slight bending of the rod will cause unbalanced rotation.
  • Polish its tip a bit so that it is not sharp anymore
  • Connect the shaft coupler between the threaded rod and the motor shaft. Use a hammer to make it force-fit.
  • Laser-cut the potentiometer coupler with 3 mm MDF thickness.
  • Using the pliers, cut 7 mm of the potentiometer stick and connect it to its coupler, then fasten the potentiometer to the support columns' wall with zip ties.
  • Fasten the DC motor to the support columns using the screws inside the motor itself. Use the assigned holes in the support columns to install the screws.
  • Using the soldering iron, melt the lower tips of the support columns and connect them to the lower disk that was 3D-printed separately.
  • Force-fit the nut into its place in the moving plate. Use a hammer.
  • Force-fit the rotation base onto the support columns. There are designated protrusions in the rotation base to fit on the support columns.
  • Connect the potentiometer coupler with zip ties to the moving plate. Make sure it goes up and down freely.
  • Using the 3mm screws, connect the fingers to the moving plate and the rotation base.

Electrical Assembly:

  • All resistors used are 10 KOhm. Make sure to test them using the multimeter.
  • After constructing the wiring diagram on the breadboard, remove each pressure sensor, and carefully solder its corresponding wires, then tape each sensor to a finger. Make sure to test it using a multimeter as shown in this tutorial. If you happen to be rusty at soldering, there are some special connectors for these sensors shown in the tutorial.
  • Adjust the brightness of the LCD screen with the built-in potentiometer on the I2C module
  • Jumper wires are not reliable for a building something consistent. They are only good for testing. Use aluminum or copper wires instead.

Step 6: Programming

Here is the code uploaded to the Arduino. Please, find it in the attached file.

//Done by Manar Mahmalji and Karel Tempelaere
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
// Define pressure sensors pins:
#define pr_sens1 A0
#define pr_sens2 A1
#define pr_sens3 A2

//Define variable to store sensor readings:
int read_sens1;// gripper finger 
int read_sens2;// gripper finger
int read_sens3;// gripper finger
int max_reading;
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

// linear potentiometer variables
int potValue;
int max_limit;
int min_limit;// to be calibrated
// push buttons and motor pins
int motor1pin1 = 2;
int motor1pin2 = 3;
int speedpin=9;
const int buttonPin1 = 7;
const int buttonPin2 =  8;
int buttonState1=0;
int buttonState2=0;// Buttons being unpressed is the natural case


void setup() {

  // initialize the LCD
	lcd.begin();
	// Turn on the blacklight and print a message.
	lcd.backlight();

  pinMode(motor1pin1, OUTPUT);
  pinMode(motor1pin2, OUTPUT);
  pinMode(speedpin,OUTPUT);
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT);
}


void loop() {
  
//reading push buttons
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);


if (buttonState1 == HIGH && buttonState2 == LOW)// we'll have to test it to know direction
  {
    analogWrite(speedpin,255);
  digitalWrite(motor1pin1, HIGH);
  digitalWrite(motor1pin2, LOW);

  }
 
 if (buttonState1 == LOW && buttonState2 == HIGH)
  {
    analogWrite(speedpin,255);
   digitalWrite(motor1pin1, LOW);
   digitalWrite(motor1pin2, HIGH);
  }
  
  if ((buttonState1 == HIGH && buttonState2 == HIGH )||(buttonState1 == LOW && buttonState2 == LOW))
  // if ( no button is pressed or both buttons are pressed
  {
    //motor brake
  analogWrite(speedpin,255);
   digitalWrite(motor1pin1, LOW);
   digitalWrite(motor1pin2, LOW);
  }
 
  
  
  //reading pressure sesnors 
  lcd.clear();
  lcd.setCursor (0,0);
  // Read the pressure sensors
  read_sens1 = analogRead(pr_sens1);
  read_sens2 = analogRead(pr_sens2);
  read_sens3 = analogRead(pr_sens3);
  
  // Print the max of pressure readings from sensors 1 ,2 and 3 on the LCD screen:
  
    max_reading=max3(read_sens1,read_sens2,read_sens3);
  
     
     lcd.setCursor (0,0);

    if (max_reading < 10) {
    lcd.print("No pressure");
  } else if (max_reading  < 200) { 
    lcd.print("Light(4kg)");
  } else if (max_reading < 400) {
    lcd.print("Bit heavy(8kg)");
  } else if (max_reading  < 600) {
    lcd.print("Medium(12kg)");
  } else {
    lcd.print("Heavy(20kg)");
  }
  


  
  // reading linear potentiometer
   potValue = analogRead(A3);
  delay(1);
  // delay in between reads for stability
  if(potValue>max_limit || potValue<min_limit)
  {
    //brake motor
    analogWrite(speedpin,100);
   digitalWrite(motor1pin1, LOW);
   digitalWrite(motor1pin2, LOW);
  }
  
}



int max3(int a, int b, int c)
{
  int maxguess;

  maxguess = max(a,b);  // biggest of A and B
  maxguess = max(maxguess, c);  // but maybe C is bigger?

  return(maxguess);
}


Step 7: Further Improvements and Recommendations

Due to lack of time, some parts of the project were not given enough attention and some aspects could have been improved.

  • The linear potentiometer was left unconnected in the real assembly because the 3D-printed support columns didn't have enough space for the potentiometer stick to translate freely. Therefore, it is recommended to increase its diameter in the CAD files.
  • Consider using a high-speed stepper motor to avoid the use of a potentiometer. The motor operates by accurately synchronizing with the pulse signal output from the controller to the driver, achieving highly accurate positioning and speed control.
  • Consider degrading the motor speed as pressure readings exceed 400-zone.
  • A pinion and rack mechanism could have been used instead of the nut and screw mechanism. However, it is harder to implement
  • Do not use jumper wires as they have really bad connections. They would cause signal loss at the smallest disturbance. Use copper or aluminum wires instead.
  • Push buttons are quite unreliable for continuous use as they don't stick on the breadboard. They squeeze out if you push a bit hard.
  • Use a voltage regulator and connect the LCD to 5 V from the regulator instead of from the Arduino. If you connect it from the Arduino, the LCD will show dim readings.
  • Display force on LCD screen. Force can be displayed using the force-resistance graph of the FSR. More info on this can be found in this tutorial
  • Make a closed box for the whole assembly.

Step 8: Credits

This project was done as part of the Mechatronics(I) and Design Methodolgy courses during the academic year 2020-2021 for the Bruface Master at the Université Libre de Bruxelles (ULB) - Vrije Universiteit Brussel (VUB).

Team members:

  • Manar Mahmalji
  • Karel Tempelaere

A very special thanks to the assistants Albert De Beir and Muhammad Usman who gave dedicated support and guidance during the lab sessions.