Om Anavekar
Published © GPL3+

Gestr: A Smart Glove for Speech Impairments

Gestr is a sensor-equipped glove which can convert hand gestures and signals to spoken text for people with speech impairments.

IntermediateFull instructions provided3 hours5,641
Gestr: A Smart Glove for Speech Impairments

Things used in this project

Hardware components

NodeMCU ESP8266 Breakout Board
NodeMCU ESP8266 Breakout Board
This is the microcontroller and the brains of this project. It has the ability to connect to WiFi, which makes it very useful in home automation applications and in projects like this one, as WiFi control can be implemented into this project.
×1
DFRobot DFplayer
This component allows mp3 files to be played by the Node-MCU.
×1
Flex Sensor
These sensors measure bending, similar to how an LDR (Light Dependent Resistor), measure light levels. These are used to measure finger bending and hand gestures.
×1
4051 Multiplexer
Since the Node-MCU only has one analog port, this IC is used to "split" the analog pin into several, which are connected to the flex sensors. More on this later.
×1
Custom PCB
Custom PCB
×1
Glove
×1
16 Pin Ribbon Cable
×1
Speaker: 0.25W, 8 ohms
Speaker: 0.25W, 8 ohms
This allows the glove to "speak" the commands.
×1
Male-Header 16 Position 2 Row Right Angle
×1
Resistor 10k ohm
Resistor 10k ohm
These resistors are needed for each of the Flex Sensors.
×5
DIP 16 IC Socket
These Following components are optional. They are only needed if you are planning to solder your chips to the PCB with the intent of replacing them. It is a good idea to have them though!
×1
Female Header 8 Position 1 Row (0.1")
Female Header 8 Position 1 Row (0.1")
×2
Female Header 15 Position 1 Row (0.1")
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

3D Printer (generic)
3D Printer (generic)
Laser cutter (generic)
Laser cutter (generic)
This is optional; I used this to cut the acrylic back panel on the bottom of the device.
Soldering iron (generic)
Soldering iron (generic)
Hot glue gun (generic)
Hot glue gun (generic)

Story

Read more

Custom parts and enclosures

Gestr Enclosure Bottom

Gestr Enclosure Top

Gestr Speaker Holder

Gestr Bottom Window

Schematics

Gestr Schematic

Gestr PCB

Code

Gestr Code

Arduino
This code is able to convert hand gestures to spoken text.
#include <DFPlayer_Mini_Mp3.h>
#include <SoftwareSerial.h>
#include <Wire.h>  

#define PIN_BUSY D0

SoftwareSerial mp3Serial(D1, D2); // RX, TX

const int MUX_A = D5;
const int MUX_B = D6;
const int MUX_C = D7;

const int ANALOG_INPUT = A0;

int valueF1 = 0;
int valueF2 = 0;
int valueF3 = 0;
int valueF4 = 0;
int valueF5 = 0;

void setup() {
  
  pinMode(MUX_A, OUTPUT);
  pinMode(MUX_B, OUTPUT);     
  pinMode(MUX_C, OUTPUT);

  Serial.begin(115200);

  pinMode(PIN_BUSY, INPUT);
  Serial.begin (115200);
  Serial.println("Setting up software serial");
  mp3Serial.begin (9600);
  Serial.println("Setting up mp3 player");
  mp3_set_serial (mp3Serial);  
  delay(1000); 
  mp3_set_volume (20);
}


void changeMux(int c, int b, int a) {
  digitalWrite(MUX_A, a);
  digitalWrite(MUX_B, b);
  digitalWrite(MUX_C, c);
}
void readValues() {
  float value;
  changeMux(HIGH, LOW, LOW);
  valueF1 = analogRead(ANALOG_INPUT); 
  Serial.print("F1: "); Serial.print(valueF1); Serial.print(" ");

  changeMux(LOW, LOW, HIGH);
  valueF2 = analogRead(ANALOG_INPUT); 
  Serial.print("F2: "); Serial.print(valueF2); Serial.print(" ");

  changeMux(LOW, HIGH, LOW);
  valueF3 = analogRead(ANALOG_INPUT); 
  Serial.print("F3: "); Serial.print(valueF3); Serial.print(" ");

  changeMux(LOW, HIGH, HIGH);
  valueF4 = analogRead(ANALOG_INPUT); 
  Serial.print("F4: "); Serial.print(valueF4); Serial.print(" ");

  changeMux(LOW, LOW, LOW);
  valueF5 = analogRead(ANALOG_INPUT); 
  Serial.print("F5: "); Serial.print(valueF5); Serial.println(" ");

  delay(200);
  
}

void loop() {
  readValues();
  if (valueF5 <= 60 && valueF5 > 40) {
       Serial.println("Stop");
  mp3_play (1);
  Serial.print("Busy: ");
  Serial.println(digitalRead(PIN_BUSY));
  delay(500);
  delay (1000);
  }
  
  if (valueF5 <= 40 && valueF4 <=40) {
       Serial.println("Stop");
  mp3_play (2);
  Serial.print("Busy: ");
  Serial.println(digitalRead(PIN_BUSY));
  delay(500);
  delay (1000);
  }

    if (valueF1 <= 40 && valueF5 <=40) {
       Serial.println("Stop");
  mp3_play (3);
  Serial.print("Busy: ");
  Serial.println(digitalRead(PIN_BUSY));
  delay(500);
  delay (1000);
  }


  if (valueF2 <= 40 && valueF3 <=40 && valueF4 <=40) {
       Serial.println("Stop");
  mp3_play (4);
  Serial.print("Busy: ");
  Serial.println(digitalRead(PIN_BUSY));
  delay(500);
  delay (1000);
  }


  if (valueF3 <= 40 && valueF4 <=40) {
       Serial.println("Stop");
  mp3_play (5);
  Serial.print("Busy: ");
  Serial.println(digitalRead(PIN_BUSY));
  delay(500);
  delay (1000);
  }



}

Credits

Om Anavekar

Om Anavekar

1 project • 5 followers

Comments