How to Build a 3D-Printed Robotic Hand Controlled by a Wireless Glove

Wireless Gesture-Controlled Robotic Hand using NRF24L01+ and Arduino

In this tutorial, we will learn how to build a wireless robotic hand controlled by a flex-sensor glove using Arduino Nano and NRF24L01+ transceivers. The project combines 3D printing, wireless communication, and servo motor control — allowing your robotic hand to mimic real hand movements in real-time.

This system is divided into two parts:
1️⃣ Transmitter (Glove) — reads finger movements via flex sensors
2️⃣ Receiver (Robotic Hand) — moves servo motors to replicate those movements

Hardware Components

ComponentQuantityDescription
Arduino Nano2One for glove, one for robotic hand
NRF24L01+ Module2Wireless communication
NRF24L01+ Adapter2Power stabilizer for radio module
MG996R Servo Motor5Controls robotic fingers
Flex Sensor (4.5 inch)5Detects finger bending
10kΩ Resistor5Forms voltage divider with flex sensors
18650 Li-ion Battery (3.7V)2Power supply for the hand
Battery Holder1For 18650 cells
9V Battery + Clip1Power source for glove
Jumper WiresSeveralFor connections
Mini Breadboard3For prototyping
Gloves1For mounting flex sensors
3D Printed Hand and Forearm1Based on InMoov open-source design

3D Models (Open-Source from InMoov Project):

Mechanical Assembly

1️⃣ 3D Print the Hand and Forearm Parts
Download the InMoov hand STL files and print them using a standard FDM 3D printer (e.g., Ender 3 Pro).

2️⃣ Mount the Servo Motors
Install the five MG996R servos into the forearm section — one for each finger. Keep each servo initially positioned at 10° or 170° before attaching the pulleys.

3️⃣ Attach Strings (Braid Line or Fishing Wire)
Wrap the string around each servo pulley, routing it through the finger joints to create tendon-like movement. Adjust tension so fingers move smoothly when the servo rotates.

4️⃣ Add Rubber Bands or Springs
These will help fingers return to their original position when relaxed.

Transmitter Circuit (Wireless Glove)

Transmitter Circuit (Wireless Glove) - How to Build a 3D-Printed Robotic Hand Controlled by a Wireless Glove

Connections of Flex Sensors

Each flex sensor acts as a variable resistor in a voltage divider circuit with a 10kΩ resistor.

Flex SensorArduino Nano Pin
Flex 1A1
Flex 2A2
Flex 3A3
Flex 4A4
Flex 5A5

Connections of NRF24L01+

Same as receiver:

  • VCC → +5V
  • GND → GND
  • CE → D9
  • CSN → D10
  • SCK → D13
  • MOSI → D11
  • MISO → D12

🔋 Power the glove circuit using a 9V battery for portability.

Receiver Circuit (Robotic Hand)

Receiver Circuit (Robotic Hand)

Connections of Servo Motors

ServoArduino Nano Pin
Servo 1A1
Servo 2A2
Servo 3A3
Servo 4A4
Servo 5A5

Connections of NRF24L01+

NRF24L01 PinArduino Nano Pin
VCC+5V
GNDGND
CED9
CSND10
SCKD13
MOSID11
MISOD12

🔋 Power Tip:
Use two 3.7V 18650 Li-ion batteries in series (~7.4V total) connected to the Arduino VIN pin or regulated 5V output for the servos. Always connect all grounds together (servo GND, Arduino GND, and power GND).

Wireless Communication Setup

The NRF24L01+ uses SPI protocol to send data packets containing five flex sensor values from the glove to the robotic hand.

  • Baud rate: 2 Mbps (default)
  • Frequency: 2.4 GHz
  • Address: 0xE8E8F0F0E1LL

This allows low-latency gesture control without noticeable delay.

💾 Arduino Code

Before uploading the code, make sure you have installed:
📦 RF24 LibraryDownload from GitHub

Transmitter Code (Glove)

#include <SPI.h>
#include "RF24.h"

int msg[5];

// Flex sensor pins
int flex_5 = A5;
int flex_4 = A4;
int flex_3 = A3;
int flex_2 = A2;
int flex_1 = A1;

// Flex sensor values
int flex_5_val, flex_4_val, flex_3_val, flex_2_val, flex_1_val;

RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;

void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.openWritingPipe(pipe);
}

void loop() {
  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));
}

Receiver Code (Robotic Hand)

#include <Servo.h>
#include <SPI.h>
#include "RF24.h"

Servo myServo1, myServo2, myServo3, myServo4, myServo5;

RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;

int msg[5];

void setup() {
  myServo1.attach(A1);
  myServo2.attach(A2);
  myServo3.attach(A3);
  myServo4.attach(A4);
  myServo5.attach(A5);

  radio.begin();
  radio.openReadingPipe(1, pipe);
  radio.startListening();
}

void loop() {
  if (radio.available()) {
    radio.read(msg, sizeof(msg));

    myServo1.write(msg[2]);
    myServo2.write(msg[4]);
    myServo3.write(msg[3]);
    myServo4.write(msg[1]);
    myServo5.write(msg[0]);
  }
}

Calibration Steps

1️⃣ Upload the transmitter code and open the Serial Monitor.
2️⃣ Note the minimum and maximum analog values from each flex sensor (when bent and straight).
3️⃣ Replace those calibration values inside the map() function.
4️⃣ For each servo, adjust the min/max angles (10°–170°) according to your mechanical range.

Example:

flex_val = map(flex_val, 600, 740, 10, 170);

How It Works

1️⃣ The flex sensors act as variable resistors that change resistance when bent.
2️⃣ The Arduino reads these analog voltages and maps them to angles (10°–170°).
3️⃣ These values are wirelessly sent to the receiver using NRF24L01+.
4️⃣ The receiver Arduino translates those values into servo positions.
5️⃣ Each servo moves a finger proportionally — replicating your hand’s gesture.

Troubleshooting

✅ If servos vibrate → use a dedicated 5V 2A+ power source.
✅ If NRF24L01 communication fails → add capacitor (10µF) across VCC–GND near the module.
✅ If movement is reversed → swap min/max mapping values.
✅ If delay occurs → ensure both Arduinos use matching RF addresses.

Conclusion

You have successfully built a Wireless Gesture-Controlled Robotic Hand using Arduino and NRF24L01+. This project merges 3D printing, robotics, and wireless control into a single interactive system.

💡 Future upgrades:

  • Add Bluetooth or Wi-Fi communication
  • Implement machine learning gesture recognition
  • Control a robotic arm or humanoid robot

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir