Creating a voice controlled wheelchair

Status
Not open for further replies.

bala kumaran

Newbie level 4
Joined
Feb 4, 2013
Messages
5
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Visit site
Activity points
1,382
I've already interfaced stepper motor with PIC18F4550. i need to do a process where , speech recognition chip(HM2007) is used to control the wheel chair, and an Ultrasonic sensor module(HC-SR04) for obstacle detection has to be done.in accordance with that the movement of wheel chair must be... SOme do help me with coding.....
 

And moreover i got an info that fuzzy logic may help in the above coding....do any1 think of that?....
 

Interfacing Stepper Motor , HC-SR04(Ultrasonic Sensor) to PIC18F4550
I've written a code in MPlab, the compiler im making use is C18 and i want it to do as follows..
Once we started the process, TIMER in PIC 18F4550 and also Ultrasonic sensor(HC-SR04) must be triggered. If obstacle is detected by the sensor,the present value of the timer have to be taken for calculating distance between obstacle and the model by formula mentioned in coding. and if calculated distance is equal or below threshold level (say 20 cm) the running of motor should stop and the sensor should sense right side for obstacle and if there is nothing the movement has to be started and also the timer,HC-SR 04 must be triggered...the following is my code and i need someone to fix the problem associated with it...

#include <p18F4550.h>
#define trig PORTCbits.RC1
#define echo PORTCbits.RC2
// #include<p18f4550.h>
//#include<delay.h>
#define s1 PORTDbits.RD0
#define s2 PORTDbits.RD1
#define s3 PORTDbits.RD2
#define s4 PORTDbits.RD3
#define s5 PORTDbits.RD4
void TMR0_init();
int time , value;
float distance; // Defining variables
unsigned char ECHO,input;
void delay(unsigned int itime)
{
unsigned int i;
unsigned char j;
for(i=0;i<itime;i++)
for(j=0;j<128;j++);
}

void TMR0_init()
{
TMR0H=0xD2;
TMR0L=0x39;
T0CONbits.TMR0ON=1;
while(INTCONbits.TMR0IF==0);
T0CONbits.TMR0ON=0;
// T0CONbits.TMR0IF=0;
}
void TMR_CNT(unsigned float value)
{
T0CON=0b10000000;
if (ECHO!=1)
T0CONbits.TMR0ON=0b10000000;
else
value=T0CON;
}
void TIMER_ON()
{
TRISC=0;
TRISCbits.TRISC1=0;
T0CONbits.T0PS0 = 1;
T0CONbits.T0PS1 = 1;
T0CONbits.T0PS2 = 1;
T0CONbits.PSA = 0;
T0CONbits.T0SE = 0;
T0CONbits.T0CS = 0;
T0CONbits.T08BIT = 0;
INTCONbits.TMR0IF = 0;
INTCONbits.TMR0IE = 0;
T0CONbits.TMR0ON = 1;
}
void CW_ROTATION()
{

LATB=0b1001; LATA=0b1110;
delay(300);

LATB=0b1100; LATA=0b1101;
delay(300);

LATB=0b0110; LATA=0b1011;
delay(300);

LATB=0b0011; LATA=0b0111;
delay(300);
}
void CCW_ROTATION()
{
LATB=0b1110; LATA=0b1001;
delay(300);

LATB=0b1101; LATA=0b1100;
delay(300);

LATB=0b1011; LATA=0b0110;
delay(300);

LATB=0b0111; LATA=0b0011;
delay(300);

}
void RIGHT_TURN()
{
LATB=0b0000;
delay(300);

LATA=0b1110;
delay(300);

LATA=0b1101;
delay(300);

LATA=0b1011;
delay(300);

LATA=0b0111;
delay(300);
}
void LEFT_TURN()
{
LATA=0b0000;
delay(300);

LATB=0b1001;
delay(300);

LATB=0b1100;
delay(300);

LATB=0b0110;
delay(300);

LATB=0b0011;
delay(300);
}
void SENSOR_RIGHT_TURN()
{

LATE=0b1001;
delay(300);

LATE=0b1100;
delay(300);

LATE=0b0110;
delay(300);

LATE=0b0011;
delay(300);
}
void SENSOR_LEFT_TURN()
{
LATA=0b0000;
delay(300);

LATB=0b1001;
delay(300);

LATB=0b1100;
delay(300);

LATB=0b0110;
delay(300);

LATB=0b0011;
delay(300);
}
void WORST_CASE()
{
LATA=0; LATB=0;
SENSOR_RIGHT_TURN();
{
if(TRISCbits.TRISC2!=1)
{
LATB=0b0000;
delay(300);

LATA=0b1110;
delay(300);

LATA=0b1101;
delay(300);

LATA=0b1011;
delay(300);
CW_ROTATION();
TIMER_ON();
TRISCbits.TRISC1 = 1;
delay(300);
}
if(TRISCbits.TRISC2 = 1)
{ LATA=0; LATB=0;
SENSOR_LEFT_TURN();
TRISCbits.TRISC1 = 1;
delay(300);
}
if(TRISCbits.TRISC2!=1)
{
LATA=0b0000;
delay(300);

LATB=0b1001;
delay(300);

LATB=0b1100;
delay(300);

LATB=0b0110;
delay(300);
CW_ROTATION();
TIMER_ON();
TRISCbits.TRISC1 = 1;
delay(300);
}
}
}
int alreadySet = 0;
unsigned int timerValue;
unsigned char* ptr;
void main()
{
unsigned int i=0;
TRISB=0;
TRISA=0;
TRISE=0;
while(1)
if(s5==1)
{
if(s1==1)
{
// WHEEL MOVEMENT
LATB=0b1001; LATA=0b1110;
delay(300);

LATB=0b1100; LATA=0b1101;
delay(300);

LATB=0b0110; LATA=0b1011;
delay(300);

LATB=0b0011; LATA=0b0111;
delay(300);

// TIMER ON

TRISC=0;
TRISCbits.TRISC1=0;
T0CONbits.T0PS0 = 1;
T0CONbits.T0PS1 = 1;
T0CONbits.T0PS2 = 1;
T0CONbits.PSA = 0;
T0CONbits.T0SE = 0;
T0CONbits.T0CS = 0;
T0CONbits.T08BIT = 0;
INTCONbits.TMR0IF = 0;
INTCONbits.TMR0IE = 0;
T0CONbits.TMR0ON = 1;
TRISCbits.TRISC1 = 1;
delay(300);
}
if(TRISCbits.TRISC2!=1)
{
LATB=0b1001; LATA=0b1110;
delay(300);

LATB=0b1100; LATA=0b1101;
delay(300);

LATB=0b0110; LATA=0b1011;
delay(300);

LATB=0b0011; LATA=0b0111;
delay(300);
}
if(TRISCbits.TRISC2==1)
{
T0CONbits.T0PS0 = 1;
T0CONbits.T0PS1 = 1;
T0CONbits.T0PS2 = 1;
T0CONbits.PSA = 0;
T0CONbits.T0SE = 0;
T0CONbits.T0CS = 0;
T0CONbits.T08BIT = 0;
INTCONbits.TMR0IF = 0;
INTCONbits.TMR0IE = 0;
T0CONbits.TMR0ON = 0;
return (value);
distance = (value * 343.2) / 2 ;
{
if (distance>20)
{
CW_ROTATION();
TIMER_ON();
}
else
{
LATA=0; LATB=0;
SENSOR_RIGHT_TURN();
TRISCbits.TRISC1 = 1;
delay(300);
{
if(TRISCbits.TRISC2!=1)
{
LATB=0b0000;
delay(300);

LATA=0b1110;
delay(300);

LATA=0b1101;
delay(300);

LATA=0b1011;
delay(300);
CW_ROTATION();
TIMER_ON();
TRISCbits.TRISC1 = 1;
delay(300);
}
if(TRISCbits.TRISC2 = 1)
{
LATA=0; LATB=0;
SENSOR_LEFT_TURN();
TRISCbits.TRISC1 = 1;
delay(300);
{
if(TRISCbits.TRISC2!=1)
{
LATA=0b0000;
delay(300);

LATB=0b1001;
delay(300);

LATB=0b1100;
delay(300);

LATB=0b0110;
delay(300);
CW_ROTATION();
TIMER_ON();
TRISCbits.TRISC1 = 1;
delay(300);
}
else if(TRISCbits.TRISC2==1)
{
CCW_ROTATION();
delay(1500);
WORST_CASE();
}
}
}
}
}
}
}
}
}
 

And moreover i got an info that fuzzy logic may help in the above coding....do any1 think of that?....

You don't state what the problem is with your code... Maybe someone else is familiar with it. Here's a tip: It will help if you add a lot of remarks to tell people what is happening. And though your code appears to be executed linearly, it will help to break it up into functions so that the program structure is more clear.

As for fuzzy logic, it might apply when you have several factors voting about wheelchair motion. Right now, however, you only have 2 factors.

Besides checking frequently for obstacles while in motion...
The obstacle detector must also be checked before you begin motion.
 

Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…