Discussion in "Project Doubts" started by    nichu    Apr 11, 2009.
Sat Apr 11 2009, 10:37 am
#1
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

    speed1
      speed 2
        speed3


        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;
        }
        }
        }
        Sat Apr 11 2009, 12:22 pm
        #2
        well right now, how are you controlling the speed of motor? post your circuit too if possible.
         nichu like this.
        Sun Apr 12 2009, 11:32 pm
        #3
        Tue Apr 14 2009, 02:31 pm
        #4
        can you just paste the PWM part where u control motor speed?

        Get Social

        Information

        Powered by e107 Forum System

        Downloads

        Comments

        Robertphype
        Sat Apr 27 2024, 12:23 am
        ktaletrryp
        Fri Apr 26 2024, 10:55 pm
        Robertrip
        Fri Apr 26 2024, 11:20 am
        ArnoldDiant
        Fri Apr 26 2024, 03:53 am
        RodneyKnorb
        Thu Apr 25 2024, 07:08 pm
        Williamjef
        Thu Apr 25 2024, 02:08 pm
        SamuelSmise
        Thu Apr 25 2024, 09:56 am
        DustinErele
        Thu Apr 25 2024, 08:44 am