<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        如何做一臺自己的手機藍牙遙控車

        作者:佚名   來源:本站原創   點擊數:  更新時間:2014年02月28日   【字體:

               最近很多人問我有關藍牙遙控車的事情,就在這里統一寫一個日志詳細說說怎么做吧。采用模塊搭建的方法比較簡單。不費事兒~
               材料清單:
        普通遙控車一輛  30元 (遙控壞不壞的都行只要電機沒問題)
        藍牙串口模塊一個 25元 (淘寶有賣)
        電烙鐵一把  價格略,買一把夠用好多年(焊錫、松香少量)
        STC的單片機一個 4元 (推薦用個STC89C52RC,雖然大點)
        安卓手機一臺帶藍牙  價格略
        L298N電機驅動模塊  14元(淘寶有賣)
        18650鋰電池2節   15元(淘寶,最好連電池盒也一起買了。當然買14500電池更好,跟5號電池一樣大,直接放在車子的電池盒。注意電壓是3.7V的)
        TTL下載線  15元(用來下載程序到單片機中,算是很常見的一個東西了,沒有的話就淘寶吧)
        電阻電容之類的若干 (主要是給單片機做最小系統,不想費勁的話就買個STC89C52RC的最小系統板10元)
        導線若干

        先上張完成圖:

        動力比較足,用電池壓住后輪,不然打滑嚴重。

        思路:
        手機發送控制指令
        經藍牙發送至藍牙串口模塊
        串口模塊把數據通過單片機串口送入單片機
        單片機處理數據,作出反應,是該前進還是后退


         

        介紹下電機驅動模塊

                                
        我們使用的是AB/CD兩組直流電機驅動口。無視圖上的步進電機。
        在本次制作中AB口驅動后輪的電機,控制小車前后動作;
        CD口驅動前輪方向電機,控制小車左右動作。
         信號輸入端口inA/inB/inC/inD,給一個高電平+5,就可以驅動相應的電機正反轉

        稍微介紹下STC89C52RC

        P1.4接inA,P1.5接inB,P1.6接inC,P1.7接inD。單片機最小系統要么買個小板子,要么找STC官網的PDF看,這里就不貼了。
        P3.0和P3.1作為下載口與藍牙串口的通訊口。
        單片機晶振使用11. 0592M的。
         P3.2接LED正極,LED負極接地,這個LED的作用是判斷單片機是否正常運行,在程序里設定LED一亮一滅,正常運行的話,LED會一亮一滅。
        程序結構如下 :

        drive.c
        #include "drive.h"
          
        void Wleft()
        {
            W_1 = 1;
            B_1 = 0;
            L_1 = 1;
            R_1 = 0;
        }

        void Wright()
        {
            W_1 = 1;
            B_1 = 0;
            L_1 = 0;
            R_1 = 1;
        }

        void Bleft()
        {
            W_1 = 0;
            B_1 = 1;
            L_1 = 1;
            R_1 = 0;
        }

        void Bright()
        {
            W_1 = 0;
            B_1 = 1;
            L_1 = 0;
            R_1 = 1;
        }

        void Forward()
        {
            W_1 = 1;
            B_1 = 0;
            L_1 = 0;
            R_1 = 0;  
        }

        void Backward()
        {
            W_1 = 0;
            B_1 = 1;
            L_1 = 0;
            R_1 = 0;   
        }

        void Stop()
        {
            W_1 = 0;
            B_1 = 0;
            L_1 = 0;
            R_1 = 0;  
        }

        main.c
        #include<reg52.h>
        #include "drive.h"

        #define uchar unsigned char

        sbit led_pin = P3^2;    //定義led所接的引腳

        uchar k;
        uchar rxcode[1];

        void led() interrupt 1    //led閃爍函數,由定時器T0產生中斷,大約1.5秒閃爍一下
        {
            uchar i;
            i++;
            if(i==15)
            {
                led_pin = !led_pin;
                i=0;
            }
            TH0 = (65536-50000)/256;
            TL0 = (65536-50000)%256;
        }

        void com() interrupt 4    //串口中斷函數,當藍牙傳命令過來的時候執行
        {
            RI = 0;
            rxcode[k]=SBUF;        //把收到的命令放到全局變量里面
            k++;
            if(k==1)
                k=0;
        }
          
        void com_init()            //串口初始化函數,波特率9600bps
        {
            TMOD = 0x21;
            TH1  = 0xfd;
            TL1  = 0xfd;
            TR1  = 1;
              
            REN  = 1;
            SM0  = 0;
            SM1  = 1;
          
            ES   = 1;
            EA   = 1;
        }

        void led_init()            //定時器0初始化函數,用于led閃爍
        {
            TH0  = (65536-50000)/256;
            TL0  = (65536-50000)%256;
            ET0  = 1;
            TR0  = 1;
        }

        void main()                //主函數
        {
            Stop();
            com_init();            //串口初始化
            led_init();            //led閃爍定時器初始化
            while(1)            //死循環,等待藍牙傳命令過來
                {
                switch(rxcode[0])    //判斷收到的命令是干嘛的
                    {
                    case 2:Forward();break;        //前進
                    case 1:Backward();break;    //后退
                    case 4:Wright();break;        //前右
                    case 3:Wleft();break;        //前左
                    case 5:Bright();break;         //后右
                    case 6:Bleft();break;         //    后左
                    case 0:Stop();break;        //停止
                    }
                   }
        }

        drive.h
        #ifndef __DRIVE_H__
        #define __DRIVE_H__

        #include <reg52.h>

        //定義L298N所接的引腳
        sbit R_1 = P1^7;
        sbit L_1 = P1^6;
        sbit B_1 = P1^5;
        sbit W_1 = P1^4;

        void Wleft();
        void Wright();
        void Bleft();
        void Bright();
        void Forward();
        void Backward();
        void Stop();

        #endif

        編譯生成HEX文件

         
        打開 STC-ISP,準備把程序寫入到單片機
        +5接在單片機供電,gnd接地,RX,TX對應P3.0 P3.1
        TTL下載器就是這個

         

        選擇好固件,串口號,點擊下載,再給單片機上電
        如果用最小系統板的話 大概是這個樣子

        如果沒有錯誤的話會出現這個
        Chinese:正在嘗試與 MCU/單片機 握手連接 ...
        MCU Type is: STC89C52RC
        MCU Firmware Version: 4.3C
        Chinese:MCU 固件版本號: 4.3C
        Double speed / 雙倍速:          12T/單倍速
        振蕩放大器增益:                  full gain
        下次下載時 P1.0/P1.1 與下載無關
        內部擴展AUX-RAM:        允許訪問(強烈推薦)
        下次下載用戶應用程序時將數據Flash區擦除: NO
        用戶軟件啟動內部看門狗后:     復位關看門狗
        ALE pin 仍為 ALE
        內部時鐘頻率:11.049428M.
        外部時鐘頻率:11.049428M.
        Chinese:正在重新連接 ...
        Current Baud is: / 當前波特率為: 19200 bps.
        We are erasing MCU flash...
        正在擦除應用程序區... ( 00:01 )
        正在下載... ( 開始時間: 14:40:06 )
        Program OK / 下載 OK
        Verify  OK / 校驗 OK
        erase times/擦除時間 :  00:01
        program times/下載時間: 00:01
        Encrypt OK/ 已加密

        這樣就可以了。把硬件都裝上

        最好在驅動模塊的輸出串個5歐姆的水泥電阻,不然動力太足。

        這樣就OK了。只要使用藍牙串口發送1就可以前進,2就可以后退。3、4、5、6.安卓的程序需要的話可以喊我,這里傳不上來。

        大體上就是這樣的思路。具體做的話,元件的安裝、電路板的安放都需要根據小車的實際情況來。

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮