Arduino入門筆記(9):藍牙模塊及第一輛藍牙遙控小車


轉載請注明:@小五義 http://www.cnblogs.com/xiaowuyi 

歡迎加入討論群  64770604

一、本次實驗所需器材

1、Arduino UNO板 https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-15820725129.16.AtgoEm&id=545093340395

2、藍牙模塊

3、藍牙小車底盤(可從淘寶網購買)

4、L298驅動模塊:1個

3、面包板:1個

二、藍牙模塊的使用

實驗:給藍牙模塊發送h,回復i am here;發送b,回復see you.

硬件連接:

Untitled Sketch 2_bb

 

代碼:

char getstr;
void setup()
{
  Serial.begin(9600);
}
void loop()
{
  getstr=Serial.read();
  if(getstr=='h')
  {
    Serial.println("I am here!");
  }
  else if(getstr=='b'){
    Serial.println("See you!");
  }
}

將以上代碼寫入arduino時,要注意先將藍牙斷開,寫入完成后,再連上藍牙,否則會出錯。

手機端下載一個bluetooth spp或者藍牙串口程序即可,這里我用的是http://www.mumayi.com/android-92724.html

然后通過手機與該藍牙模塊進行連接,一般默認連接碼是1234或者0000。連接后,發送h,會顯示I am here,發送b,會顯示See you!

三、藍牙遙控小車制作

1、從網上購買了藍牙小車底盤,組裝后如下圖:

11

2、L298驅動模塊

2222

該模塊的IN1、IN2、IN3、IN4分別連接arduino的12、11、10、9接口,電源12V口接arduino的5V,GND接地。

例子:

char getstr;
int in1=12;
int in2=11;
int in3=10;
int in4=9;
//上面定義了板上的4個控制端,12一組,34一組
void _mRight(int pin1,int pin2)//當in1和in2中有一個接高位時,電機會向某一方向轉動

{
  digitalWrite(pin1,HIGH);
  digitalWrite(pin2,LOW);
}
void _mLeft(int pin1,int pin2)//同上
{
  digitalWrite(pin1,LOW);
  digitalWrite(pin2,HIGH);
}
void _mStop(int pin1,int pin2)//緊急制動,實際就是將電機兩個端短接了
{
  digitalWrite(pin1,HIGH);
  digitalWrite(pin2,HIGH);
}
void setup()
{
  Serial.begin(9600);
  pinMode(in1,OUTPUT);
  pinMode(in2,OUTPUT);
  pinMode(in3,OUTPUT);
  pinMode(in4,OUTPUT);
  //下面程序開始時讓控制端都為高電平,電機保持不動。
  digitalWrite(in1,HIGH);
  digitalWrite(in2,HIGH);
  digitalWrite(in3,HIGH);
  digitalWrite(in4,HIGH);
}

void loop()
{
  getstr=Serial.read();
  if(getstr=='f')
  {
    Serial.println("go forward!");
    _mStop(in1,in2);
    _mStop(in3,in4);   
    _mRight(in1,in2);
    _mRight(in3,in4);
  }
  else if(getstr=='b'){
    Serial.println("go back!");
    _mStop(in1,in2);
    _mStop(in3,in4);
    _mLeft(in1,in2);
    _mLeft(in3,in4);
  }
  else if(getstr=='l'){
    Serial.println("go left!");
    _mStop(in1,in2);
    _mStop(in3,in4);
    _mRight(in1,in2);
    _mLeft(in3,in4);
  }
  else if(getstr=='r'){
    Serial.println("go right!");
    _mStop(in1,in2);
    _mStop(in3,in4);
    _mRight(in3,in4);
    _mLeft(in1,in2);
  }
  else if(getstr=='s'){
    Serial.println("Stop!");
    _mStop(in1,in2);
    _mStop(in3,in4);  
  }
}

注意,當輸入f\b\l\r時,無論前往、后退、左轉、右轉,電機都是先停一下,再轉,這樣電機都流暢。

3、藍牙模塊

接法與二中藍牙模塊的使用接法相同。

4、超聲波測距模塊

連接方法是將VCC接5V,GND接地,trig接5口,Echo接6口。

5、硬件連接圖

2014-3-12_20187-89

2014-3-12_201753-26

2014-3-12_201624-50

6、代碼

char getstr;
int in1=12;
int in2=11;
int in3=10;
int in4=9;
//上面定義了板上的4個控制端,12一組,34一組
int TrigPin = 5; 
int EchoPin = 6;
float cm;
int i=0;//記錄測量次數,每5次取一下平均值
float cmsum;//計算5次總值
float cmeve;//計算5次平均值

void _mRun(int pin1,int pin2)//電機右轉,電機到底是右轉還是左轉取決於電機端的接線和控制腳的順序
{
  digitalWrite(pin1,HIGH);
  digitalWrite(pin2,LOW);
}
void _mBack(int pin1,int pin2)//同上
{
  digitalWrite(pin1,LOW);
  digitalWrite(pin2,HIGH);
}
void _mStop(int pin1,int pin2)//緊急制動,實際就是將電機兩個端短接了
{
  digitalWrite(pin1,HIGH);
  digitalWrite(pin2,HIGH);
}
 
void setup()
{
  Serial.begin(9600);
  pinMode(in1,OUTPUT);
  pinMode(in2,OUTPUT);
  pinMode(in3,OUTPUT);
  pinMode(in4,OUTPUT);
  pinMode(TrigPin, OUTPUT);
  pinMode(EchoPin, INPUT); 
  //下面程序開始時讓控制端都為高電平,電機保持不動。
  digitalWrite(in1,HIGH);
  digitalWrite(in2,HIGH);
  digitalWrite(in3,HIGH);
  digitalWrite(in4,HIGH);
}

void loop()
{
  getstr=Serial.read();
  delayMicroseconds(60);
  digitalWrite(TrigPin, HIGH);
  delayMicroseconds(60);
  digitalWrite(TrigPin, LOW);
  
  cm = pulseIn(EchoPin, HIGH) / 58.0; //將回波時間換算成cm 
  cm = (int(cm * 100.0)) / 100.0; //保留兩位小數 
  
  if (i==5){//連接測5次,計算平均值,如果小於10厘米則緊急停車
    i=0;
    cmeve=cmsum/5;
    cmsum=0;
    
    if (cmeve<10 and cmeve>0) {
      Serial.println(cmeve);
      _mStop(in1,in2);
      _mStop(in3,in4);
    } 
  }
  else {
    i=i+1;
    cmsum=cmsum+cm;
  }


  if(getstr=='f')
  {
    Serial.println("go forward!");
    _mStop(in1,in2);
    _mStop(in3,in4);    
    _mRun(in1,in2);
    _mRun(in3,in4);
  }
  else if(getstr=='b'){
    Serial.println("go back!");
    _mStop(in1,in2);
    _mStop(in3,in4); 
    
    _mBack(in1,in2);
    _mBack(in3,in4);
  }
  else if(getstr=='l'){
    Serial.println("go left!");
    _mStop(in1,in2);
    _mStop(in3,in4); 
    
    _mRun(in1,in2);
    _mBack(in3,in4);
  }
  else if(getstr=='r'){
    Serial.println("go left!");
    _mStop(in1,in2);
    _mStop(in3,in4); 
    
    _mRun(in3,in4);
    _mBack(in1,in2);
  }
  else if(getstr=='s'){
    Serial.println("Stop!");
    _mStop(in1,in2);
    _mStop(in3,in4);   
  }
}

7、視頻


免責聲明!

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



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