Introduction: Gesture,Voice,joystick Based Wheelchair for Disabled People !
Electronic wheelchairs are important locomotion devices for disabled and senior people, and they are becoming even more important in our aging society. Therefore safer and more comfortable "intelligent wheelchairs" are expected to be developed for practical use. Usually, the control of wheelchair is realized by pushing a joystick to the direction to move toward, but quick and safe operation is needed to cope with the surrounding dynamic environments. here we have also implemented voice based wireless Home appliances control which will help them to switch on/off easily without need of any other person.
Step 1: Block Diagram - TX1
Here Transmitter section is Mounted on to the person as Wearable device it is battery operated, it has Arduino, joystick, accelerometer, RF433mhz (Tx)and voice recognition module .
Step 2: Block Diagram-RX1
It is a wheelChair's Electronics section ! to control the motor of chair it has L293D motor driver , arduino and to receive the signals it also has RF 433mhz module (Rx)..
Step 3: Block Diagram of Relay Section
it has 4 channel relay module and RF433mhz (RX-2) ,
note : this is different Receiver ,than the one which is mentioned earlier .
we have to use RF module with address selection option !! (if you don't get it look at the picture in further steps)
note : this is different Receiver ,than the one which is mentioned earlier .
we have to use RF module with address selection option !! (if you don't get it look at the picture in further steps)
Step 4: Components Used !
###### Hardware ####
Arduino -3
Voice recognition module-1
mic-1
RF433mhz module -2pair
2axis Joystick -1
Adxl335 -1
200rpm motor-1
Chasis-1
L293D module-1
jumpers
FTDI converter (to record voice)
wheels
#### Software ####
Arduino IDE
Access Port (to record commands)
Arduino -3
Voice recognition module-1
mic-1
RF433mhz module -2pair
2axis Joystick -1
Adxl335 -1
200rpm motor-1
Chasis-1
L293D module-1
jumpers
FTDI converter (to record voice)
wheels
#### Software ####
Arduino IDE
Access Port (to record commands)
Step 5: Circuit Connection
Make all the connections as shown in the Circuit diagram !
Step 6: Code for Tx1 :- Adxl335 and Joystick
Accelerometer and Joystick
int inPin = 10; // the number of the input pin
int outPin = 13; // the number of the output pin
int state = HIGH; // the current state of the output pin
int reading; // the current reading from the input pin
int previous = LOW; // the previous reading from the input pin
byte com=0;
int gndpin = A6;
//const int xpin = A2; // x-axis of the accelerometer
//const int ypin = A3; //y-axis of the accelerometer
int xpin = A0; // j x
int ypin =A1; // j y
int x = 0;
int y = 0;
long time = 0; // the last time the output pin was toggled
long debounce = 200; // the debounce time, increase if the output flickers
void setup()
{
pinMode(inPin, INPUT);
pinMode(outPin, OUTPUT);
pinMode(gndpin, OUTPUT);
digitalWrite(gndpin, LOW);
pinMode(5,OUTPUT); // a11 of RF tx 1
pinMode(4,OUTPUT); //a10
pinMode(3,OUTPUT); // a9
pinMode(2,OUTPUT); // a8
// pinMode( 6 , OUTPUT);
// pinMode( 7 , OUTPUT);
// pinMode( 8 , OUTPUT);
// pinMode( 9 , OUTPUT);
Serial.begin(9600);
}
void loop()
{
reading = digitalRead(inPin);
delay(200);
if (reading == HIGH && previous == LOW && millis() - time > debounce) {
if (state == HIGH)
state = LOW;
else
state = HIGH;
time = millis();
}
digitalWrite(outPin, state);
previous = reading;
if(digitalRead (outPin) == HIGH)
{
if( (analogRead(ypin)>400)&&(analogRead(xpin) Serial.println('1');
digitalWrite(2,LOW); //5
digitalWrite(3,HIGH); //6
digitalWrite(4,HIGH); //10
digitalWrite(5,LOW); //11
}
else if( (analogRead(ypin)940)&&(analogRead(ypin)>400) ){ // backward
Serial.println('2');
digitalWrite(2,HIGH); //5
digitalWrite(3,LOW); //6
digitalWrite(4,LOW); //10
digitalWrite(5,HIGH); //11
}
else if(( analogRead(ypin)400)&&(analogRead(xpin) Serial.println('4');
digitalWrite(2,LOW); //5
digitalWrite(3,LOW); //6
digitalWrite(4,LOW); //10
digitalWrite(5,HIGH); //11
}
else if(( analogRead(ypin)>900)&&(analogRead(xpin)400)) { // right
Serial.println('6');
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
}
else if( (analogRead(ypin)>400)&&(analogRead(xpin)440)) { // stop
Serial.println('0');
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
}
}
else if(digitalRead (outPin) == LOW)
{
x = analogRead(A4);
y = analogRead(A5);
delay(200);
if( ( (x240)) && ((y>300)&& (y {
Serial.println('1');
digitalWrite(2,LOW); //5
digitalWrite(3,HIGH); //6
digitalWrite(4,HIGH); //10
digitalWrite(5,LOW); //11
}
else if( ( (x360)) && ((y>305)&& (y {
Serial.println('2');
digitalWrite(2,HIGH); //5
digitalWrite(3,LOW); //6
digitalWrite(4,LOW); //10
digitalWrite(5,HIGH); //11
}
else if( ( (y370)) && ((x>320)&& (x Serial.println('4');
digitalWrite(2,LOW); //5
digitalWrite(3,LOW); //6
digitalWrite(4,LOW); //10
digitalWrite(5,HIGH); //11
}
else if ( ( (x280)) && ((y>240)&& (y {
Serial.println('6');
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
}
else if ( ( (x300)) && ((y>300)&& (y {
Serial.println('0');
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
}
}
}
int inPin = 10; // the number of the input pin
int outPin = 13; // the number of the output pin
int state = HIGH; // the current state of the output pin
int reading; // the current reading from the input pin
int previous = LOW; // the previous reading from the input pin
byte com=0;
int gndpin = A6;
//const int xpin = A2; // x-axis of the accelerometer
//const int ypin = A3; //y-axis of the accelerometer
int xpin = A0; // j x
int ypin =A1; // j y
int x = 0;
int y = 0;
long time = 0; // the last time the output pin was toggled
long debounce = 200; // the debounce time, increase if the output flickers
void setup()
{
pinMode(inPin, INPUT);
pinMode(outPin, OUTPUT);
pinMode(gndpin, OUTPUT);
digitalWrite(gndpin, LOW);
pinMode(5,OUTPUT); // a11 of RF tx 1
pinMode(4,OUTPUT); //a10
pinMode(3,OUTPUT); // a9
pinMode(2,OUTPUT); // a8
// pinMode( 6 , OUTPUT);
// pinMode( 7 , OUTPUT);
// pinMode( 8 , OUTPUT);
// pinMode( 9 , OUTPUT);
Serial.begin(9600);
}
void loop()
{
reading = digitalRead(inPin);
delay(200);
if (reading == HIGH && previous == LOW && millis() - time > debounce) {
if (state == HIGH)
state = LOW;
else
state = HIGH;
time = millis();
}
digitalWrite(outPin, state);
previous = reading;
if(digitalRead (outPin) == HIGH)
{
if( (analogRead(ypin)>400)&&(analogRead(xpin) Serial.println('1');
digitalWrite(2,LOW); //5
digitalWrite(3,HIGH); //6
digitalWrite(4,HIGH); //10
digitalWrite(5,LOW); //11
}
else if( (analogRead(ypin)940)&&(analogRead(ypin)>400) ){ // backward
Serial.println('2');
digitalWrite(2,HIGH); //5
digitalWrite(3,LOW); //6
digitalWrite(4,LOW); //10
digitalWrite(5,HIGH); //11
}
else if(( analogRead(ypin)400)&&(analogRead(xpin) Serial.println('4');
digitalWrite(2,LOW); //5
digitalWrite(3,LOW); //6
digitalWrite(4,LOW); //10
digitalWrite(5,HIGH); //11
}
else if(( analogRead(ypin)>900)&&(analogRead(xpin)400)) { // right
Serial.println('6');
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
}
else if( (analogRead(ypin)>400)&&(analogRead(xpin)440)) { // stop
Serial.println('0');
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
}
}
else if(digitalRead (outPin) == LOW)
{
x = analogRead(A4);
y = analogRead(A5);
delay(200);
if( ( (x240)) && ((y>300)&& (y {
Serial.println('1');
digitalWrite(2,LOW); //5
digitalWrite(3,HIGH); //6
digitalWrite(4,HIGH); //10
digitalWrite(5,LOW); //11
}
else if( ( (x360)) && ((y>305)&& (y {
Serial.println('2');
digitalWrite(2,HIGH); //5
digitalWrite(3,LOW); //6
digitalWrite(4,LOW); //10
digitalWrite(5,HIGH); //11
}
else if( ( (y370)) && ((x>320)&& (x Serial.println('4');
digitalWrite(2,LOW); //5
digitalWrite(3,LOW); //6
digitalWrite(4,LOW); //10
digitalWrite(5,HIGH); //11
}
else if ( ( (x280)) && ((y>240)&& (y {
Serial.println('6');
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
}
else if ( ( (x300)) && ((y>300)&& (y {
Serial.println('0');
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
}
}
}
Step 7: Code for Voice Recognition and Relay
Voice recognition
To Record commands Refer my Instructable on Geetech Voice module !!
// the previous reading from the input pin
byte com=0;
// the debounce time, increase if the output flickers
void setup()
{
pinMode(3, OUTPUT);
pinMode( 4 , OUTPUT);
pinMode( 5 , OUTPUT);
pinMode( 6 , OUTPUT);
Serial.begin(9600);Serial.write(0xAA);
Serial.write(0x37);
delay(1000);
Serial.write(0xAA);
Serial.write(0x21);
}
void loop()
{
while(Serial.available())
{
com = Serial.read();
switch(com)
{
case 0x11:
digitalWrite(3, HIGH);
break;
case 0x12:
digitalWrite(4, HIGH);
break;
case 0x13:
digitalWrite(5, HIGH);
break;
case 0x14:
digitalWrite(6, HIGH);
break;
case 0x15:
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);digitalWrite(6, LOW);
break;
}
}
}
To Record commands Refer my Instructable on Geetech Voice module !!
// the previous reading from the input pin
byte com=0;
// the debounce time, increase if the output flickers
void setup()
{
pinMode(3, OUTPUT);
pinMode( 4 , OUTPUT);
pinMode( 5 , OUTPUT);
pinMode( 6 , OUTPUT);
Serial.begin(9600);Serial.write(0xAA);
Serial.write(0x37);
delay(1000);
Serial.write(0xAA);
Serial.write(0x21);
}
void loop()
{
while(Serial.available())
{
com = Serial.read();
switch(com)
{
case 0x11:
digitalWrite(3, HIGH);
break;
case 0x12:
digitalWrite(4, HIGH);
break;
case 0x13:
digitalWrite(5, HIGH);
break;
case 0x14:
digitalWrite(6, HIGH);
break;
case 0x15:
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);digitalWrite(6, LOW);
break;
}
}
}
Step 8: Code for Wheelchair !!
Robot code
/*
*
*
*
*
*/
#define m11 5
#define m12 6
#define m21 10
#define m22 11
#define D0 3
#define D1 4
#define D2 7
#define D3 8
void forward()
{
digitalWrite(m11, LOW);
digitalWrite(m12, HIGH);
digitalWrite(m21, HIGH);
digitalWrite(m22, LOW);
}
void backward()
{
digitalWrite(m11, HIGH);
digitalWrite(m12, LOW);
digitalWrite(m21, LOW);
digitalWrite(m22, HIGH);
}
void left()
{
digitalWrite(m11, HIGH);
digitalWrite(m12, HIGH);
digitalWrite(m21, HIGH);
digitalWrite(m22, LOW);
}
void right()
{
digitalWrite(m11, LOW);
digitalWrite(m12, HIGH);
digitalWrite(m21, HIGH);
digitalWrite(m22, HIGH);
}
void Stop()
{
digitalWrite(m11, HIGH);
digitalWrite(m12, HIGH);
digitalWrite(m21, HIGH);
digitalWrite(m22, HIGH);
}
void setup()
{
pinMode(D0, INPUT);
pinMode(D1, INPUT);
pinMode(D2, INPUT);
pinMode(D3, INPUT);
pinMode(m11, OUTPUT);
pinMode(m12, OUTPUT);
pinMode(m21, OUTPUT);
pinMode(m22, OUTPUT);
}
void loop()
{
int temp1=digitalRead(D0);
int temp2=digitalRead(D1);
int temp3=digitalRead(D2);
int temp4=digitalRead(D3);
if(temp1==0 && temp2==1 && temp3==1 && temp4==0)
forward();
else if(temp1==0 && temp2==0 && temp3==0 &&
temp4==1)
left();
else if(temp1==0 && temp2==1 && temp3==1 &&
temp4==1)
right();
else if(temp1==1 && temp2==0 && temp3==0 &&
temp4==1)
backward();
else if(temp1==1 && temp2==1 && temp3==1 &&
temp4==1)
Stop();
}
/*
*
*
*
*
*/
#define m11 5
#define m12 6
#define m21 10
#define m22 11
#define D0 3
#define D1 4
#define D2 7
#define D3 8
void forward()
{
digitalWrite(m11, LOW);
digitalWrite(m12, HIGH);
digitalWrite(m21, HIGH);
digitalWrite(m22, LOW);
}
void backward()
{
digitalWrite(m11, HIGH);
digitalWrite(m12, LOW);
digitalWrite(m21, LOW);
digitalWrite(m22, HIGH);
}
void left()
{
digitalWrite(m11, HIGH);
digitalWrite(m12, HIGH);
digitalWrite(m21, HIGH);
digitalWrite(m22, LOW);
}
void right()
{
digitalWrite(m11, LOW);
digitalWrite(m12, HIGH);
digitalWrite(m21, HIGH);
digitalWrite(m22, HIGH);
}
void Stop()
{
digitalWrite(m11, HIGH);
digitalWrite(m12, HIGH);
digitalWrite(m21, HIGH);
digitalWrite(m22, HIGH);
}
void setup()
{
pinMode(D0, INPUT);
pinMode(D1, INPUT);
pinMode(D2, INPUT);
pinMode(D3, INPUT);
pinMode(m11, OUTPUT);
pinMode(m12, OUTPUT);
pinMode(m21, OUTPUT);
pinMode(m22, OUTPUT);
}
void loop()
{
int temp1=digitalRead(D0);
int temp2=digitalRead(D1);
int temp3=digitalRead(D2);
int temp4=digitalRead(D3);
if(temp1==0 && temp2==1 && temp3==1 && temp4==0)
forward();
else if(temp1==0 && temp2==0 && temp3==0 &&
temp4==1)
left();
else if(temp1==0 && temp2==1 && temp3==1 &&
temp4==1)
right();
else if(temp1==1 && temp2==0 && temp3==0 &&
temp4==1)
backward();
else if(temp1==1 && temp2==1 && temp3==1 &&
temp4==1)
Stop();
}
Step 9: Arduino Circuit(optional)
Please don't forget to Vote !!
this step is for those who use customized Arduino or breadboard arduino .
if you have any doubt please do comment !! I will try to clear it ..thank you
this step is for those who use customized Arduino or breadboard arduino .
if you have any doubt please do comment !! I will try to clear it ..thank you