Example Code for Arduino-Gesture Control
Last revision 2026/01/18
This blog post provides an example code and detailed instructions for setting up Arduino-based gesture control using servos, including hardware and software requirements, wiring diagrams, and how to control a bionic robot hand to display various gestures.
Hardware Preparation
- DFRduino UNO (or similar) x 1
- Gravity: IO Expansion Shield for Arduino x 1
Software Preparation
- Arduino IDE, Click to Download Arduino IDE from Arduino®
Wiring Diagram
Other Preparation Work
The servo can be connected directly to the arduino IO expansion shield or the Romeo robot microcontroller, and arduino servo library makes it easier to use. Please ensure the Arduino Servo library is installed in your Arduino IDE before uploading the code.
Sample Code
/*!
@file ROB0142.ino
@brief Bionic Robot Hand
@n [Get the module here]()
@n This example show 0-9 the 10 Numbers.
@n [Connection and Diagram]()
@copyright [DFRobot](https://www.dfrobot.com), 2017
@copyright GNU Lesser General Public License
@author: ([email protected])
@version V1.0
@date 2017-03-01
*/
#include <Servo.h>
Servo Saservo;
Servo Sbservo;
Servo Scservo;
Servo Sdservo;
Servo Seservo;
int Sa = 90; // default Position
int Sb = 50; //
int Sc = 40; //
int Sd = 50; //
int Se = 50; //
void setup()
{
Serial.begin(9600); //Serial Baudrate
Saservo.attach(8); //thumb servo
Sbservo.attach(9); //little finger servo
Scservo.attach(10); //ring finger servo
Sdservo.attach(11); //middle finger servo
Seservo.attach(12); //index finger servo
Saservo.write(90); //thumb
Sbservo.write(50); //little finger
Scservo.write(40); //ring finger
Sdservo.write(50); //middle finger
Seservo.write(50); //index finger
delay(1000);
}
void loop()
{
char cc; //
while (Serial.available() > 0) //
{
cc = Serial.read(); //
if (cc == 'a') //
{
// spread the fingers
for (Sa = 90; Sa <= 160; Sa += 1) //thumb
{
Saservo.write(Sa);
delay(15);
}
for (Sb = 50; Sb <= 150; Sb += 1) //little finger
{
Sbservo.write(Sb);
delay(15);
}
for (Sc = 40; Sc <= 130; Sc += 1) //ring finger
{
Scservo.write(Sc);
delay(15);
}
for (Sd = 50; Sd <= 150; Sd += 1) //middle finger
{
Sdservo.write(Sd);
delay(15);
}
for (Se = 50; Se <= 140; Se += 1) //index finger
{
Seservo.write(Se);
delay(15);
}
delay(1000);
//close the fingers
for (Sa = 160; Sa >= 90; Sa -= 1)
{
Saservo.write(Sa);
delay(15);
}
for (Sb = 150; Sb >= 50; Sb -= 1)
{
Sbservo.write(Sb);
delay(15);
}
for (Sc = 130; Sc >= 40; Sc -= 1)
{
Scservo.write(Sc);
delay(15);
}
for (Sd = 150; Sd >= 50; Sd -= 1)
{
Sdservo.write(Sd);
delay(15);
}
for (Se = 140; Se >= 50; Se -= 1)
{
Seservo.write(Se);
delay(15);
}
}
//9
if (cc == '9')
{
Saservo.write(90);//thumb
Sbservo.write(50);//little finger
Scservo.write(40);//ring finger
Sdservo.write(50);//middle finger
Seservo.write(110);//index finger
}
//8
if (cc == '8')
{
Saservo.write(160);//thumb
Sbservo.write(50);//little finger
Scservo.write(40);//ring finger
Sdservo.write(50);//middle finger
Seservo.write(140);//index finger
}
//7
if (cc == '7')
{
Saservo.write(160);//thumb
Sbservo.write(50);//little finger
Scservo.write(40);//ring finger
Sdservo.write(150);//middle finger
Seservo.write(140);//index finger
}
//6
if (cc == '6')
{
Saservo.write(160);//thumb
Sbservo.write(150);//little finger
Scservo.write(40);//ring finger
Sdservo.write(50);//middle finger
Seservo.write(50);//index finger
}
//5
if (cc == '5')
{
Saservo.write(160);//thumb
Sbservo.write(150);//little finger
Scservo.write(130);//ring finger
Sdservo.write(150);//middle finger
Seservo.write(140);//index finger
}
//4
if (cc == '4')
{
Saservo.write(90);//thumb
Sbservo.write(150);//little finger
Scservo.write(130);//ring finger
Sdservo.write(150);//middle finger
Seservo.write(140);//index finger
}
//3
if (cc == '3')
{
Saservo.write(90);//thumb
Sbservo.write(50);//little finger
Scservo.write(130);//ring finger
Sdservo.write(150);//middle finger
Seservo.write(140);//index finger
}
//2
if (cc == '2')
{
Saservo.write(90);//thumb
Sbservo.write(50);//little finger
Scservo.write(40);//ring finger
Sdservo.write(150);//middle finger
Seservo.write(140);//index finger
}
//1
if (cc == '1')
{
Saservo.write(90);//thumb
Sbservo.write(50);//little finger
Scservo.write(40);//ring finger
Sdservo.write(50);//middle finger
Seservo.write(140);//index finger
}
//0
if (cc == '0')
{
Saservo.write(90);//thumb
Sbservo.write(50);//little finger
Scservo.write(40);//ring finger
Sdservo.write(50);//middle finger
Seservo.write(50);//index finger
}
}
}
Result
After downloading the sample code, you can enter following characters to control the hand action:
- a: all fingers open; all fingers closed
- 0: show gesture "0"
- 1: show gesture "1"
- 2: show gesture "2"
- 3: show gesture "3"
- 4: show gesture "4"
- 5: show gesture "5"
- 6: show gesture "6"
- 7: show gesture "7"
- 8: show gesture "8"
- 9: show gesture "9"
Please be careful with the servo control, even if there is damping structures on each finger, the non-standard operation will still damage the servos.
Was this article helpful?
