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

Software Preparation

Wiring Diagram

ROB0143 Bionic Robot Hand Connection 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?

TOP