基於51單片機的藍牙遙控小車


直入主題:

       硬件部分:l298n、單片機最小系統(最優選,因為有很多外設的板子會影響輸出電壓大小,導致輸出電壓不夠)、12V直流電源、HC-05藍牙模塊、USB轉TTl模塊、小車底盤一個(帶電機的)、杜邦線若干。

     下圖為HC-05藍牙模塊,此模塊有6引腳。
  

        下圖為USB轉 TTL模塊,此模塊有5引腳。

 

 

 

 

  

       下圖為L298N電機驅動模塊。

     下圖為單片機最小系統(單片機下為12V直流電源)

    基本介紹完小車各部件,下面講一下各模塊怎么使用。

    首先說HC-05藍牙模塊,這個模塊是一個主從一體的藍牙模塊,需要先和USB轉TTL模塊連接VCC-VCC、GND-GND、TXD-RXD、RXD-TXD,然后和電腦相連(注意:連接電腦時需要同時按住HC-05上黑色小按鈕,紅燈雙閃就對了),然后打開串口調試軟件(鏈接:https://pan.baidu.com/s/1O-5b1qmakEjfLp74LzPw0A 提取碼:oxez ),我用的是鏈接中的串口調試軟件V2.4,工具中波特率設置為38400,發送AT,收到OK就對了。

    然后發送以下指令:AT+ROLE=0(設置為從機,此時只可以被搜索)

                                    AT+CMODE=1(允許連接)

                                    AT+UART=9600(設置模塊比特率為9600)

          AT+NAME=隨意英文(設置模塊名字)

          AT+PSWD=1234(設置密碼)

還需要在手機下載藍牙串口app。

  然后講一下L298N電機驅動模塊,模塊正對自己(左2藍,右2藍,下3藍),左2藍和右2藍分別連接一個電機,是輸出端,IN1、IN2、IN3、IN4是輸入端,兩兩一對,12左、34右,當1和2分別一個高電平一個低電平時(即in1=0、in2=1),電機轉(in1=1,in2=0反轉)。ENA、ENB為PWM調速端口。下3藍中,最左是12v直流輸入,中間gnd,最右5v輸出,可以給單片機5v供電。

  然后再說一下連線部分:電源給L298N供電,L298n給兩個電機以及單片機供電,單片機2.7654分別連接in1234,2.32分別接ena、enb。藍牙模塊TXD、RXD接單片機3.0、3.1。

  在本程序中設置31.32.33.34為字符段發送,HC-05接收到通過單片機3.1、3.0輸入給單片機,然后單片機引腳做出反應,使l298n輸入端做出反應,實現電機前后轉,兩輪轉速不同實現轉向。

  下面給出全部源代碼,此小車只是做出最簡單的前后左右,其它細節還需要進一步完善。

#include<reg52.h>
sbit  in1=P2^7;
sbit  in2=P2^6;
sbit  in3=P2^5;
sbit  in4=P2^4;
sbit  ena=P2^3;
sbit  enb=P2^2;

typedef unsigned int uint;
typedef unsigned char uchar; 

uint pass = 0;      //傳遞數據位

void delay(unsigned int z)     //延時函數
{
  unsigned int y;
  for(;z>0;z--)
    for(y=0;y<125;y++);
}

 void delay_10um(unsigned int n)
{
   while(n--);
}

void qianjin()              //前進
{
   in1=1;
   in2=0;
   in3=1;
   in4=0;
   ena=1;
   enb=1;
   
   delay_10um(40);
   ena=0;
   enb=0;
   delay_10um(60);
  
}
void houtui()             //后退
{
   
   in1=0;
   in2=1;
   in3=0;
   in4=1;
   ena=1;
   enb=1;
   
   delay_10um(40);
   ena=0;
   enb=0;
   delay_10um(60);

}
void zuozhuan()              //左轉
{
   in1=1;
   in2=0;
   ena=1;
   delay_10um(60);
   ena=0;
   delay_10um(40);
       
   in3=1;
   in4=0;
   enb=1;
   delay_10um(40);
   enb=0;
   delay_10um(60);
     
}
void youzhuan()             //右轉
{
   in1=1;
   in2=0;
   ena=1;
   delay_10um(40);
   ena=0;
   delay_10um(60);
       
   in3=1;
   in4=0;
   enb=1;
   delay_10um(60);
   enb=0;
   delay_10um(40);
      
}
void tingzhi()             //停止
{
 
    in1=0;
    in2=0; 
}

void UART_init()    
{
      TMOD = 0x20;
      TH1 = 0xfd;
      TL1 = 0xfd;  //波特率9600
      SM0 = 0;  
      SM1 = 1;   // 串口工作方式1 10位異步
      REN = 1;  //串口允許接收
      TR1 = 1;
      EA = 1;
      ES =1 ;  //串口中斷
}

int main()
{
       UART_init();  //波特率9600
      
       while(1)
       {
                    if(pass == 0x31)  
                         qianjin(); 
                    if(pass == 0x32)
                         zuozhuan();
                    if(pass == 0x33)
                         youzhuan(); 
                    if(pass == 0x34)
                         houtui(); 
                    if(pass == 0x35)
                         tingzhi();
       }           
}

void UART_INTERRUPT() interrupt 4
{        
              pass = SBUF;
              RI = 0;   
              SBUF = pass;   
              while(!TI);
              TI = 0;  
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM