Arduino智能小車——藍牙小車

Arduino智能小車——藍牙小車

  上一章我們完成了小車的運動控制,雖然小車已經可以運動,但是不能遠程遙控,不夠高大上。在這一篇,我們將嘗試用手機藍牙遙控小車。

藍牙模塊

  藍牙( Bluetooth® ):是一種無線技術標準,可實現固定設備、移動設備和樓宇個人域網之間的短距離數據交換(使用2.4—2.485GHz的ISM波段的UHF無線電波)。

  我們在此使用的藍牙模塊(HC-05)已經在內部實現了藍牙協議,不用我們再去自己開發調試協議。這類模塊一般都是藉助於串口協議通信,因此我們只需藉助串口將我們需要發送的數據發送給藍牙模塊,藍牙模塊會自動將數據通過藍牙協議發送給配對好的藍牙設備。

串口通信

  由於要藉助串口實現藍牙通信功能,所以我們在此要先了解下Arduino的串口通信。

  Arduino UNO開發板上的串口爲0->RX,1->TX,在開發板內部也已經配置好了串口的功能,我們只需調用函數借口即可。以下列出串口通信裏面常用的函數,並加以簡單解釋,詳細用法可在用到時自行查詢。

開啓串行通信接口並設置通信波特率

Serial.begin(speed); 

關閉串口通信

Serial.end();    

判斷串口緩衝器是否有數據寫入

Serial.available();

讀取串口數據

Serial.read();    

返回下一字節(字符)輸入數據,但不刪除它

Serial.peek();   

清空串口緩存

Serial.flush();    

寫入字符串數據到串口

Serial.print();    

寫入字符串數據+換行到串口

Serial.println(); 

寫入二進制數據到串口

Serial.write();     

read時觸發的事件函數

Serial.SerialEvent();

讀取固定長度的二進制流

Serial.readBytes(buffer,length);

打印接到數據十進制表示的ascii碼

Serial.println(incomingByte, DEC);

藍牙模塊連接

TX: 接Arduino UNO開發板"RX"引腳
RX: 接Arduino UNO開發板"TX"引腳
GND: 接Arduino UNO開發板"GND"引腳
VCC: 接Arduino UNO開發板"5V"或"3.3V"引腳

手機藍牙助手

  想實現手機藍牙遙控小車,手機APP是必不可少的,目前網上有很多藍牙串口助手,省去了我們自己寫APP的時間,當然如果朋友你有能力或者想自己DIY的話也可以嘗試自己寫APP,在這裏我推薦大家用這款手機藍牙助手(百度上搜手機藍牙串口助手就可以搜到,挺好用的)

  如果不想自己去找的話可以到我的百度網盤下載 [點擊這裏下載](http://pan.baidu.com/s/1pKClRTL)

  下載並安裝後打開APP,在這裏可能會提示你有新版本請求更新,建議點擊以後再說(暫時不更新),以我的經驗,一般點擊立即更新都會更新失敗。

  進入主界面,左上角會提示"藍牙未連接",這個時候我們可以先對藍牙助手的界面進行自定義設置。點擊右下角的三個點(在我這裏是這樣的,其他手機可能不同,如果沒有這三個點可以試着點擊手機的功能鍵),選擇“更多”。
  然後選擇“地面站設置”進入自定義界面,往下拖動,找到“自定義按鍵[x]”,在此我們對按鍵[1][2][3][4][6]進行自定義設置。
**  點擊自定義按鍵[1],將其“顯示名稱”屬性改爲“停止”,“點擊發送”屬性改爲“00”,並點擊“確定”保存**
同理更改其他按鍵:

點擊自定義按鍵[2],將其“顯示名稱”屬性改爲“前進”,“點擊發送”屬性改爲“01”,並點擊“確定”保存
點擊自定義按鍵[4],將其“顯示名稱”屬性改爲“左轉”,“點擊發送”屬性改爲“03”,並點擊“確定”保存
點擊自定義按鍵[5],將其“顯示名稱”屬性改爲“後退”,“點擊發送”屬性改爲“02”,並點擊“確定”保存
點擊自定義按鍵[6],將其“顯示名稱”屬性改爲“右轉”,“點擊發送”屬性改爲“04”,並點擊“確定”保存

  以上修改的屬性值即爲我們點擊對應按鍵之後,藍牙串口助手自動通過藍牙發送的數據,與上一篇所定義的小車的幾個狀態一致,這樣方便在Arduino在接收到藍牙模塊的數據後對小車的狀態進行控制。

#define STOP      0
#define FORWARD   1
#define BACKWARD  2
#define TURNLEFT  3
#define TURNRIGHT 4

修改後屬性如下圖

下面就來看看我們修改的效果吧,點擊“模式切換”

這時候你就可以看到我們自定義的按鍵咯,看看修改前後的對比吧。
  接下來我們將連接藍牙,仍然點擊右下角的三個點,然後點擊“連接”
  一般沒有連接過藍牙模塊的時候“已配對的設備”下面沒有可選擇的設備名稱,因此我們要點擊“掃描新設備”來檢測我們的藍牙模塊,掃描成功後藍牙模塊的名稱將顯示在“已配對的設備”一欄中
  點擊我們的藍牙模塊的名稱,輸入密碼進行配對。配對成功後在藍牙串口助手的左上角會顯示“藍牙已連接”字樣,恭喜你,這時候你已經連接成功。

小科普:
  藍牙模塊上電(只簡單連接"VCC"和"GND"引腳)之後,其他藍牙設備即可與其連接,一般藍牙模塊默認初始連接密碼爲"0000"或"1234",如果連接不上藍牙,請儘快與廠商或者店家聯繫。藍牙模塊上電後LED指示燈不斷閃亮,當有設備連接預期連接之後會隔一段閃兩下,藍牙串口助手也會有相應已連接的提示。

##Arduino代碼編寫
新建一個工程,將下面代碼複製到工程內

#define STOP      0
#define FORWARD   1
#define BACKWARD  2
#define TURNLEFT  3
#define TURNRIGHT 4

int leftMotor1 = 4;
int leftMotor2 = 5;
int rightMotor1 = 6;
int rightMotor2 = 7;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(leftMotor1, OUTPUT);
  pinMode(leftMotor2, OUTPUT);
  pinMode(rightMotor1, OUTPUT);
  pinMode(rightMotor2, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  //usart read
  if(Serial.available()>0)
  {
    char cmd = Serial.read();//讀取藍牙模塊發送到串口的數據
  
    Serial.print(cmd);
    motorRun(cmd);
      
  }  
}
void motorRun(int cmd)
{
  switch(cmd){
    case FORWARD:
      Serial.println("FORWARD"); //輸出狀態
      digitalWrite(leftMotor1, HIGH);
      digitalWrite(leftMotor2, LOW);
      digitalWrite(rightMotor1, HIGH);
      digitalWrite(rightMotor2, LOW);
      break;
     case BACKWARD:
      Serial.println("BACKWARD"); //輸出狀態
      digitalWrite(leftMotor1, LOW);
      digitalWrite(leftMotor2, HIGH);
      digitalWrite(rightMotor1, LOW);
      digitalWrite(rightMotor2, HIGH);
      break;
     case TURNLEFT:
      Serial.println("TURN  LEFT"); //輸出狀態
      digitalWrite(leftMotor1, HIGH);
      digitalWrite(leftMotor2, LOW);
      digitalWrite(rightMotor1, LOW);
      digitalWrite(rightMotor2, HIGH);
      break;
     case TURNRIGHT:
      Serial.println("TURN  RIGHT"); //輸出狀態
      digitalWrite(leftMotor1, LOW);
      digitalWrite(leftMotor2, HIGH);
      digitalWrite(rightMotor1, HIGH);
      digitalWrite(rightMotor2, LOW);
      break;
     default:
      Serial.println("STOP"); //輸出狀態
      digitalWrite(leftMotor1, LOW);
      digitalWrite(leftMotor2, LOW);
      digitalWrite(rightMotor1, LOW);
      digitalWrite(rightMotor2, LOW);
  }
}

  朋友們大概也發現了,這個代碼和上一篇的代碼基本上相同,只不過增加了串口的內容。

##代碼詳解
  串口初始化函數,想要通過串口的庫函數對串口進行操作,必須在void set_up()函數中對其進行初始化。

Serial.begin(9600);

  在void loop()函數內,加入了檢測串口接收內容的函數,並將接收到的命令輸入到 void motorRun(int cmd)函數中控制小車運動。

if(Serial.available()>0)
  {
    char cmd = Serial.read();
  
    Serial.print(cmd);
    motorRun(cmd);
  }  

藍牙小車測試

  下載程序之後,重新連接藍牙模塊,切換到我們自定義的按鍵界面,快試試藍牙遙控小車吧。

附件

安卓手機藍牙串口點擊下載,也可以複製鏈接 https://download.csdn.net/download/qq_16775293/11165678 到瀏覽器下載。

歡迎各位有興趣的朋友加入Q羣1:511385161 點評、交流(已滿,請大家移步2羣)
歡迎各位有興趣的朋友加入Q羣2:638346596 點評、交流

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章