“(RB-13K079)AS-4WD超聲波手勢操控機(jī)器人”的版本間的差異

來自ALSROBOT WiKi
跳轉(zhuǎn)至: 導(dǎo)航、 搜索
(以“ ==產(chǎn)品概述== 超聲波作為智能車避障的一種重要手段,以其避障實(shí)現(xiàn)便,計(jì)算簡單,易于...”為內(nèi)容創(chuàng)建頁面)
 
?測試程序
第113行: 第113行:
 
* 大按鈕模塊接數(shù)字口6,用于啟動(dòng)方向盤。
 
* 大按鈕模塊接數(shù)字口6,用于啟動(dòng)方向盤。
 
===測試程序===
 
===測試程序===
 +
====方向盤端程序===
 +
<pre style="color:blue">
 +
int Button=6;              //定義Button為數(shù)字口6
 +
int z;                      //定義變量z
 +
int b;
 +
int duration_1;            //定義變量duration_1用來存儲(chǔ)脈沖
 +
int distance_1;            //定義變量distance_1用來存儲(chǔ)距離值
 +
int srfPin_1 = 2;          //定義srfPin_1為數(shù)字口2
 +
int val1;
 +
int duration_2;            //定義變量duration_2用來存儲(chǔ)脈沖
 +
int distance_2;            //定義變量distance_2用來存儲(chǔ)距離值
 +
int srfPin_2 = 3;          //定義srfPin_2為數(shù)字口3
 +
int val2;
 +
int duration_3;            //定義變量duration_3用來存儲(chǔ)脈沖
 +
int distance_3;            //定義變量distance_3用來存儲(chǔ)距離值
 +
int srfPin_3 = 4;          //定義srfPin_3為數(shù)字口4
 +
int val3;
 +
int duration_4;            //定義變量duration_4用來存儲(chǔ)脈沖
 +
int distance_4;            //定義變量distance_4用來存儲(chǔ)距離值
 +
int srfPin_4 = 5;          //定義srfPin_4為數(shù)字口5
 +
int val4;
 +
void setup()
 +
{
 +
  Serial.begin(115200);    //設(shè)定波特率為115200 
 +
  pinMode(srfPin_1,OUTPUT);  //定義srfPin1為輸出模式
 +
  pinMode(srfPin_2,OUTPUT);  //定義srfPin1為輸出模式
 +
  pinMode(srfPin_3,OUTPUT);  //定義srfPin1為輸出模式
 +
  pinMode(srfPin_4,OUTPUT);  //定義srfPin1為輸出模式
 +
  pinMode(Button,INPUT);    //定義Button為輸入模式
 +
}
 +
void loop()
 +
{
 +
if(LOW == digitalRead(Button))
 +
    b=1;
 +
    else
 +
    b=0;
 +
 
 +
while(b)
 +
{
 +
val1=Ultrasonic_1(z);        //前超聲波返回距離值賦值給val1
 +
val2=Ultrasonic_2(z);        //后超聲波返回距離值賦值給val2
 +
      val3=Ultrasonic_3(z);        //左超聲波返回距離值賦值給val3
 +
      val4=Ultrasonic_4(z);        //右超聲波返回距離值賦值給val4
 +
      if((val1>15)&&(val2>15)&&(val3>15)&&(val4>15))
 +
      Serial.print('T');
 +
if((val1<15)&&(val3<15))
 +
      Serial.print('x');
 +
      else if((val1<15)&&(val1<val3)&&(val3<val4))
 +
      Serial.print('q');
 +
      if((val3<15)&&(val4>15)&&(val3<val1)&&(val3<val2))     
 +
        Serial.print('l');
 +
      if((val1<15)&&(val4<15))
 +
        Serial.print('y');
 +
      else if((val1<15)&&(val1<val4)&&(val4<val3))
 +
        Serial.print('q');
 +
      if((val4<15)&&(val3>15)&&(val4<val1)&&(val4<val2))     
 +
        Serial.print('r');
 +
    if((val2<15)&&(val3<15))
 +
        Serial.print('m');
 +
      else if((val2<15)&&(val2<val3)&&(val3<val4))
 +
        Serial.print('h');
 +
      if((val2<15)&&(val4<15))
 +
        Serial.print('n');
 +
      else if((val2<15)&&(val2<val4)&&(val4<val3))
 +
        Serial.print('h');
 +
      if((val3<15)&&(val4<15))
 +
        Serial.print('T');
 +
      if((val1<15)&&(val2<15))
 +
        Serial.print('T');
 +
    }
 +
}
 +
 +
int Ultrasonic_1(int distance_1)
 +
{
 +
  digitalWrite(srfPin_1, LOW);            //高電平觸發(fā)前發(fā)送2微秒的低電平
 +
  delayMicroseconds(2);                  //確保在發(fā)送高電平
 +
  digitalWrite(srfPin_1, HIGH);          //發(fā)送10微秒的高電平開始檢測
 +
  delayMicroseconds(10);
 +
  digitalWrite(srfPin_1, LOW);            //等待脈沖返回前發(fā)送一個(gè)低電平
 +
  pinMode(srfPin_1, INPUT);
 +
  duration_1 = pulseIn(srfPin_1, HIGH);  //從URF02讀取脈沖
 +
  distance_1 = duration_1/58;            //除以58得到距離值
 +
  return distance_1;
 +
}
 +
 +
int Ultrasonic_2(int distance_2)
 +
 +
  digitalWrite(srfPin_2, LOW);            //高電平觸發(fā)前發(fā)送2微秒的低電平
 +
  delayMicroseconds(2);
 +
  digitalWrite(srfPin_2, HIGH);          // 發(fā)送10微秒的高電平開始檢測
 +
  delayMicroseconds(10);
 +
  digitalWrite(srfPin_2, LOW);            //等待脈沖返回前發(fā)送一個(gè)低電平
 +
  pinMode(srfPin_2, INPUT);
 +
  duration_2 = pulseIn(srfPin_2, HIGH);  //從URF02讀取脈沖
 +
  distance_2 = duration_2/58;            //除以58得到距離值
 +
  return distance_2;
 +
}
 +
int Ultrasonic_3(int distance_3)
 +
 +
  digitalWrite(srfPin_3, LOW);            //高電平觸發(fā)前發(fā)送2微秒的低電平
 +
  delayMicroseconds(2);
 +
digitalWrite(srfPin_3, HIGH);          //發(fā)送10微秒的高電平開始檢測
 +
  delayMicroseconds(10);
 +
  digitalWrite(srfPin_3, LOW);            //等待脈沖返回前發(fā)送一個(gè)低電平
 +
  pinMode(srfPin_3, INPUT);
 +
  duration_3 = pulseIn(srfPin_3, HIGH);  //從URF02讀取脈沖
 +
  distance_3 = duration_3/58;            //除以58得到距離值
 +
  return distance_3;
 +
}
 +
int Ultrasonic_4(int distance_4)
 +
 +
  digitalWrite(srfPin_4, LOW);            //高電平觸發(fā)前發(fā)送2微秒的低電平
 +
  delayMicroseconds(2);
 +
  digitalWrite(srfPin_4, HIGH);          //發(fā)送10微秒的高電平開始檢測
 +
  delayMicroseconds(10);
 +
  digitalWrite(srfPin_4, LOW);            //等待脈沖返回前發(fā)送一個(gè)低電平
 +
  pinMode(srfPin_4, INPUT);
 +
  duration_4 = pulseIn(srfPin_4, HIGH);  //從URF02讀取脈沖
 +
  distance_4 = duration_4/58;            //除以58得到距離值
 +
  return distance_4;   
 +
}
 +
</pre>
 +
 +
===平臺(tái)端程序===
 +
<pre style="color:blue">
 +
void setup()
 +
{
 +
  Serial.print('a');
 +
  Serial.begin(115200); //設(shè)定波特率為115200
 +
  pinMode(8,OUTPUT);    //定義I3接口
 +
  pinMode(9,OUTPUT);    //定義I4接口
 +
  pinMode(10,OUTPUT);    //定義EB(PWM調(diào)速)接口
 +
  pinMode(5,OUTPUT);    //定義EA(PWM調(diào)速)接口
 +
  pinMode(6,OUTPUT);    //定義I2接口
 +
  pinMode(7,OUTPUT);    //定義I1接口
 +
}
 +
 +
void loop()
 +
{     
 +
  switch(Serial.read())
 +
      {
 +
case 'h': Back(); break;
 +
case 'q': Goahead(); break;
 +
case 'l': Turn_left(); break;
 +
case 'r': Turn_right(); break;
 +
        case 'T': Stop(); break;
 +
        case 'x': Goahead1(); break;
 +
        case 'y': Goahead2(); break;
 +
        case 'm': Back1(); break;
 +
        case 'n': Back2(); break;
 +
      }
 +
}
 +
 +
void Back()// 
 +
 +
    analogWrite(5,90);      //輸入模擬值進(jìn)行設(shè)定速度
 +
    digitalWrite(6,LOW);    //使直流電機(jī)(左)逆時(shí)針轉(zhuǎn)
 +
    digitalWrite(7,HIGH);
 +
    analogWrite(10,105);    //輸入模擬值進(jìn)行設(shè)定速度
 +
    digitalWrite(8,LOW);    //使直流電機(jī)(右)順時(shí)針轉(zhuǎn)
 +
    digitalWrite(9,HIGH);
 +
}
 +
void Back1()// 
 +
 +
    analogWrite(5,80);    //輸入模擬值進(jìn)行設(shè)定速度
 +
    digitalWrite(6,LOW);  //使直流電機(jī)(左)逆時(shí)針轉(zhuǎn)
 +
    digitalWrite(7,HIGH);
 +
    analogWrite(10,50);  //輸入模擬值進(jìn)行設(shè)定速度
 +
    digitalWrite(8,LOW);  //使直流電機(jī)(右)順時(shí)針轉(zhuǎn)
 +
    digitalWrite(9,HIGH);
 +
}
 +
 +
void Back2()// 
 +
 +
    analogWrite(5,50);    //輸入模擬值進(jìn)行設(shè)定速度
 +
    digitalWrite(6,LOW);  //使直流電機(jī)(左)逆時(shí)針轉(zhuǎn)
 +
    digitalWrite(7,HIGH);
 +
    analogWrite(10,105);  //輸入模擬值進(jìn)行設(shè)定速度
 +
    digitalWrite(8,LOW);  //使直流電機(jī)(右)順時(shí)針轉(zhuǎn)
 +
    digitalWrite(9,HIGH);
 +
}
 +
 +
void Goahead()//前進(jìn)
 +
{
 +
    analogWrite(5,90);    //輸入模擬值進(jìn)行設(shè)定速度
 +
    digitalWrite(6,HIGH);  //使直流電機(jī)(左)順時(shí)針轉(zhuǎn)
 +
    digitalWrite(7,LOW); 
 +
    analogWrite(10,105);  //輸入模擬值進(jìn)行設(shè)定速度
 +
    digitalWrite(8,HIGH);  //使直流電機(jī)(右)逆時(shí)針轉(zhuǎn)
 +
    digitalWrite(9,LOW); 
 +
}
 +
 +
void Stop()//停止
 +
{
 +
    digitalWrite(6,HIGH);  //使直流電機(jī)(左)制動(dòng)
 +
    digitalWrite(7,HIGH);
 +
    digitalWrite(8,HIGH);  //使直流電機(jī)(右)制動(dòng)
 +
    digitalWrite(9,HIGH); 
 +
}
 +
 +
void Turn_right()          //右轉(zhuǎn)   
 +
{
 +
    analogWrite(5,155);    //輸入模擬值進(jìn)行設(shè)定速度
 +
    digitalWrite(6,LOW);  //使直流電機(jī)(左)逆時(shí)針轉(zhuǎn)
 +
digitalWrite(7,HIGH); 
 +
    analogWrite(10,140);  //輸入模擬值進(jìn)行設(shè)定速度
 +
    digitalWrite(8,HIGH);  //使直流電機(jī)(右)逆時(shí)針轉(zhuǎn)
 +
    digitalWrite(9,LOW); 
 +
}
 +
 +
void Turn_left()//左轉(zhuǎn)
 +
{
 +
    analogWrite(5,140);    //輸入模擬值進(jìn)行設(shè)定速度
 +
    digitalWrite(6,HIGH);  //使直流電機(jī)(左)逆時(shí)針轉(zhuǎn)
 +
    digitalWrite(7,LOW); 
 +
    analogWrite(10,155);  //輸入模擬值進(jìn)行設(shè)定速度
 +
    digitalWrite(8,LOW);  //使直流電機(jī)(右)順時(shí)針轉(zhuǎn)
 +
    digitalWrite(9,HIGH); 
 +
}
 +
void Goahead1()//前進(jìn)
 +
{
 +
    analogWrite(5,130);    //輸入模擬值進(jìn)行設(shè)定速度
 +
    digitalWrite(6,HIGH);  //使直流電機(jī)(左)順時(shí)針轉(zhuǎn)
 +
    digitalWrite(7,LOW); 
 +
    analogWrite(10,60);  //輸入模擬值進(jìn)行設(shè)定速度
 +
    digitalWrite(8,HIGH);  //使直流電機(jī)(右)逆時(shí)針轉(zhuǎn)
 +
    digitalWrite(9,LOW); 
 +
}
 +
void Goahead2()//前進(jìn)
 +
{
 +
    analogWrite(5,60);    //輸入模擬值進(jìn)行設(shè)定速度
 +
    digitalWrite(6,HIGH);  //使直流電機(jī)(左)順時(shí)針轉(zhuǎn)
 +
    digitalWrite(7,LOW); 
 +
    analogWrite(10,130);  //輸入模擬值進(jìn)行設(shè)定速度
 +
    digitalWrite(8,HIGH);  //使直流電機(jī)(右)逆時(shí)針轉(zhuǎn)
 +
    digitalWrite(9,LOW); 
 +
}
 +
</pre>

2015年9月28日 (一) 10:16的版本

RB-13K07901.png

目錄

產(chǎn)品概述

超聲波作為智能車避障的一種重要手段,以其避障實(shí)現(xiàn)便,計(jì)算簡單,易于做時(shí)控制,測量精度也能達(dá)到實(shí)用的要求,在未來汽車智能化進(jìn)程中必將得到廣泛。AS-4WD 超聲波手勢操控機(jī)器人采用4個(gè)RB-URF02 超聲波傳感器,對小車的方向進(jìn)行控制,并使用藍(lán)牙模塊進(jìn)行無線通信,實(shí)現(xiàn)無線控制4WD平臺(tái),本產(chǎn)品使用Carduino UNO控制器,此平臺(tái)設(shè)計(jì)可以配合各個(gè)版本Arduino,例如:Arduino Due、Arduino Mega2560等,同樣適合于樹莓派控制器,為開發(fā)帶來便利。產(chǎn)品為全鋁合金車體,結(jié)實(shí)耐用,四個(gè)馬達(dá)7.2V電壓獨(dú)立驅(qū)動(dòng),動(dòng)力強(qiáng)勁,結(jié)構(gòu)合理,便于擴(kuò)展;獨(dú)立散件包裝,讓您完全體驗(yàn)DIY的樂趣。

產(chǎn)品清單

RB-13K07902.png

技術(shù)參數(shù)

平臺(tái)參數(shù)

  1. 車輪直徑:65mm
  2. 車輪寬度:26mm
  3. 平臺(tái)長度:206mm
  4. 平臺(tái)寬度:200mm
  5. 平臺(tái)高度:65mm
  6. 平臺(tái)重量:620g
  7. 底盤距地面距離:13mm

平臺(tái)尺寸圖

RB13K00610.png

直流減速電機(jī)(1:48)

  1. 驅(qū)動(dòng)電機(jī)齒輪箱減速比:1:48
  2. 無負(fù)載轉(zhuǎn)速(3V):168RPM
  3. 無負(fù)載轉(zhuǎn)速(6V):300RPM
  4. 無負(fù)載時(shí)電流(3V):90mA
  5. 無負(fù)載時(shí)電流(6V):100mA
  6. 扭矩大小 (3V): 0.04N.m
  7. 扭矩大小 (6V): 0.08N.m
  8. 尺寸大小:70.50 mm×27.00 mm×23.00 mm(長×寬×高)
  9. 重量大小: 約30g

電控部分資料

Carduino UNO控制器

Carduino UNO相關(guān)資料及使用方法

雙H橋電機(jī)驅(qū)動(dòng)板

雙H橋電機(jī)驅(qū)動(dòng)板相關(guān)資料及使用方法

傳感器擴(kuò)展板

V5.0傳感器擴(kuò)展板相關(guān)資料及使用方法

大按鈕模塊

按壓式大按鈕模塊相關(guān)資料及使用方法

藍(lán)牙模塊

RB無線藍(lán)牙模塊相關(guān)資料及使用方法

超聲波傳感器

超聲波傳感器相關(guān)資料及使用方法

安裝步驟

步驟1:充電接口撥動(dòng)開關(guān)連接線制作

充電接口撥動(dòng)開關(guān)連接線制作步驟詳解

平臺(tái)安裝步驟

步驟1:平臺(tái)側(cè)板電機(jī)安裝

兩側(cè)電機(jī)安裝相同,注意安裝前將電機(jī)接線用電烙鐵焊接好,套上熱縮管加熱塑封。
使用零件:平臺(tái)側(cè)板*2個(gè)、直流減速電機(jī)*4個(gè)、M3*25螺絲*8個(gè)、M3六角螺母*8個(gè)

RB13K07403.png

步驟2:平臺(tái)底板安裝

使用零件:步驟1中安裝好電機(jī)的側(cè)板*2套、平臺(tái)底板*1個(gè)、M3*6螺絲*4個(gè)

RB13K07404.png

步驟3:雙H橋電機(jī)驅(qū)動(dòng)板安裝

驅(qū)動(dòng)板安裝方向隨意,注意同側(cè)電機(jī)接線方向順序,保證同側(cè)電機(jī)轉(zhuǎn)向是相同的。
使用零件:步驟2中的組合體、雙H橋直流電機(jī)驅(qū)動(dòng)板*1個(gè)、M3*10尼龍柱*4個(gè)、M3六角螺母*4個(gè)、M3*6螺絲*4個(gè)

RB13K07405.png

步驟4:電池盒安裝

電池盒可用雙面膠固定,后輪電機(jī)接線需插入杜邦線帽,接入步進(jìn)電機(jī)接口
使用零件:電池盒*1個(gè)或鋰電池*1塊

電池盒固定位置
鋰電池固定位置

步驟5:4WD端板安裝

使用零件:4WD端板*2個(gè)、步驟4中的組合體、M3*6螺絲*4個(gè)、M3六角螺母*4個(gè)

RB13K07407.png

步驟6:充電接口、撥動(dòng)開關(guān)安裝

使用零件:步驟1中制作好的充電開關(guān)接口連接線、4WD上板

RB13K07408.png

步驟7:Carduino UNO控制器安裝

使用零件:步驟6中的組合體、Carduino UNO控制器*1個(gè)、M3*10尼龍柱*3個(gè)、M3*6螺絲*3個(gè)、M3六角螺母*3個(gè)

RB13K07409.png

步驟8:4WD上板安裝

使用零件:4WD平臺(tái)上板*1個(gè)、步驟5中的組合體*1套、M3*6螺絲*4個(gè)

RB13K07412.png

步驟9:4WD輪子安裝

使用零件:步驟8中的組合體*1套、4WD輪子*4個(gè)

RB13K07413.png

步驟10:V5.0傳感器擴(kuò)展板插入

使用零件:V5.0傳感器擴(kuò)展板*1個(gè)、步驟9中安裝好的平臺(tái)*1套

RB13K07415.png

步驟11:藍(lán)牙模塊插入

注意:藍(lán)牙模塊插入前要對控制器進(jìn)行程序上傳,若插上藍(lán)牙模塊進(jìn)行程序上傳操作,會(huì)造成程序上傳不成功問題。
使用零件:步驟10中的組合體*1套、藍(lán)牙模塊*1個(gè)

RB-13K07903.png

整機(jī)測試

接線說明

  • 數(shù)字口2→接超聲波
  • 數(shù)字口10→接RB-421舵機(jī)
  • 數(shù)字口5→接雙H橋驅(qū)動(dòng)板的EB
  • 數(shù)字口6→接雙H橋驅(qū)動(dòng)板的I4
  • 數(shù)字口7→接雙H橋驅(qū)動(dòng)板的I3
  • 數(shù)字口8→接雙H橋驅(qū)動(dòng)板的I1
  • 數(shù)字口9→接雙H橋驅(qū)動(dòng)板的I2
  • 數(shù)字口11→接雙H橋驅(qū)動(dòng)板的EA

方向盤端制作

使用零件

  • Carduino UNO 控制器*1個(gè)
  • Arduino傳感器擴(kuò)展板 V5.0*1個(gè)
  • 超聲波傳感器*4
  • 大按鈕模塊*1
  • 藍(lán)牙模塊*1
  • 3P杜邦線*5

制作步驟

1.盤體制作:首先我們截取一塊邊長為20cm左右的正方形雪弗板(材料可自行選?。?。
2.大按鈕模塊固定:用螺絲將大按鈕模塊固定在雪弗板的中間位置用來啟動(dòng)方向盤。
3.超聲波傳感器固定:分別用螺絲將4個(gè)超聲波傳感器固定在雪弗板的4個(gè)直角上,用來識(shí)別手勢,超聲波與大按鈕模塊擺放如下圖所示,也可根據(jù)實(shí)際情況去擺放,一定要標(biāo)明方向。

RB-13K07904.png

方向盤接線

超聲波傳感器采用單線模式

  • UP超聲波傳感器接數(shù)字口2,用于識(shí)別前進(jìn)的手勢。
  • Down超聲波傳感器接數(shù)字口3,用于識(shí)別后退的手勢。
  • Left超聲波傳感器接數(shù)字口4,用于識(shí)別左轉(zhuǎn)手勢。
  • Right超聲波傳感器接數(shù)字口5,用于識(shí)別右轉(zhuǎn)手勢。
  • 大按鈕模塊接數(shù)字口6,用于啟動(dòng)方向盤。

測試程序

=方向盤端程序

int Button=6;               //定義Button為數(shù)字口6
int z;                      //定義變量z
int b;
int duration_1;             //定義變量duration_1用來存儲(chǔ)脈沖
int distance_1;             //定義變量distance_1用來存儲(chǔ)距離值
int srfPin_1 = 2;           //定義srfPin_1為數(shù)字口2
int val1;
int duration_2;             //定義變量duration_2用來存儲(chǔ)脈沖
int distance_2;             //定義變量distance_2用來存儲(chǔ)距離值
int srfPin_2 = 3;           //定義srfPin_2為數(shù)字口3
int val2;
int duration_3;             //定義變量duration_3用來存儲(chǔ)脈沖
int distance_3;             //定義變量distance_3用來存儲(chǔ)距離值
int srfPin_3 = 4;           //定義srfPin_3為數(shù)字口4
int val3;
int duration_4;             //定義變量duration_4用來存儲(chǔ)脈沖
int distance_4;             //定義變量distance_4用來存儲(chǔ)距離值
int srfPin_4 = 5;           //定義srfPin_4為數(shù)字口5
int val4;
void setup()
{
  		Serial.begin(115200);     //設(shè)定波特率為115200  
  		pinMode(srfPin_1,OUTPUT);  //定義srfPin1為輸出模式
  		pinMode(srfPin_2,OUTPUT);  //定義srfPin1為輸出模式
  		pinMode(srfPin_3,OUTPUT);  //定義srfPin1為輸出模式
  		pinMode(srfPin_4,OUTPUT);  //定義srfPin1為輸出模式
  		pinMode(Button,INPUT);     //定義Button為輸入模式
}
void loop()
{
 		if(LOW == digitalRead(Button))
    		b=1;
    	else
    		b=0;
  
while(b)
{
val1=Ultrasonic_1(z);        //前超聲波返回距離值賦值給val1
val2=Ultrasonic_2(z);        //后超聲波返回距離值賦值給val2
      val3=Ultrasonic_3(z);        //左超聲波返回距離值賦值給val3
      val4=Ultrasonic_4(z);        //右超聲波返回距離值賦值給val4
      if((val1>15)&&(val2>15)&&(val3>15)&&(val4>15))
      	Serial.print('T');
if((val1<15)&&(val3<15))
      	Serial.print('x');
      else if((val1<15)&&(val1<val3)&&(val3<val4))
      	Serial.print('q');
      if((val3<15)&&(val4>15)&&(val3<val1)&&(val3<val2))      
         Serial.print('l'); 
      if((val1<15)&&(val4<15))
         Serial.print('y');
      else if((val1<15)&&(val1<val4)&&(val4<val3))
         Serial.print('q');
      if((val4<15)&&(val3>15)&&(val4<val1)&&(val4<val2))      
         Serial.print('r'); 
     if((val2<15)&&(val3<15))
         Serial.print('m');
      else if((val2<15)&&(val2<val3)&&(val3<val4))
         Serial.print('h');
      if((val2<15)&&(val4<15))
         Serial.print('n');
      else if((val2<15)&&(val2<val4)&&(val4<val3))
         Serial.print('h');
      if((val3<15)&&(val4<15))
         Serial.print('T');
      if((val1<15)&&(val2<15))
         Serial.print('T');
    }
}

int Ultrasonic_1(int distance_1)
{ 
  		digitalWrite(srfPin_1, LOW);            //高電平觸發(fā)前發(fā)送2微秒的低電平
  		delayMicroseconds(2);                   //確保在發(fā)送高電平
  		digitalWrite(srfPin_1, HIGH);           //發(fā)送10微秒的高電平開始檢測
  		delayMicroseconds(10);
  		digitalWrite(srfPin_1, LOW);            //等待脈沖返回前發(fā)送一個(gè)低電平
  		pinMode(srfPin_1, INPUT);
  		duration_1 = pulseIn(srfPin_1, HIGH);   //從URF02讀取脈沖
  		distance_1 = duration_1/58;             //除以58得到距離值
  		return distance_1;
}

int Ultrasonic_2(int distance_2)
{   
  		digitalWrite(srfPin_2, LOW);            //高電平觸發(fā)前發(fā)送2微秒的低電平
  		delayMicroseconds(2);
  		digitalWrite(srfPin_2, HIGH);           // 發(fā)送10微秒的高電平開始檢測
  		delayMicroseconds(10);
  		digitalWrite(srfPin_2, LOW);            //等待脈沖返回前發(fā)送一個(gè)低電平
  		pinMode(srfPin_2, INPUT);
  		duration_2 = pulseIn(srfPin_2, HIGH);   //從URF02讀取脈沖
  		distance_2 = duration_2/58;             //除以58得到距離值
  		return distance_2;
}
int Ultrasonic_3(int distance_3)
{   
  		digitalWrite(srfPin_3, LOW);            //高電平觸發(fā)前發(fā)送2微秒的低電平
  		delayMicroseconds(2);
 		digitalWrite(srfPin_3, HIGH);           //發(fā)送10微秒的高電平開始檢測
  		delayMicroseconds(10);
  		digitalWrite(srfPin_3, LOW);            //等待脈沖返回前發(fā)送一個(gè)低電平
  		pinMode(srfPin_3, INPUT);
  		duration_3 = pulseIn(srfPin_3, HIGH);   //從URF02讀取脈沖
  		distance_3 = duration_3/58;             //除以58得到距離值
  		return distance_3;
}
int Ultrasonic_4(int distance_4)
{   
  		digitalWrite(srfPin_4, LOW);            //高電平觸發(fā)前發(fā)送2微秒的低電平
  		delayMicroseconds(2);
  		digitalWrite(srfPin_4, HIGH);           //發(fā)送10微秒的高電平開始檢測
  		delayMicroseconds(10);
  		digitalWrite(srfPin_4, LOW);            //等待脈沖返回前發(fā)送一個(gè)低電平
  		pinMode(srfPin_4, INPUT);
  		duration_4 = pulseIn(srfPin_4, HIGH);   //從URF02讀取脈沖
  		distance_4 = duration_4/58;             //除以58得到距離值
  		return distance_4;     
}

平臺(tái)端程序

void setup()
{
  		Serial.print('a');
  		Serial.begin(115200); //設(shè)定波特率為115200
  		pinMode(8,OUTPUT);     //定義I3接口
  		pinMode(9,OUTPUT);     //定義I4接口
  		pinMode(10,OUTPUT);    //定義EB(PWM調(diào)速)接口
  		pinMode(5,OUTPUT);     //定義EA(PWM調(diào)速)接口
  		pinMode(6,OUTPUT);     //定義I2接口
  		pinMode(7,OUTPUT);     //定義I1接口
}

void loop()
{      
   switch(Serial.read())
      {
			case 'h': Back();	break;
			case 'q': Goahead();	break;
			case 'l': Turn_left();	break;
			case 'r': Turn_right(); break;
         case 'T': Stop();	break;
         case 'x': Goahead1();	break;
         case 'y': Goahead2();	break;
         case 'm': Back1();	break;
         case 'n': Back2();	break;
      }
}

void Back()//  
{  
     analogWrite(5,90);      //輸入模擬值進(jìn)行設(shè)定速度
     digitalWrite(6,LOW);    //使直流電機(jī)(左)逆時(shí)針轉(zhuǎn)
     digitalWrite(7,HIGH);
     analogWrite(10,105);    //輸入模擬值進(jìn)行設(shè)定速度
     digitalWrite(8,LOW);    //使直流電機(jī)(右)順時(shí)針轉(zhuǎn)
     digitalWrite(9,HIGH);
}
void Back1()//  
{  
     analogWrite(5,80);    //輸入模擬值進(jìn)行設(shè)定速度
     digitalWrite(6,LOW);   //使直流電機(jī)(左)逆時(shí)針轉(zhuǎn)
     digitalWrite(7,HIGH);
     analogWrite(10,50);   //輸入模擬值進(jìn)行設(shè)定速度
     digitalWrite(8,LOW);   //使直流電機(jī)(右)順時(shí)針轉(zhuǎn)
     digitalWrite(9,HIGH);
}

void Back2()//  
{  
     analogWrite(5,50);    //輸入模擬值進(jìn)行設(shè)定速度
     digitalWrite(6,LOW);   //使直流電機(jī)(左)逆時(shí)針轉(zhuǎn)
     digitalWrite(7,HIGH);
     analogWrite(10,105);   //輸入模擬值進(jìn)行設(shè)定速度
     digitalWrite(8,LOW);   //使直流電機(jī)(右)順時(shí)針轉(zhuǎn)
     digitalWrite(9,HIGH);
}

void Goahead()//前進(jìn)
{
     analogWrite(5,90);    //輸入模擬值進(jìn)行設(shè)定速度
     digitalWrite(6,HIGH);  //使直流電機(jī)(左)順時(shí)針轉(zhuǎn)
     digitalWrite(7,LOW);  
     analogWrite(10,105);   //輸入模擬值進(jìn)行設(shè)定速度
     digitalWrite(8,HIGH);  //使直流電機(jī)(右)逆時(shí)針轉(zhuǎn)
     digitalWrite(9,LOW);   
}

void Stop()//停止
{
     digitalWrite(6,HIGH);  //使直流電機(jī)(左)制動(dòng)
     digitalWrite(7,HIGH);
     digitalWrite(8,HIGH);  //使直流電機(jī)(右)制動(dòng)
     digitalWrite(9,HIGH);   
}

void Turn_right()           //右轉(zhuǎn)    
{
     analogWrite(5,155);    //輸入模擬值進(jìn)行設(shè)定速度
     digitalWrite(6,LOW);   //使直流電機(jī)(左)逆時(shí)針轉(zhuǎn)
digitalWrite(7,HIGH);  
     analogWrite(10,140);   //輸入模擬值進(jìn)行設(shè)定速度
     digitalWrite(8,HIGH);  //使直流電機(jī)(右)逆時(shí)針轉(zhuǎn)
     digitalWrite(9,LOW);   
}

void Turn_left()//左轉(zhuǎn)
{
     analogWrite(5,140);    //輸入模擬值進(jìn)行設(shè)定速度
     digitalWrite(6,HIGH);   //使直流電機(jī)(左)逆時(shí)針轉(zhuǎn)
     digitalWrite(7,LOW);  
     analogWrite(10,155);   //輸入模擬值進(jìn)行設(shè)定速度
     digitalWrite(8,LOW);   //使直流電機(jī)(右)順時(shí)針轉(zhuǎn)
     digitalWrite(9,HIGH);  
}
void Goahead1()//前進(jìn)
{
     analogWrite(5,130);    //輸入模擬值進(jìn)行設(shè)定速度
     digitalWrite(6,HIGH);  //使直流電機(jī)(左)順時(shí)針轉(zhuǎn)
     digitalWrite(7,LOW);  
     analogWrite(10,60);   //輸入模擬值進(jìn)行設(shè)定速度
     digitalWrite(8,HIGH);  //使直流電機(jī)(右)逆時(shí)針轉(zhuǎn)
     digitalWrite(9,LOW);   
}
void Goahead2()//前進(jìn)
{
     analogWrite(5,60);    //輸入模擬值進(jìn)行設(shè)定速度
     digitalWrite(6,HIGH);  //使直流電機(jī)(左)順時(shí)針轉(zhuǎn)
     digitalWrite(7,LOW);  
     analogWrite(10,130);   //輸入模擬值進(jìn)行設(shè)定速度
     digitalWrite(8,HIGH);  //使直流電機(jī)(右)逆時(shí)針轉(zhuǎn)
     digitalWrite(9,LOW);   
}