Introduction: GESTURE VOCALIZER FOR DEAF & MUTE PEOPLE INTERACTION

Introduction

Digital vocalizer is a project for social purpose. we are trying to implement a system which make a communication gap between deaf peoples and hearing people as less as possible. Deaf people make use of sign language or gestures to make understand what he/she trying to say but it is impossible to understand by hearing people. So, that we come on conclusion to make a simple prototype by taking some of those gesture and convert it into audio and visual form so that they can understand by everyone. For that we are making use of arduino UNO Board as Atmega 328 Controller board to interface all of the sensors and actuators.

Basically an Artificial Neural Network is the concept of our prototype. Some sensors are placed on the hand of deaf people which converts the parameter like finger bend hand position angle into electrical signal and provide it to Atmega 328 controller and controller take action according to the sign.

Advantages of innovation

1. It is a social cause project

2. Deaf people can easily communicate with normal people

3. Easy to implement

4. Easy to make change of sensor windows according to wearing hand

5. Portable design works on 9V small Radio battery

6. Audio as well as Visual output

Limitations of innovations

1. Currently due to cost of sensors and funds limitation we choose limited gestures which can perform by single hand

Step 1: Electronics We Required

We have divided our project in three parts for simplicity

· Sensor board

For this we required two type of sensors and following components

1. Flex sensors 2 unit to measure bend of fingers

2. ADXL 335 to get x and y axis x coordinates of hand

3. 10K ohms resistance 2 unit to form voltage divider bias with flex sensor

4. small PCB (copper clad 2 inch X 2 inch) to build sensor circuit

5. Bug strips for connections

· Controller Section

We try to implement this prototype using two methods using Arduino UNO board and another by making own breakout board for Atmega 328 but we are still using Arduino UNO to burn bootloader and uploading a code in Atmega 328.

so here we required

1. Arduino UNO

2. Atmega 328p-pu

3. 22p F Capacitors 2 unit Filter capacitor for crystal

4. 16 MHz Crystal Oscillator 1 unit Operating frequency for Atmega 328

5. 10K Ohms resistance 1 unit reset resistor

6. Reset button 1 unit to reset Atmega 328

7. Bug strips for connections

8. 7805 5V voltage regulator to get 5V regulated voltage from 9V battery

9. BC 547 npn Transistors 8 unit to control channels of Audio processor IC

10. 1K Ohms resistance 8 unit to connect port pin of Atmega 328 to base of transistor

· Audio Processing and LCD unit

1. APR 33A3 Audio processor store and playback sound 1unit

2. LCD 16X2 1unit to display message

3. Microphone 1unit to record audio message

4. Speaker 16 Ohms 1unit to play audio signal

5. 10K Ohms Potentiometer 1unit to control brightness of LCD

6. And all miscellaneous components to support APR 33A3

· 47K Ohms resistance

· 4.7K Ohms resistance

· 100K Ohms resistance

· 470 Ohms Resistance

· 1nF Capacitor

· 100nF Capacitor

· 100 micro F Capacitor Electrolytic

· 10 micro F Capacitor

· 1 micro F Capacitor

· Wires for connections

for miscellaneous component quantity please follow circuit diagram or data sheet of APR 33A3

Step 2: Make Hardware Ready....

Pcb designing carried out with PCB WIZARD software ,you can download

software from this link http://pcb-wizard.software.informer.com/4.0/

PCB WIZARD is simplest one software to design circuit, even beginner can use it directly because this software is very much user friendly ..... it has number of function which is reduced time consumption to design circuit like DRAG and Drop option ....

Once circuit design completed, we have attached the .pcb file a designed PCB

Take print out of the Art work of that circuit layout on Photo paper or glossy paper then trace the printed art work of circuit on copper clad board by ironing process,

During ironing process you must pay attention that all art work of circuit layout should traced completely on copper clad board , after tracing art work of circuit layout on copper clad completely, make solution of Fecl3 with water and keep it traced copper clad into that solution about 30 to 40 minutes ...... during this process you should continuously check the copper clad within some interval, copper of copper clad board should disappear except traced part of art work of circuit layout...... means only circuit should remain...

Once it complete take out board from solution then clean it and polish with sand paper for drilling , after drilling holes apply soldering flux and complete tinning process with the help of soldering iron after tinning start mounting component and soldering operation .........

Use images to follow all processes and position of each components.

Please follow the circuit diagram to make your own PCB.

If we are using Arduino UNO on the place of own made breakout board then only Atmega 328 controller section get neglected rest of connections are same and connect it on Arduino UNO.

Step 3: Burning Bootloader in ATmega 328, 168, 8

Guys here we learn to burn bootloader on blank ATmega 328/168/8 chips using Arduino IDE and Arduino UNO.

So, what we need

1 Step Connect Hardware

Breakout board for blank chip of ATmega 328/168/8

Here we can make connections on breadboard also as your choice I suggest make one special board so that no need to do same process again and again just save your time. Make connections same as shown in figure 1

Watch figure 2 This is my board which I used to burn bootloader.

Just be alert while buying your ATmega 328 Blank chip

ATMega328P-PU

ATMega328-PU

As you may have notice, the difference between this is just a mere P after the 328. This P means pico for pico power which is a technology ATMEL has developed that allows the microcontroller to run with less power.

That dosent matter for small application but guys while burning bootloader every chip has its unique key signature so need to edit that key signature before burning bootloader.

so what are those key signatures for this ICs

ATmega328 0x1E 0x95 0x14

ATmega328P 0x1E 0x95 0x0F

So we need to change those signatures before burning bootloader follow basic steps for that

· Navigate to ...\arduino-1.0.5\hardware\tools\avr\etc

· Make a backup copy of the file: avrdude.conf

· Open the file avrdude.conf in a text editor

· Search for: “0x1e 0x95 0x0F” (this is the ATmega328P signature)

· Replace it with: “0x1e 0x95 0x14” (this is the ATmega328 signature)

· Save the file

· Restart the Arduino IDE

· Continue with the rest of the steps of bootloding, and once bootloading is complete restore the backup copy you made.

Make Connections same as show in figure 3

Now we are complete with hardware setup

2 Step Preparing the software

Open Arduino IDE make sure that u have changed your signature as per targeted AVR ATmega

1. Open Arduino IDE

2. File > Examples > Arduino ISP

3. Select Arduino328 from Tools > Board

4. Select your serial port .

5. Burn in your Arduino board.

6. Select Arduino as ISP from Tools > Programmer

7. Select Burn Bootloader

Step 4: Uploading Code and Make It RUN

Upload the following code with Arduino UNO in our boot loaded chip (Atmega 328)

//GESTURE
VOCALIZER FOR MUTE PEOPLE INTERACTION

#include

// guys download this library from arduino.cc

LiquidCrystal lcd(13, 12, 11, 10, 9, 8); // Check circuit diagram for pin connections

void setup()

{

lcd.begin(16, 2);

}

void loop()

{

lcd.clear();

int val0 = analogRead(0); // read the input pin flex sensor pin 1

val0 = map(val0, 465, 590, 0, 9); // convert it into window of 0 to 9

int val1 = analogRead(1); // read the input pin flex sensor pin 2

val1 = map(val1, 435, 535, 0, 9);

// read the input pin

int val2 = analogRead(2); // read the input pin X axis pin

val2 = map(val2, 260, 415, 0, 9);

int val3 = analogRead(3); // read the input pin y axis pin

val3 = map(val3, 260, 420, 0, 9);

if (val0>=0 && val0<=0 && val1>=3 && val1<=4 && val2>=7 && val2<=8 && val3>=4 && val3<=5) // match the signs to standard store values values depend on wearing hands

{

lcd.print("I am __________________"); // Show message on LCD

digitalWrite(0,HIGH ); // select voice command 1 on APR 33A3

digitalWrite(1,LOW );

digitalWrite(2, LOW);

digitalWrite(3, LOW);

digitalWrite(4, LOW);

digitalWrite(5, LOW);

digitalWrite(6, LOW);

digitalWrite(7, LOW);

delay (100);

digitalWrite(0, LOW); // make it off

digitalWrite(1,LOW );

digitalWrite(2, LOW);

digitalWrite(3, LOW);

digitalWrite(4, LOW);

digitalWrite(5, LOW);

digitalWrite(6, LOW);

digitalWrite(7,LOW);

delay(5000);

}

else if (val0>=6 && val0<=7 && val1>=1 && val1<=2 && val2>=7 && val2<=8 && val3>=2 && val3<=3)

{

lcd.print("sorry");

digitalWrite(0,LOW ); // select voice command 2 on APR 33A3

digitalWrite(1,HIGH);

digitalWrite(2, LOW);

digitalWrite(3, LOW);

digitalWrite(4, LOW);

digitalWrite(5, LOW);

digitalWrite(6, LOW);

digitalWrite(7, LOW);

delay (100);

digitalWrite(0, LOW);

digitalWrite(1,LOW );

digitalWrite(2, LOW);

digitalWrite(3, LOW);

digitalWrite(4, LOW);

digitalWrite(5, LOW);

digitalWrite(6, LOW);

digitalWrite(7,LOW);

delay(5000);

}

else if (val0>=-1 && val0<=0 && val1>=3 && val1<=4 && val2>=1 && val2<=3 && val3>=0 && val3<=2)

{

lcd.print("Hello");

digitalWrite(0,LOW ); // select voice command 3 on APR 33A3

digitalWrite(1,LOW );

digitalWrite(2, HIGH);

digitalWrite(3, LOW);

digitalWrite(4, LOW);

digitalWrite(5, LOW);

digitalWrite(6, LOW);

digitalWrite(7, LOW);

delay (100);

digitalWrite(0, LOW);

digitalWrite(1,LOW );

digitalWrite(2, LOW);

digitalWrite(3, LOW);

digitalWrite(4, LOW);

digitalWrite(5, LOW);

digitalWrite(6, LOW);

digitalWrite(7,LOW);

delay(5000);

}

else if (val0>=0 && val0<=0 && val1>=0 && val1<=1 && val2>=5 && val2<=6 && val3>=-0 && val3<=1)

{

lcd.print("Thank You");

digitalWrite(0,LOW ); // select voice command 4 on APR 33A3

digitalWrite(1,LOW );

digitalWrite(2, LOW);

digitalWrite(3, HIGH);

digitalWrite(4, LOW);

digitalWrite(5, LOW);

digitalWrite(6, LOW);

digitalWrite(7, LOW);

delay (100);

digitalWrite(0, LOW);

digitalWrite(1,LOW );

digitalWrite(2, LOW);

digitalWrite(3, LOW);

digitalWrite(4, LOW);

digitalWrite(5, LOW);

digitalWrite(6, LOW);

digitalWrite(7,LOW);

delay(5000);

}

else if (val0>=2 && val0<=3 && val1>=1 && val1<=1 && val2>=3 && val2<=5 && val3>=1 && val3<=2)

{

lcd.print("drink");

digitalWrite(0,LOW ); // select voice command 5 on APR 33A3

digitalWrite(1,LOW );

digitalWrite(2, LOW);

digitalWrite(3, LOW);

digitalWrite(4, HIGH);

digitalWrite(5, LOW);

digitalWrite(6, LOW);

digitalWrite(7, LOW);

delay (100);

digitalWrite(0, LOW);

digitalWrite(1,LOW );

digitalWrite(2, LOW);

digitalWrite(3, LOW);

digitalWrite(4, LOW);

digitalWrite(5, LOW);

digitalWrite(6, LOW);

digitalWrite(7,LOW);

delay(5000);

}

else if (val0>=4 && val0<=5 && val1>=2 && val1<=3 && val2>=4 && val2<=6 && val3>=0 && val3<=2)

{

lcd.print("beautiful");

digitalWrite(0,LOW ); // select voice command 6 on APR 33A3

digitalWrite(1,LOW );

digitalWrite(2, LOW);

digitalWrite(3, LOW);

digitalWrite(4, LOW);

digitalWrite(5, HIGH);

digitalWrite(6, LOW);

digitalWrite(7, LOW);

delay (100);

digitalWrite(0, LOW);

digitalWrite(1,LOW );

digitalWrite(2, LOW);

digitalWrite(3, LOW);

digitalWrite(4, LOW);

digitalWrite(5, LOW);

digitalWrite(6, LOW);

digitalWrite(7,LOW);

delay(5000);

}

else if (val0>=0 && val0<=0 && val1>=4 && val1<=6 && val2>=4 && val2<=5 && val3>=1 && val3<=2)

{

lcd.print("bye");

digitalWrite(0,LOW ); // select voice command 7 on APR 33A3

digitalWrite(1,LOW );

digitalWrite(2, LOW);

digitalWrite(3, LOW);

digitalWrite(4, LOW);

digitalWrite(5, LOW);

digitalWrite(6, HIGH);

digitalWrite(7, LOW);

delay (100);

digitalWrite(0, LOW);

digitalWrite(1,LOW );

digitalWrite(2, LOW);

digitalWrite(3, LOW);

digitalWrite(4, LOW);

digitalWrite(5, LOW);

digitalWrite(6, LOW);

digitalWrite(7,LOW);

delay(5000);

}

else if (val0>=0 && val0<=1 && val1>=0 && val1<=1 && val2>=7 && val2<=8 && val3>=1 && val3<=2)

{

lcd.print("sick");

digitalWrite(0,LOW ); // select voice command 8 on APR 33A3

digitalWrite(1,LOW );

digitalWrite(2, LOW);

digitalWrite(3, LOW);

digitalWrite(4, LOW);

digitalWrite(5, LOW);

digitalWrite(6, LOW);

digitalWrite(7, HIGH);

delay (100);

digitalWrite(0, LOW);

digitalWrite(1,LOW );

digitalWrite(2, LOW);

digitalWrite(3, LOW);

digitalWrite(4, LOW);

digitalWrite(5, LOW);

digitalWrite(6, LOW);

digitalWrite(7,LOW);

delay(5000);

}

else

{

lcd.print(" System on "); // inital message

digitalWrite(0, LOW);

digitalWrite(1,LOW );

digitalWrite(2, LOW);

digitalWrite(3, LOW);

digitalWrite(4, LOW);

digitalWrite(5, LOW);

digitalWrite(6, LOW);

digitalWrite(7,LOW);

}

delay(200); // delay of 200 msec

}

Step 5: Guys Its Working ........ ;) ;0 :)

Tech Contest

Participated in the
Tech Contest

Microcontroller Contest

Participated in the
Microcontroller Contest