Hackster is hosting Hackster Holidays, Ep. 6: Livestream & Giveaway Drawing. Watch previous episodes or stream live on Monday!Stream Hackster Holidays, Ep. 6 on Monday!
ayooluwa98
Published © GPL3+

Sensor glove for sign language translation

A sensor glove that converts hand gestures to text and speech, which is delivered through a Bluetooth-connected Android Application.

IntermediateShowcase (no instructions)6,938
Sensor glove for sign language translation

Things used in this project

Hardware components

Arduino Nano R3
Arduino Nano R3
×1
HC-05 Bluetooth Module
HC-05 Bluetooth Module
×1
Analog Accelerometer: ADXL335
Adafruit Analog Accelerometer: ADXL335
×1
Alphanumeric LCD, 16 x 2
Alphanumeric LCD, 16 x 2
Optional
×1
Jumper wires (generic)
Jumper wires (generic)
×20
SparkFun Flex Sensors
×5
Resistor 10k ohm
Resistor 10k ohm
You can use between 10k and 47.5k ohm resistors. Note that every different resistor value results in different analog values you read from the voltage divider.
×5
Solderless Breadboard Full Size
Solderless Breadboard Full Size
Optional but recommended
×1
USB-A to Micro-USB Cable
USB-A to Micro-USB Cable
Depending on the connector on your Nano, use the preferred scale for USB connection to your computer
×1
Inertial Measurement Unit (IMU) (6 deg of freedom)
Inertial Measurement Unit (IMU) (6 deg of freedom)
I say go for this instead of the accelerometer due to better features for position and movement sensing accuracy. This means though, you will have to find a way to incorporate it yourself.
×1

Software apps and online services

MIT App Inventor 2
MIT App Inventor 2
Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
Solder Wire, Lead Free
Solder Wire, Lead Free
PCB Holder, Soldering Iron
PCB Holder, Soldering Iron
Hot glue gun (generic)
Hot glue gun (generic)

Story

Read more

Schematics

Circuit diagram

This circuit diagram was made on fritzing and shows how the components are connected together.
Note that the use of an LCD is a choice you should make. Even though I included an LCD in my circuit diagram, I did not incorporate it into my final prototype and ended up using only the Android app I developed.
Finally, I used an Arduino Mega in the circuit diagram but used a Nano in the final prototype

Circuit Schematic

This Schematic shows a general overview of how components are connected. It was designed with fritzing

Code

Code for Operation

Arduino
Make necessary adjustments you need, then upload the code to the Arduino Nano
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX

  const int flex1 = A0;
  const int flex2 = A1;
  const int flex3 = A2;
  const int xpin = A3;                  // x-axis of the accelerometer
  const int ypin = A4;                  // y-axis
  const int zpin = A5;                  // z-axis (only on 3-axis models)


void setup() {
  // put your setup code here, to run once:
 Serial.begin(9600);
 mySerial.begin(9600);
 delay(15000);
}

void loop() {
  // put your main code here, to run repeatedly:
  int x = analogRead(xpin);
  delay(50);

  int y = analogRead(ypin);
  delay(50);

  int z = analogRead(zpin);
  delay(50);
  int thumb;
  int pointer;
  int middle;
  int nomx;
  int nomy;
  int nomz;
  
  thumb = analogRead(flex1);
  pointer = analogRead(flex2);
  middle = analogRead(flex3);
  nomx = x-265;
  nomy = y-253;
  nomz = z-323;

 
  Serial.print(thumb);
   Serial.print("\t");
  Serial.print(pointer);
   Serial.print("\t");
  Serial.print(middle);
   Serial.print("\t");
  Serial.print(nomx);
  Serial.print("\t");
  Serial.print(nomy);
  Serial.print("\t");
  Serial.print(nomz);
  Serial.print("\n");
  Serial.println("");
  delay(500);


   //group1
  if ((thumb > 175)  && (thumb < 210) && (pointer > 210) && (pointer < 235) && (nomy > 75) && (nomy < 95))  {
    mySerial.print("LOOK FORWARD");
    }
    else if ((thumb > 175)  && (thumb < 200) && (pointer > 210) && (pointer < 235) && (nomy > 160) && (nomy < 175))  {
    mySerial.print("LOOK DOWN");
    }
    else if ((thumb > 175)  && (thumb < 200) && (pointer > 210) && (pointer < 230)&& (nomy > 20) && (nomy < 35))  {
    mySerial.print("LOOK UP");
    }

  //group2
   else if ((thumb > 160)  && (thumb < 195) &&(pointer > 160) && (pointer < 200) && (nomy > 28) && (nomy < 43))  {
    mySerial.print("OKAY");
  }
  else if ((thumb > 190)  && (thumb < 210) && (pointer > 180) && (pointer < 200) && (nomy > 160) && (nomy < 180))  {
    mySerial.print("HOLD");
    }
    else if ((thumb > 160)  && (thumb < 200) &&(pointer > 160) && (pointer < 190) && (nomy > 60) && (nomy < 75))  {
    mySerial.print("PRONTO");
  }

   //group3
    else if ((thumb > 230)  && (thumb < 250) && (pointer > 150) && (pointer < 180) && (nomy >80) && (nomy < 100))  {
    mySerial.print("CALL ME");
    }
    else if ((thumb > 230)  && (thumb < 250) && (pointer > 150) && (pointer < 180) && (nomy >105) && (nomy < 125))  {
    mySerial.print("THUMBS DOWN");
    }
    else if ((thumb > 230)  && (thumb < 250) && (pointer > 150) && (pointer < 189) && (nomy >58) && (nomy < 70))  {
    mySerial.print("I LOVE YOU");
    }
    else if ((thumb > 230)  && (thumb < 250) && (pointer > 220) && (pointer < 235) && (nomy > 80) && (nomy < 105))  {
    mySerial.print("GIVE ME");
    }
    else if ((thumb > 175)  && (thumb < 195) && (pointer > 170) && (pointer < 190) && (nomy > 90) && (nomy < 110))  {
    mySerial.print("GIVE ME SOME");
    }     
  else{
    mySerial.print("...");
  }
  }

Credits

ayooluwa98

ayooluwa98

1 project • 5 followers

Comments