Project showcase
Robotic Hand with Wireless Glove Controlled | Arduino

Robotic Hand with Wireless Glove Controlled | Arduino © GPL3+

In this project; 3D robot hand assembly, servo control, flex sensor control, wireless control with nRF24L01 are available.

  • 11,934 views
  • 3 comments
  • 87 respects

Components and supplies

Necessary tools and machines

About this project

In this project; 3D robot hand assembly, servo control, flex sensor control, wireless control with nRF24L01, Arduino receiver and transmitter source code are available. In short, in this project we will learn how to control a robot hand with a wireless glove.

3D Models of the Hand and Forearm

The hand is part of an open-source project called InMoov. It's a 3D-printable robot, and this is just the hand and forearm assembly. For more information, visit the official InMoov website.

Thanks to InMoov -- http://inmoov.fr/ - http://inmoov.fr/hand-and-forarm/

Anet A8 3D Printer is used in this project. Models were printed at the lowest qulity.

All 3D parts used in this project -- https://goo.gl/npCuQd

Assembly of Parts

Assembly of robotic arm parts is very detailed and complex, so you can visit the "Assembly Sketches" and "Assembly Help" pages in the InMoov website for more details on assembly. it is explained very thoroughly on the InMoov website. Or you can watch the video I shared.

When assembling the fingers, make sure the parts are oriented correctly before gluing. Keep all servo motors at 10 or 170 degrees before attaching the servo pulleys to the servo motors. When mounting the servo pulleys, keep fingers in the closed or opened position (according to your servo angles). Then wrap around the servo pulley until the braid wires or strings becomes stretched.

Connections of Hand (Receiver)

At this point, the servos should already be mounted into the forearm. To connect them to the power supply and Arduino, you can use a small breadboard.

  • Remember to connect the negative on the breadboard to the Arduino's GND. All the GNDs in a circuit need to be connected for it to work.
  • I recommend using the power adapter for the nRF24L01+ module. Otherwise, communication may be broken due to insufficient current.
  • If you encounter the these problems: vibration in servo motors, servo motors not working, communication breakdown and in similar situations, supply your Arduino board with external power (like USB).
  • If you used different pins than pins shown in below, change them in codes.

Connections of the Servo Motors:

  • Servo-1 connect to the analog 01 (A1) of the Arduino.
  • Servo-2 connect to the analog 02 (A2) of the Arduino.
  • Servo-3 connect to the analog 03 (A3) of the Arduino.
  • Servo-4 connect to the analog 04 (A4) of the Arduino.
  • Servo-5 connect to the analog 05 (A5) of the Arduino.

Connections of the nRF24L01 Module:

  • VCC connect to the +5V of the Arduino.
  • GND connect to the GND of the Arduino.
  • CE connect to the digital 9 pin of the Arduino.
  • CSN connect to the digital 10 pin of the Arduino.
  • SCK connect to the digital 13 pin of the Arduino.
  • MOSI connect to the digital 11 pin of the Arduino.
  • MISO connect to the digital 12 pin of the Arduino.

Connections of the Glove (Transmitter)

The flex sensors require a circuit in order for them to be compatible with Arduino. Flex sensors are variable resistors, so I recommend using a voltage divider. I used 10K resistor.

  • The main GND (ground) wire connected to all individual GND wires from the sensors, gets connected to the GND of the Arduino. The +5 V from the Arduino goes to the main positive voltage wire. The wire from each flex sensor is connected to a separate analog input pin via the voltage divider.
  • I soldered the circuit onto a small PCB, one that could be easily mounted onto the glove.You can build the circuit on the small breadboard instead of the PCB.
  • You can use 9V battery for circuit of the glove.
  • If you used different pins than pins shown in below, change them in codes.

Connections of the flex sensors:

  • Flex-1 connect to the analog 01 (A1) of the Arduino.
  • Flex-2 connect to the analog 02 (A2) of the Arduino.
  • Flex-3 connect to the analog 03 (A3) of the Arduino.
  • Flex-4 connect to the analog 04 (A4) of the Arduino.
  • Flex-5 connect to the analog 05 (A5) of the Arduino.

Source Code of the Project

For the source code to work correctly, follow the recommendations:

  • After the flex sensors are connected o the glove, read and note the minimum and maximum values that each flex sensor has detected.
  • Then enter these values into the transmitter (glove) code.
  • Keep all servo motors at 10 or 170 degrees before attaching the servo pulleys to the servo motors.
  • When mounting the servo pulleys, keep fingers in the closed or opened position (according to your servo positions).
  • Then wrap around the servo pulley until the braid wires becomes stretched.
  • Move all the fingers to the closed and opened position by checking the servo motors one by one.
  • Then get the best angles for servo motors (servo angles while fingers closed and opened).
  • Enter the servo motors angles and flex sensor values to the transmitter code as follows.

flex sensor min. value, flex sensor max. value, servo min. angle, servo max. angle

(flex_val = map (flex_val, 630, 730, 10, 170);
  • There is only one change in the receiver source code. Which flex sensor in the transmitter will control which servo motor in the receiver? For example, msg[0] sends the data of the x sensor-5. If you want to control the servo motor-5 with the flex sensor-5, you can do this by typing 'servo-5.write(msg[0])'.
  • If you used different pins than pins shown in circuit, change them in both codes.

I know it's a little complex the last part, but please do not forget: there is no hard! You can do it! Just think, research, trust yourself and try.

Code

Receiver-Source-Code (Hand)Arduino
//Receiver Code (Hand) - Mert Arduino and Tech

#include <Servo.h>    //the library which helps us to control the servo motor
#include <SPI.h>      //the communication interface with the modem
#include "RF24.h"     //the library which helps us to control the radio modem

//define the servo name
Servo myServo1;
Servo myServo3;
Servo myServo4;
Servo myServo2;
Servo myServo5;

RF24 radio(9,10);     /*This object represents a modem connected to the Arduino. 
                      Arguments 9 and 10 are a digital pin numbers to which signals 
                      CE and CSN are connected.*/

const uint64_t pipe = 0xE8E8F0F0E1LL; //the address of the modem,that will receive data from the Arduino.

int msg[5];

void setup(){

  //define the servo input pins
  myServo1.attach(15); //A1
  myServo2.attach(16); //A2
  myServo3.attach(17); //A3
  myServo4.attach(18); //A4
  myServo5.attach(19); //A5
  
  radio.begin();                    //it activates the modem.
  radio.openReadingPipe(1, pipe);   //determines the address of our modem which receive data.
  radio.startListening();           //enable receiving data via modem
  }


void loop(){
  if(radio.available()){
    bool done = false;
    while (!done){
    done = radio.read(msg, sizeof(msg));

    myServo1.write(msg[2]); //A1
    myServo2.write(msg[4]); //A2
    myServo3.write(msg[3]); //A3
    myServo4.write(msg[1]); //A4
    myServo5.write(msg[0]); //A5
    }
  }
}
Transmitter-Source-Code (Glove)Arduino
//Transmitter Code (Glove) - Mert Arduino and Tech

#include <SPI.h>                      //the communication interface with the modem
#include "RF24.h"                     //the library which helps us to control the radio modem

int msg[5]; //Total number of data to be sent (data package)

//define the flex sensor input pins
int flex_5 = A5;
int flex_4 = A4;
int flex_3 = A3;
int flex_2 = A2;
int flex_1 = A1;

//define variables for flex sensor values
int flex_5_val;
int flex_4_val;
int flex_3_val;
int flex_2_val;
int flex_1_val;

RF24 radio(9,10);                     //9 and 10 are a digital pin numbers to which signals CE and CSN are connected.
                                      
const uint64_t pipe = 0xE8E8F0F0E1LL; //the address of the modem, that will receive data from Arduino.


void setup(void){
  Serial.begin(9600);
  radio.begin();                      //it activates the modem.
  radio.openWritingPipe(pipe);        //sets the address of the receiver to which the program will send data.
}

void loop(void){

  flex_5_val = analogRead(flex_5); 
  flex_5_val = map(flex_5_val, 630, 730, 80, 20);
  
  flex_4_val = analogRead(flex_4);
  flex_4_val = map(flex_4_val, 520, 710, 70, 175);
 
  flex_3_val = analogRead(flex_3);
  flex_3_val = map(flex_3_val, 510, 680, 140, 10);
 
  flex_2_val = analogRead(flex_2);
  flex_2_val = map(flex_2_val, 580, 715, 90, 175);
  
  flex_1_val = analogRead(flex_1);
  flex_1_val = map(flex_1_val, 550, 700, 90, 175);
  
  msg[0] = flex_5_val;
  msg[1] = flex_4_val;
  msg[2] = flex_3_val;
  msg[3] = flex_2_val;
  msg[4] = flex_1_val;
  radio.write(msg, sizeof(msg));
}

Schematics

Transmitter
Transmitter circuit 60lw5ov7kl
Receiver
Receiver circuit jl8q5qmi8s

Comments

Similar projects you might like

How to Make a Remote Controlled Robotic Hand with Arduino

Project showcase by Gabry295

  • 37,196 views
  • 5 comments
  • 117 respects

Nunchuk Controlled Robotic Arm (with Arduino)

Project tutorial by Igor Fonseca Albuquerque

  • 5,163 views
  • 5 comments
  • 40 respects

Gesture Controlled Robotic Arm Using Kinect & Arduino

Project showcase by Avinash Baranitharan and Karthikeyan

  • 8,621 views
  • 0 comments
  • 28 respects

PC Controlled Robotic Arm

Project tutorial by AhmedAzouz

  • 9,561 views
  • 12 comments
  • 77 respects

Android Controlled 6DoF Robotic Arm

Project in progress by Team Mans

  • 11,065 views
  • 0 comments
  • 17 respects

Robotic Car Controlled over Bluetooth by Andriod Phone

Project showcase by S.Ranjith Reddy

  • 5,087 views
  • 1 comment
  • 12 respects
Add projectSign up / Login