"wireless speed control of dc motor using bluetooth"
Discussion in "Project Doubts" started by nichu Apr 11, 2009.
Sat Apr 11 2009, 10:37 am
I am doing a project on "wireless speed control of dc motor using bluetooth".
can anyone help me to provide source code , though we have developed source code i want some modifications in it like the one what we have developed it is fixed in speed ,operates only in 3 modes
what we want is (like controlling of the man using pot) smooth control.
the source code is as below that we have developed.
#include<reg51.h>
#include<intrins.h>
sbit MOTOR = P3^2;
void Check_Message(void);
void check_str(unsigned char *msg_ptr, unsigned char Str_No);
//---------------------------------------------------
sbit rs=P3^6;
sbit en=P3^7;
//---------------------------------------------------
code unsigned char dis[6]={0x30,0x38,0x08,0x0c,0x06,0x80};
void lcd_data(unsigned char lcd_data);
void lcd_Cmd(unsigned char lcd_data);
void lcd_disp( unsigned char *dat);
//---------------------------------------------------
void serial_init();
void send_byte(unsigned char ch);
void sendString(unsigned char *str);
//---------------------------------------------------
bit pass_flag,New_Msg,Motor_init;
unsigned char Data_Buff[9];
unsigned char Rx_Data;
unsigned char DC_MOTOR_STC;
code unsigned char passwd[5]={'1','1','2','4','\0'};
code unsigned char msg1[5]={'D','S','O','F','\0'};
code unsigned char msg2[5]={'D','S','P','1','\0'};
code unsigned char msg3[5]={'D','S','P','2','\0'};
code unsigned char msg4[5]={'D','S','P','3','\0'};
code unsigned char msg5[5]={'D','S','T','S','\0'};
void check_passwd(unsigned char *pass);
void check_msg(void);
void check_str(unsigned char *msg_ptr,unsigned char no);
//---------------------------------------------------
void delay(unsigned int);
void DC_MOTOR_CNT(void);
//---------------------------------------------------
#define ON 1
#define OFF 0
main()
{
unsigned char i;
New_Msg=0;
MOTOR=0x00;
Motor_init=0;
DC_MOTOR_STC=0x00;
for( i=0;i<7;i++)
{
lcd_Cmd(dis[i]);
delay(1000);
}
// SECURITY SYSTEM
serial_init();
EA = 0;
delay(900000);
lcd_Cmd(0x80);
lcd_disp("BLUETOOTH BASED ");
delay(900000); delay(900000); delay(900000);
delay(900000); delay(900000); delay(900000);
lcd_Cmd(0x80);
lcd_disp(" SPEED CONTROL ");
delay(900000); delay(900000); delay(900000);
delay(900000); delay(900000); delay(900000);
serial_init();
while(1)
{
if(New_Msg==1)
{
New_Msg=0;
//MOTOR=0;
Motor_init=0;
Check_Message();
delay(900000); delay(900000); delay(900000);
serial_init();
}
DC_MOTOR_CNT();
}//end of while i
}
//LCD--------------------------------------------------------
void lcd_data(unsigned char lcd_data)
{
rs=1;
P0=lcd_data;
en=1;
delay(4000);
en=0;
}
void lcd_Cmd(unsigned char lcd_data)
{
rs=0;
P0=lcd_data;
en=1;
delay(4000);
en=0;
}
void lcd_disp( unsigned char *dat)
{
while(*dat!='\0')
{
lcd_data(*dat);
dat++;
}
}
void serial_init()
{
SCON = 0x50; //mode 1 serial communication
TMOD = 0x20; //timer 1 au to reload mode
TH1 = 0xfd; //9600 baudrate at 11.0592 MHz
TR1 = 1;
EA = 1;
ES = 1;
} // END OF void serial_init()
unsigned char recv_byte()
{
EA = 0;
while(!RI); //waits till a byte is recieved
RI = 0;
Rx_Data = SBUF;
return(Rx_Data);
}//END OF unsigned char recv_byte()
void send_byte(unsigned char ch)
{
EA = 0;
TI = 0;
SBUF = ch;
while(!TI);
delay(1000);
} // END OF void send_byte(unsigned char ch)
void sendString(unsigned char *str)
{
while(*str != '\0')
send_byte(*str++);
} // END OF void sendString(unsigned char *str)
/*
void enter()
{
send_byte(0x0d); // <CR>
send_byte(0x0a); // <LF>
}
*/
void Serial_ISR(void) interrupt 4
{
volatile unsigned char Buff_i=0;
if(RI==1)
{
RI=0;
if('$'==SBUF)
{
EA = 0;
while(recv_byte()!='@')
Data_Buff[Buff_i++]=Rx_Data;
RI=0;
}
New_Msg=1;
}
}
/*
void Send_Status(void)
{
lcd_Cmd(0x01);
lcd_disp("Sending Status");
lcd_Cmd(0xC0);
lcd_disp(ph_no);
//Disp_Back=1;
sendString(Send_Stat_msg);
sendString(ph_no);
send_byte('"');
send_byte(0x0d); // <CR>
send_byte(0x0a); // <LF>
if(DC_MOTOR_STC==0x00)
sendString("DC MOTOR TURNED OFF");
if(DC_MOTOR_STC==0x01)
sendString("DC MOTOR ON RUNNING AT SPEED1");
if(DC_MOTOR_STC==0x02)
sendString("DC MOTOR ON RUNNING AT SPEED2");
if(DC_MOTOR_STC==0x03)
sendString("DC MOTOR ON RUNNING AT SPEED3");
if(DC_MOTOR_STC==0x04)
sendString("INVALID PASSWORD");
send_byte(0x0d); // <CR>
send_byte(0x0a); // <LF>
send_byte(0x1a);
delay(900000); delay(900000); delay(900000);
delay(900000); delay(900000); delay(900000);
lcd_Cmd(0x01);
lcd_disp("SMS Sent");
}//end of send status
*/
void DC_MOTOR_CNT(void)
{
if(DC_MOTOR_STC==0x00)//Motor OFF
{
MOTOR=0;
if(Motor_init==0)
{
Motor_init=1;
lcd_Cmd(0x01);
lcd_Cmd(0x80);
lcd_disp("DC MOTOR OFF");
// serial_init();
}
}//end of sppe 3
if(DC_MOTOR_STC==0x01)//Speed 1
{z xz
if(Motor_init==0)
{
lcd_Cmd(0x01);
lcd_Cmd(0x80);
lcd_disp("DC MOTOR ON");
lcd_Cmd(0xC0);
lcd_disp("SPEED 1 ");
lcd_data(0xFF);
Motor_init=1;
MOTOR=1;
delay(24000);//250 750
}
MOTOR=1;
delay(500);//250
MOTOR=0;
delay(2500);
}//end of sppe 1
if(DC_MOTOR_STC==0x02)//Speed 2
{
if(Motor_init==0)
{
Motor_init=1;
lcd_Cmd(0x01);
lcd_Cmd(0x80);
lcd_disp("DC MOTOR ON");
lcd_Cmd(0xC0);
lcd_disp("SPEED 2 ");
lcd_data(0xFF); lcd_data(0xFF);
MOTOR=1;
delay(24000);//250 750
}
MOTOR=1;
delay(800);//250 750
MOTOR=0;
delay(2200);
}//end of sppe 2
if(DC_MOTOR_STC==0x03)//Speed 3
{
if(Motor_init==0)
{
Motor_init=1;
lcd_Cmd(0x01);
lcd_Cmd(0x80);
lcd_disp("DC MOTOR ON");
lcd_Cmd(0xC0);
lcd_disp("SPEED 3 ");
lcd_data(0xFF); lcd_data(0xFF); lcd_data(0xFF);
}
MOTOR=1;
}//end of sppe 3
}//end of DC_MOTOR_CNT
void delay(unsigned int cnt)
{
while(cnt--);
}//end of delay
void Check_Message(void)
{
pass_flag=0;
check_str( (Data_Buff),0);//Tco heck for password
if(pass_flag==1)
{
lcd_Cmd(0x01);
lcd_disp(" VALID PASSWORD ");
delay(900000);delay(900000);delay(900000);
delay(900000);delay(900000);delay(900000);
check_str( (Data_Buff+4),1);
if(pass_flag==1)
{//If Message to turn off
lcd_Cmd(0x01);
DC_MOTOR_STC=0x00;
lcd_disp("DC MOTOR OFF");
delay(900000);delay(900000);delay(900000);
delay(900000);delay(900000);delay(900000);
//Send_Status();
}
check_str( (Data_Buff+4),2);
if(pass_flag==1)
{//If Message to turn on SPEED 1
lcd_Cmd(0x01);
Motor_init=0;
DC_MOTOR_STC=0x01;
lcd_disp("DC MOTOR SPEED 1");
delay(900000);delay(900000);delay(900000);
delay(900000);delay(900000);delay(900000);
//Send_Status();
}
check_str( (Data_Buff+4),3);
if(pass_flag==1)
{//If Message to turn on SPEED 2
lcd_Cmd(0x01);
Motor_init=0;
DC_MOTOR_STC=0x02;
lcd_disp("DC MOTOR SPEED 2");
delay(900000);delay(900000);delay(900000);
delay(900000);delay(900000);delay(900000);
//Send_Status();
}
check_str( (Data_Buff+4),4);
if(pass_flag==1)
{//If Message to turn on SPEED 3
lcd_Cmd(0x01);
Motor_init=0;
DC_MOTOR_STC=0x03;
lcd_disp("DC MOTOR SPEED 3");
delay(900000);delay(900000);delay(900000);
delay(900000);delay(900000);delay(900000);
//Send_Status();
}
check_str( (Data_Buff+4),5);
if(pass_flag==1)
{//If Message to Retrive STSTUS
lcd_Cmd(0x01);
lcd_disp("SENDING STATUS");
delay(900000);delay(900000);delay(900000);
delay(900000);delay(900000);delay(900000);
//Send_Status();
}
}//end of password check
else
{
lcd_Cmd(0x01);
// lcd_disp("INVALID PASSWORD ");
delay(900000);delay(900000);delay(900000);
delay(900000);delay(900000);delay(900000);
}//invalid password
}//end of check message
void check_str(unsigned char *msg_ptr, unsigned char Str_No)
{
unsigned char i,*cmp_msg;
if(Str_No==0)
cmp_msg=passwd;//PASSWORD
if(Str_No==1)
cmp_msg=msg1;//Turn OFF
if(Str_No==2)
cmp_msg=msg2;//SPEED 1
if(Str_No==3)
cmp_msg=msg3;//SPEED 2
if(Str_No==4)
cmp_msg=msg4;//SPEED 3
if(Str_No==5)
cmp_msg=msg5;//STATUS
pass_flag=0;
for(i=0;i<4;i++)
{
if((*(msg_ptr + i )) == (*(cmp_msg + i)))
pass_flag=1;
else
{
pass_flag=0;
return;
}
}
}
can anyone help me to provide source code , though we have developed source code i want some modifications in it like the one what we have developed it is fixed in speed ,operates only in 3 modes
what we want is (like controlling of the man using pot) smooth control.
the source code is as below that we have developed.
#include<reg51.h>
#include<intrins.h>
sbit MOTOR = P3^2;
void Check_Message(void);
void check_str(unsigned char *msg_ptr, unsigned char Str_No);
//---------------------------------------------------
sbit rs=P3^6;
sbit en=P3^7;
//---------------------------------------------------
code unsigned char dis[6]={0x30,0x38,0x08,0x0c,0x06,0x80};
void lcd_data(unsigned char lcd_data);
void lcd_Cmd(unsigned char lcd_data);
void lcd_disp( unsigned char *dat);
//---------------------------------------------------
void serial_init();
void send_byte(unsigned char ch);
void sendString(unsigned char *str);
//---------------------------------------------------
bit pass_flag,New_Msg,Motor_init;
unsigned char Data_Buff[9];
unsigned char Rx_Data;
unsigned char DC_MOTOR_STC;
code unsigned char passwd[5]={'1','1','2','4','\0'};
code unsigned char msg1[5]={'D','S','O','F','\0'};
code unsigned char msg2[5]={'D','S','P','1','\0'};
code unsigned char msg3[5]={'D','S','P','2','\0'};
code unsigned char msg4[5]={'D','S','P','3','\0'};
code unsigned char msg5[5]={'D','S','T','S','\0'};
void check_passwd(unsigned char *pass);
void check_msg(void);
void check_str(unsigned char *msg_ptr,unsigned char no);
//---------------------------------------------------
void delay(unsigned int);
void DC_MOTOR_CNT(void);
//---------------------------------------------------
#define ON 1
#define OFF 0
main()
{
unsigned char i;
New_Msg=0;
MOTOR=0x00;
Motor_init=0;
DC_MOTOR_STC=0x00;
for( i=0;i<7;i++)
{
lcd_Cmd(dis[i]);
delay(1000);
}
// SECURITY SYSTEM
serial_init();
EA = 0;
delay(900000);
lcd_Cmd(0x80);
lcd_disp("BLUETOOTH BASED ");
delay(900000); delay(900000); delay(900000);
delay(900000); delay(900000); delay(900000);
lcd_Cmd(0x80);
lcd_disp(" SPEED CONTROL ");
delay(900000); delay(900000); delay(900000);
delay(900000); delay(900000); delay(900000);
serial_init();
while(1)
{
if(New_Msg==1)
{
New_Msg=0;
//MOTOR=0;
Motor_init=0;
Check_Message();
delay(900000); delay(900000); delay(900000);
serial_init();
}
DC_MOTOR_CNT();
}//end of while i
}
//LCD--------------------------------------------------------
void lcd_data(unsigned char lcd_data)
{
rs=1;
P0=lcd_data;
en=1;
delay(4000);
en=0;
}
void lcd_Cmd(unsigned char lcd_data)
{
rs=0;
P0=lcd_data;
en=1;
delay(4000);
en=0;
}
void lcd_disp( unsigned char *dat)
{
while(*dat!='\0')
{
lcd_data(*dat);
dat++;
}
}
void serial_init()
{
SCON = 0x50; //mode 1 serial communication
TMOD = 0x20; //timer 1 au to reload mode
TH1 = 0xfd; //9600 baudrate at 11.0592 MHz
TR1 = 1;
EA = 1;
ES = 1;
} // END OF void serial_init()
unsigned char recv_byte()
{
EA = 0;
while(!RI); //waits till a byte is recieved
RI = 0;
Rx_Data = SBUF;
return(Rx_Data);
}//END OF unsigned char recv_byte()
void send_byte(unsigned char ch)
{
EA = 0;
TI = 0;
SBUF = ch;
while(!TI);
delay(1000);
} // END OF void send_byte(unsigned char ch)
void sendString(unsigned char *str)
{
while(*str != '\0')
send_byte(*str++);
} // END OF void sendString(unsigned char *str)
/*
void enter()
{
send_byte(0x0d); // <CR>
send_byte(0x0a); // <LF>
}
*/
void Serial_ISR(void) interrupt 4
{
volatile unsigned char Buff_i=0;
if(RI==1)
{
RI=0;
if('$'==SBUF)
{
EA = 0;
while(recv_byte()!='@')
Data_Buff[Buff_i++]=Rx_Data;
RI=0;
}
New_Msg=1;
}
}
/*
void Send_Status(void)
{
lcd_Cmd(0x01);
lcd_disp("Sending Status");
lcd_Cmd(0xC0);
lcd_disp(ph_no);
//Disp_Back=1;
sendString(Send_Stat_msg);
sendString(ph_no);
send_byte('"');
send_byte(0x0d); // <CR>
send_byte(0x0a); // <LF>
if(DC_MOTOR_STC==0x00)
sendString("DC MOTOR TURNED OFF");
if(DC_MOTOR_STC==0x01)
sendString("DC MOTOR ON RUNNING AT SPEED1");
if(DC_MOTOR_STC==0x02)
sendString("DC MOTOR ON RUNNING AT SPEED2");
if(DC_MOTOR_STC==0x03)
sendString("DC MOTOR ON RUNNING AT SPEED3");
if(DC_MOTOR_STC==0x04)
sendString("INVALID PASSWORD");
send_byte(0x0d); // <CR>
send_byte(0x0a); // <LF>
send_byte(0x1a);
delay(900000); delay(900000); delay(900000);
delay(900000); delay(900000); delay(900000);
lcd_Cmd(0x01);
lcd_disp("SMS Sent");
}//end of send status
*/
void DC_MOTOR_CNT(void)
{
if(DC_MOTOR_STC==0x00)//Motor OFF
{
MOTOR=0;
if(Motor_init==0)
{
Motor_init=1;
lcd_Cmd(0x01);
lcd_Cmd(0x80);
lcd_disp("DC MOTOR OFF");
// serial_init();
}
}//end of sppe 3
if(DC_MOTOR_STC==0x01)//Speed 1
{z xz
if(Motor_init==0)
{
lcd_Cmd(0x01);
lcd_Cmd(0x80);
lcd_disp("DC MOTOR ON");
lcd_Cmd(0xC0);
lcd_disp("SPEED 1 ");
lcd_data(0xFF);
Motor_init=1;
MOTOR=1;
delay(24000);//250 750
}
MOTOR=1;
delay(500);//250
MOTOR=0;
delay(2500);
}//end of sppe 1
if(DC_MOTOR_STC==0x02)//Speed 2
{
if(Motor_init==0)
{
Motor_init=1;
lcd_Cmd(0x01);
lcd_Cmd(0x80);
lcd_disp("DC MOTOR ON");
lcd_Cmd(0xC0);
lcd_disp("SPEED 2 ");
lcd_data(0xFF); lcd_data(0xFF);
MOTOR=1;
delay(24000);//250 750
}
MOTOR=1;
delay(800);//250 750
MOTOR=0;
delay(2200);
}//end of sppe 2
if(DC_MOTOR_STC==0x03)//Speed 3
{
if(Motor_init==0)
{
Motor_init=1;
lcd_Cmd(0x01);
lcd_Cmd(0x80);
lcd_disp("DC MOTOR ON");
lcd_Cmd(0xC0);
lcd_disp("SPEED 3 ");
lcd_data(0xFF); lcd_data(0xFF); lcd_data(0xFF);
}
MOTOR=1;
}//end of sppe 3
}//end of DC_MOTOR_CNT
void delay(unsigned int cnt)
{
while(cnt--);
}//end of delay
void Check_Message(void)
{
pass_flag=0;
check_str( (Data_Buff),0);//Tco heck for password
if(pass_flag==1)
{
lcd_Cmd(0x01);
lcd_disp(" VALID PASSWORD ");
delay(900000);delay(900000);delay(900000);
delay(900000);delay(900000);delay(900000);
check_str( (Data_Buff+4),1);
if(pass_flag==1)
{//If Message to turn off
lcd_Cmd(0x01);
DC_MOTOR_STC=0x00;
lcd_disp("DC MOTOR OFF");
delay(900000);delay(900000);delay(900000);
delay(900000);delay(900000);delay(900000);
//Send_Status();
}
check_str( (Data_Buff+4),2);
if(pass_flag==1)
{//If Message to turn on SPEED 1
lcd_Cmd(0x01);
Motor_init=0;
DC_MOTOR_STC=0x01;
lcd_disp("DC MOTOR SPEED 1");
delay(900000);delay(900000);delay(900000);
delay(900000);delay(900000);delay(900000);
//Send_Status();
}
check_str( (Data_Buff+4),3);
if(pass_flag==1)
{//If Message to turn on SPEED 2
lcd_Cmd(0x01);
Motor_init=0;
DC_MOTOR_STC=0x02;
lcd_disp("DC MOTOR SPEED 2");
delay(900000);delay(900000);delay(900000);
delay(900000);delay(900000);delay(900000);
//Send_Status();
}
check_str( (Data_Buff+4),4);
if(pass_flag==1)
{//If Message to turn on SPEED 3
lcd_Cmd(0x01);
Motor_init=0;
DC_MOTOR_STC=0x03;
lcd_disp("DC MOTOR SPEED 3");
delay(900000);delay(900000);delay(900000);
delay(900000);delay(900000);delay(900000);
//Send_Status();
}
check_str( (Data_Buff+4),5);
if(pass_flag==1)
{//If Message to Retrive STSTUS
lcd_Cmd(0x01);
lcd_disp("SENDING STATUS");
delay(900000);delay(900000);delay(900000);
delay(900000);delay(900000);delay(900000);
//Send_Status();
}
}//end of password check
else
{
lcd_Cmd(0x01);
// lcd_disp("INVALID PASSWORD ");
delay(900000);delay(900000);delay(900000);
delay(900000);delay(900000);delay(900000);
}//invalid password
}//end of check message
void check_str(unsigned char *msg_ptr, unsigned char Str_No)
{
unsigned char i,*cmp_msg;
if(Str_No==0)
cmp_msg=passwd;//PASSWORD
if(Str_No==1)
cmp_msg=msg1;//Turn OFF
if(Str_No==2)
cmp_msg=msg2;//SPEED 1
if(Str_No==3)
cmp_msg=msg3;//SPEED 2
if(Str_No==4)
cmp_msg=msg4;//SPEED 3
if(Str_No==5)
cmp_msg=msg5;//STATUS
pass_flag=0;
for(i=0;i<4;i++)
{
if((*(msg_ptr + i )) == (*(cmp_msg + i)))
pass_flag=1;
else
{
pass_flag=0;
return;
}
}
}
Powered by e107 Forum System