藍牙遙控車-以傑森創工智慧車套件為例

經過前面幾篇教學,大家應該已能完全控制Arduino小車了,恭喜!接下來我們就要進入這個套件最有挑戰的一個功能,就是藍牙遙控!

傑森必須說在最前面,因為這個範例用的是HC-05,所以只支援Android手機,iPhone不行哦!

購買智慧車套件:
https://www.jmaker.com.tw/products/arduino-car

首先我們準備好了一個預先寫好的APP給大家,這是用App Inventor開發的,在這裡提供UI和程式方塊,有興趣的朋友可以參考然後自行再修改。

Android手機APP安裝檔APK下載:
http://jmaker.banner.tw/doc/test_blue.apk

如果是第一次按裝APK的檔案,手機會詢問你是不是要開啟權限,啟用就可以了。

接下來就是接線囉,L298N部份和之前的範相同,若還不熟的朋友可以回頭去看教學。

L298N入門:
https://blog.jmaker.com.tw/arduino-car-l298n/

剩下的就只有HC-05的接線了,只有4條線,VCC接5V,GND接GND,RXD接PIN3,TXD接PIN2,就完成了。

程式部份蠻簡單的,先用SoftwareSerial建立BT物件,利用它來和我們的HC-05溝通。再來就是讓UNO讀取從APP傳過去的訊息,APP基本上就是傳出w,x,a,d,s,分別代表前進,後退,左轉,右轉,停止。

讀到訊息後,用swtich case去依讀到的指令讓車子運作,L298N的副程式我們早就寫好了,所以這部份真的很簡單是吧!


//本範例用在傑森創工的智慧車套件上。
//讓車子可以利用HC-05藍牙模組和手機上的APP結合,可以用手機控制智慧車。
//套件購買網址:https://www.jmaker.com.tw/products/arduino-car

#include  <SoftwareSerial.h>
SoftwareSerial BT(2, 3); // RX | TX 這裡是指UNO板上的RX和TX,所以和HC-05的RX TX相反哦!
                          //若一直測試都收到不訊號,可以試著這裡相反試試,可能是接錯了。
char cmd;

//左馬達控制設定
const byte LEFT1 = 8; //IN1
const byte LEFT2 = 9; //IN2
const byte LEFT_PWM = 10;
//右馬達控制設定
const byte RIGHT1 = 7; //IN3
const byte RIGHT2 = 6; //IN4
const byte RIGHT_PWM = 5;
//設定PWM輸出值(代表的是車子的速度)
byte motorspeed = 130;

void forward(){
  digitalWrite(LEFT1, HIGH);
  digitalWrite(LEFT2, LOW);
  analogWrite(LEFT_PWM, motorspeed);
  //右輪·因在小車上馬達安装方向左右兩個是相
  digitalWrite(RIGHT1, LOW);
  digitalWrite (RIGHT2, HIGH);
  analogWrite(RIGHT_PWM, motorspeed);
}

void backward(){ //後退
  digitalWrite(LEFT1, LOW);
  digitalWrite (LEFT2, HIGH);
  analogWrite(LEFT_PWM, motorspeed);
  digitalWrite(RIGHT1, HIGH);
  digitalWrite(RIGHT2, LOW);
  analogWrite(RIGHT_PWM, motorspeed);
}

void turnLeft(){//左轉
  //左輪不動,右輪動(速度為0)
  analogWrite(LEFT_PWM, 0);
  digitalWrite(RIGHT1, LOW);
  digitalWrite (RIGHT2, HIGH);
  analogWrite(RIGHT_PWM, motorspeed);
}

void turnRight(){//右轉
  //右輪不動,左輪動(速度為0)
  digitalWrite(LEFT1, HIGH);
  digitalWrite(LEFT2, LOW);
  analogWrite(LEFT_PWM, motorspeed);
  analogWrite(RIGHT_PWM, 0);
}

void stopMotor() {
  analogWrite(LEFT_PWM, 0);
  analogWrite(RIGHT_PWM, 0);
}

void setup(){ 
  Serial.begin(9600);
  BT.begin(38400); //依藍牙模組的baud rate設定, HC-05一般是38400,但有些批號也可能是9600

  //設定每一個PIN的模式
  pinMode(LEFT1, OUTPUT);
  pinMode(LEFT2, OUTPUT);
  pinMode(LEFT_PWM, OUTPUT);
  pinMode(RIGHT1, OUTPUT);
  pinMode(RIGHT2, OUTPUT);
  pinMode(RIGHT_PWM, OUTPUT);
}
void loop() {
  if(BT.available()) {
    //讀取APP傳來的資料
    cmd = BT.read();
    switch(cmd) {
      case 'w': //接收到w,前進
        forward();
        break;
      case 'x': //接收到x,後退
        backward();
        break;
      case 'a': //接收到a,左轉
        turnLeft();
        break;
      case 'd': //接收到d,右轉
        turnRight();
        break;
      case 's': //接收到s,停止
        stopMotor();
        break;
    }
  }
}


Arduino 智慧車完整套件 避障 循跡 藍牙控制

$945

立刻購買