兒子遙控車的遙控器不見了,剛好最近在研究Arduino ,所以就來實作一下,如何將現有的車子改裝,用Arduino來控制,並由Ardroid手機來操作。
一、拆設備
其實內裝就一個有無線裝置的IC板,去控制二顆直流馬達的前進/後退,左轉/右轉。就把它拆了。
二、建置Arduino
Arduino只是一個微電腦控制器,為了控制2顆直流馬達,因此需要 IC L293D,無線傳輸的部份我選擇了藍芽模組HC05
接線:
接線接完後就要寫Artduino程式,透過程式來控制馬達的作動。
三、通訊協定(Protocol)
預期想法是如此,手機會經由藍芽發出一些字串,讓車子能透過這些字串來作動。
因為通訊協定是這樣
起始字元 控制碼 結束字元
起始字元
0: stop car
1: 讀取控制碼
控制碼
3:前進
4:後退
5:左轉
6:右轉
結束字元 e
因此彷照上述協定,所撰寫的程式如下:
#include <SoftwareSerial.h>
SoftwareSerial BT(10, 9); // BT TX->D10 , BT RX->D9
const byte ledPin = 13;
char val; // 儲存接收資料的變數
const int motor1a = 4;
const int motor2a = 5;
const int EA = 3;
const int EB = 6;
const int motor3a = 7;
const int motor4a = 8;
const byte speed=150;
int mode;
char totalcommand[16];
int state;
int index;
void setup()
{
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
BT.begin(9600);
// 藍牙連線成功後,發佈「準備好了」訊息。
BT.println("BT is ready!");
pinMode(motor1a,OUTPUT);
pinMode(motor2a,OUTPUT);
pinMode(EA,OUTPUT);
pinMode(motor3a,OUTPUT);
pinMode(motor4a,OUTPUT);
pinMode(EB,OUTPUT);
}
void loop()
{
if(BT.available() )
{
val = BT.read();
switch(state)
{
case 0:
if(val=='0')
{
analogWrite(EA,0);
analogWrite(EB,0);
Serial.println("stop car");
}
else if(val=='1')
{
analogWrite(EA,0);
Serial.println("stop carX");
}
else if(val=='2')
{
analogWrite(EB,0);
Serial.println("stop carY");
}
else if(val=='3') //forward
{
state=1;
mode=3;
index=0;
for( int i = 0; i < sizeof(tcmd); ++i )
{
tcmd[i] = (char)0;
}
}
else if(val=='4')//back
{
state=1;
mode=4;
index=0;
for( int i = 0; i < sizeof(tcmd); ++i )
{
tcmd[i] = (char)0;
}
}
else if(val=='5')//left
{
state=1;
mode=5;
index=0;
for( int i = 0; i < sizeof(tcmd); ++i )
{
tcmd[i] = (char)0;
}
}
else if(val=='6')//right
{
state=1;
mode=6;
index=0;
for( int i = 0; i < sizeof(tcmd); ++i )
{
tcmd[i] = (char)0;
}
}
break;
case 1:
if(val=='e')
{
switch(mode)
{
case 3:
Serial.println("foward");
analogWrite(EB,speed);
digitalWrite(motor3a,LOW);
digitalWrite(motor4a,HIGH);
break;
case 4:
Serial.println("Back");
analogWrite(EB,speed);
digitalWrite(motor3a,HIGH);
digitalWrite(motor4a,LOW);
break;
case 5:
Serial.println("left");
analogWrite(EA,speed);
digitalWrite(motor1a,LOW);
digitalWrite(motor2a,HIGH);
break;
case 6:
Serial.println("right");
analogWrite(EA,speed);
digitalWrite(motor1a,HIGH);
digitalWrite(motor2a,LOW);
break;
}
state=0;
mode=0;
}
else
{
tcmd[index]=val;
index++;
}
break;
}
}
}
四、當我用Arduino UNO作完實驗後,確定可行後,就銲電路,並使用Arduino pro板,用雙面膠裝在車上。
試跑後,發現3顆AA電池跑不動,故改裝用行動電源來控制。Pretty Good。
五、硬體完成後,開始要寫Android App,使用的開發環境是App Inventor 2。參考
網路用APP Inventro藍芽溝通教學後,立馬自已寫一個。
這在裡推薦一下,MIT AI2 Companion這個APP,當電腦開發完,只要你手機路電腦網路有連結,它會直接將最後更改完的結果傳送到您的手機,方便你測試。
六、完成囉! Enjoy it !!
我兒子很愛。