亞博 Arduino智能小車實驗報告


亞博 Arduino智能小車實踐報告

一.     程序安裝准備

首先安裝了Arduino板載USB轉串口CH340驅動安裝包,

若上述程序安裝成功,則可以在我的電腦中找到相應的端口

本機端口號為COM3

然后安裝了Arduino開發軟件arduino-1.0.5-windows。

安裝好后可以打開界面

對鈎是編譯程序,

向右的箭頭是編譯程序加燒錄程序

燒錄成功后會出現以下界面

右上角那項是在用超聲波時檢測精確數據時使用,

可以看到數據時分的精確

這里右下角應該選擇9600baud

注意:每一次燒錄選擇端口在tools中選擇

與其他程序相同應該及一些簡單的快捷鍵,如:

Ctrl+N  新建

Ctrl+S  存儲

Ctrl+C  剪切

Ctrl+O  打開

等等。。。。。

 

為小車的制作在軟件上做好了准備。其中要注意端口號的一一對應。

二.     小車硬件安裝

根據小車安裝視頻教程依次完成了電機固定,電池盒固定,上電測試和電池使用說明,萬向輪與拓展面包板固定

,開發板與小車底板的固定,舵機雲台的安裝。

后面還有液晶屏的安裝以及紅外探頭的安裝,完成上述工作小車的雛形已經完成,十分美觀可愛。

 

電機固定

電機在安裝時注意兩個螺絲先不能擰的太緊,以免第二顆放不進去,等螺絲螺母都放好后擰緊,

以免小車在行走時晃動,電機電源根據卡扣方向插緊即可,電機不能晃動,要放穩

電池盒固定

電池盒在固定時,一定要使用平口螺絲,防止電池放不進去,插頭根據卡扣方向插緊即可。

上電測試和電池使用說明

電池在使用時防止過度放電,一定要在過度放電前給電池充電。注意保護電池,根據說明使用,

在沒有給小車安裝開關以前,燒錄程序時應斷開vcc接口,防止小車亂跑損壞小車

萬向輪與拓展面包板固定

先安裝面包版底座選擇最短的銅柱,兩塊面包版的凸起都朝向外側,凹側對着凸起的螺絲,

看准之后貼下,只有一次機會,所以得相當小心,安萬向輪時注意線路,將線路走好,

不能影響萬向輪的正常轉動。擰螺絲時注意另一側芯片。

開發板與小車底板的固定

開發板的固定選擇中號銅柱,按地板的提示方向安裝,注意正反面,在開發板面上上螺絲時只需安裝三枚,

以為其中一枚的位置很特殊安裝不當,很容易損壞開發板,最后將剩下三枚螺絲擰緊。

舵機雲台的安裝

舵機在安裝時小螺絲一定要擰到底部,調節位置,因為舵機是180度旋轉,最好能將左右兩邊分配90度,

以便后續實驗操作,前面的插口安裝超聲波探測,后面的四個后依次安裝到vcc gnd p2.7 以及開發板,

舵機的電源線十分長要在銅柱上旋轉之后安裝,以免影響轉動和美觀,但也不可在銅柱上旋轉過多,

最好是兩圈,具體根據實際操作。

液晶屏的安裝

液晶屏分為八線安裝與四線安裝,本次實驗我們選擇四線安裝,分別用到3.4.5.6.7.12.13這七個接口,

安裝時由於接口有限我們安裝與教程材料稍有出處,最終選擇視頻中的安裝方法,

安裝過程比較繁瑣也比較困難,一定要耐心安裝。

紅外探頭的安裝

在安裝紅外線時要講紅外線程序包放入開發軟件中,將紅外接收口放到面包版上,

一段接a4,另外兩端接vcc gnd ,特別注意要將接收口放到顯眼的位置,方便接收信號。

三.     軟件編程與試運行

  1. 智能小車調試

黑白線識別模塊調試

由W3(W4)電位器,L2(L3)信號指示燈左光電傳感器組成。 L2(L3)信號燈沒有接接收到紅外信號時會不亮(輸出高電平1),

當 接到到紅外反饋信號后,指示燈亮起(輸出低電平0)。

避障模塊調試

由W1(W2)電位器,L4(L5)信號指示燈左(右)光電傳感器組成。 當L4信號燈沒有接收到紅外信號時不亮(輸出高電平1),

當接到紅 外反饋信號后,指示燈亮起(輸出低電平0)。

電機模塊調試:

測試條件,把EN1/EN2接到5V 正電源上。 IN1接到VCC(正5V 電源)(右電機反轉信號線,高電平有效) IN2接到VCC(正5V 電源)

(右電機正轉信號線,高電平有效) EN1接到VCC(正5V 電源)(電機使能信號,高電平有效) EN2接到VCC(正5V 電源)

(電機使能信號,高電平有效) IN3接到VCC(正5V 電源)(左電機正轉信號線,高電平有效) IN4接到VCC(正5V 電源)(左電機反轉信號線,高電平有效)

2.智能小車電路圖和L293D內部等效圖(雙H橋路簡單講解)

                       

 

對小車電路圖和L293D內部等效圖進行了一些簡單的學習。

3.智能小車前進實驗

智能小車前進實驗

int Left_motor_back=8;     //左電機后退(IN1)

int Left_motor_go=9;     //左電機前進(IN2)

 

int Right_motor_go=10;    // 右電機前進(IN3)

int Right_motor_back=11;    // 右電機后退(IN4)

 

void setup()

{

  //初始化電機驅動IO為輸出方式

  pinMode(Left_motor_go,OUTPUT); // PIN 8 (PWM)

  pinMode(Left_motor_back,OUTPUT); // PIN 9 (PWM)

  pinMode(Right_motor_go,OUTPUT);// PIN 10 (PWM)

  pinMode(Right_motor_back,OUTPUT);// PIN 11 (PWM)

}

void run(int time)     // 前進

{

  digitalWrite(Right_motor_go,HIGH);  // 右電機前進

  digitalWrite(Right_motor_back,LOW);    

  analogWrite(Right_motor_go,200);//PWM比例0~255調速,左右輪差異略增減

  analogWrite(Right_motor_back,0);

  digitalWrite(Left_motor_go,HIGH);  // 左電機前進

  digitalWrite(Left_motor_back,LOW);

  analogWrite(Left_motor_go,200);//PWM比例0~255調速,左右輪差異略增減

  analogWrite(Left_motor_back,0);

  delay(time * 100);   //執行時間,可以調整 

}

 

void loop()

{

  delay(500);

  run(10);    //前進

}

給小車電機的接口分別接在8.9.10.11

這里的時間指的是毫秒,所以要乘100   delay(time * 100);  

高電平給電機通電前進,而且這里可以選擇轉速,調節速度,這里如果小車不能走直線可以將左輪或右輪的速度進行相應的調整,

完成小車可以直線行走

小車直行這個實驗特別簡單只需讀懂一些簡單的代碼即可,注意調節轉速,以免損壞小車,

一定注意在燒錄例程的過程中一定要主要斷開vcc。

4.智能小車前后左右綜合實驗

void left(int time)         //左轉(左輪不動,右輪前進)

{

  digitalWrite(Right_motor_go,HIGH);   // 右電機前進

  digitalWrite(Right_motor_back,LOW);

  analogWrite(Right_motor_go,200);

  analogWrite(Right_motor_back,0);//PWM比例0~255調速

  digitalWrite(Left_motor_go,LOW);   //左輪不動

  digitalWrite(Left_motor_back,LOW);

  analogWrite(Left_motor_go,0);

  analogWrite(Left_motor_back,0);//PWM比例0~255調速

  delay(time * 100);  //執行時間,可以調整 

}

 

void spin_left(int time)         //左轉(左輪后退,右輪前進)

{

  digitalWrite(Right_motor_go,HIGH);   // 右電機前進

  digitalWrite(Right_motor_back,LOW);

  analogWrite(Right_motor_go,200);

  analogWrite(Right_motor_back,0);//PWM比例0~255調速

  digitalWrite(Left_motor_go,LOW);   //左輪后退

  digitalWrite(Left_motor_back,HIGH);

  analogWrite(Left_motor_go,0);

  analogWrite(Left_motor_back,200);//PWM比例0~255調速

  delay(time * 100);  //執行時間,可以調整 

}

 

void right(int time)        //右轉(右輪不動,左輪前進)

{

  digitalWrite(Right_motor_go,LOW);   //右電機不動

  digitalWrite(Right_motor_back,LOW);

  analogWrite(Right_motor_go,0);

  analogWrite(Right_motor_back,0);//PWM比例0~255調速

  digitalWrite(Left_motor_go,HIGH);//左電機前進

  digitalWrite(Left_motor_back,LOW);

  analogWrite(Left_motor_go,200);

  analogWrite(Left_motor_back,0);//PWM比例0~255調速

  delay(time * 100);  //執行時間,可以調整 

}

 

void spin_right(int time)        //右轉(右輪后退,左輪前進)

{

  digitalWrite(Right_motor_go,LOW);   //右電機后退

  digitalWrite(Right_motor_back,HIGH);

  analogWrite(Right_motor_go,0);

  analogWrite(Right_motor_back,200);//PWM比例0~255調速

  digitalWrite(Left_motor_go,HIGH);//左電機前進

  digitalWrite(Left_motor_back,LOW);

  analogWrite(Left_motor_go,200);

  analogWrite(Left_motor_back,0);//PWM比例0~255調速

  delay(time * 100);  //執行時間,可以調整 

}

 

void back(int time)          //后退

{

  digitalWrite(Right_motor_go,LOW);  //右輪后退

  digitalWrite(Right_motor_back,HIGH);

  analogWrite(Right_motor_go,0);

  analogWrite(Right_motor_back,150);//PWM比例0~255調速

  digitalWrite(Left_motor_go,LOW);  //左輪后退

  digitalWrite(Left_motor_back,HIGH);

  analogWrite(Left_motor_go,0);

  analogWrite(Left_motor_back,150);//PWM比例0~255調速

  delay(time * 100);     //執行時間,可以調整 

}

 

增加了向左轉和向右轉,向左轉主要是控制左輪不動,郵輪前進,而向右轉則是右輪不動左輪前進,

后退則是給兩個輪子后退高電平,注意不能同時給前進和后退高電平,這樣會燒壞電機,

同樣燒錄例程時要斷開vcc,以免小車亂跑影響實驗。

5.智能小車指定花式動作

void spin_left(int time)         //左轉(左輪后退,右輪前進)

{

  digitalWrite(Right_motor_go,HIGH);   // 右電機前進

  digitalWrite(Right_motor_back,LOW);

  analogWrite(Right_motor_go,200);

  analogWrite(Right_motor_back,0);//PWM比例0~255調速

  digitalWrite(Left_motor_go,LOW);   //左輪后退

  digitalWrite(Left_motor_back,HIGH);

  analogWrite(Left_motor_go,0);

  analogWrite(Left_motor_back,200);//PWM比例0~255調速

  delay(time * 100);  //執行時間,可以調整 

}

void spin_right(int time)        //右轉(右輪后退,左輪前進)

{

  digitalWrite(Right_motor_go,LOW);   //右電機后退

  digitalWrite(Right_motor_back,HIGH);

  analogWrite(Right_motor_go,0);

  analogWrite(Right_motor_back,200);//PWM比例0~255調速

  digitalWrite(Left_motor_go,HIGH);//左電機前進

  digitalWrite(Left_motor_back,LOW);

  analogWrite(Left_motor_go,200);

  analogWrite(Left_motor_back,0);//PWM比例0~255調速

  delay(time * 100);  //執行時間,可以調整   

}

主要是加了一些花式玩法,比如原地左轉或原地右轉,再加上左轉右轉的一些組合,

完成了一套花式動作。切記燒錄例程時應斷開vcc。

6.智能小車按鍵啟動和蜂鳴器報警

主要是對小車進行蜂鳴器和啟動鍵的安裝

 

安裝開關是為了在燒錄過程中及時不斷開vcc,小車也不會亂跑,以后每次燒錄都不必斷開vcc。

int key=7;//定義按鍵 數字12 接口

int beep=12;//定義蜂鳴器 數字7 接口

void keysacn()

{

  int val;

  val=digitalRead(key);//讀取數字7 口電平值賦給val

  while(!digitalRead(key))//當按鍵沒被按下時,一直循環

  {

    val=digitalRead(key);//此句可省略,可讓循環跑空

  }

  while(digitalRead(key))//當按鍵被按下時

  {

    delay(10);   //延時10ms

    val=digitalRead(key);//讀取數字7 口電平值賦給val

    if(val==HIGH)  //第二次判斷按鍵是否被按下

    {

      digitalWrite(beep,HIGH);    //蜂鳴器響

      while(!digitalRead(key)) //判斷按鍵是否被松開

        digitalWrite(beep,LOW);      //蜂鳴器停止

    }

    else

      digitalWrite(beep,LOW);//蜂鳴器停止

  }

}

I/O 口的意思即為INPUT
接口和OUTPUT 接口,到目前為止我們設計的小燈實驗都還只是應用到Arduino
的I/O 口的輸出功能,這個實驗我們來嘗試一下使用Arduino的I/O 口的輸入功能即為讀取外接設備的輸出值,

我們用一個按鍵和一個LED 小燈完成一個輸入輸出結合使用的實驗,讓大家能簡單了解I/O 的作用。

按鍵開關大家都應該比較了解,屬於開關量(數字量)元件,按下時為閉合(導通)狀態。

我們分析電路可知當按鍵按下時,數字7 接口可讀出為高電平。這時我們使數字11 口輸出高電平可使小燈亮起,

程序中我們判斷數字7 口是否為低電平,要為低電平使數字11 口輸出也為低電平小燈不亮,原理同上。

要注意一點就是蜂鳴器有正負極之分,下面實物圖可看到蜂鳴器有正負標記。

7.智能小車黑線循跡實驗

利用小車下端兩個探頭對光的不同反應來確定小車行駛路線,主要是當探測到白時小車行駛電機轉動,

當左側壓到黑線及探測到黑時小車向左行駛,當右側探頭探測到黑時則向行駛,

只需在之前的程序上加一個判定的過程,十分簡單

const int SensorRight = 3;   //右循跡紅外傳感器(P3.2 OUT1)

const int SensorLeft = 4;       //左循跡紅外傳感器(P3.3 OUT2)

SR = digitalRead(SensorRight);//有信號表明在白色區域,車子底板上L3亮;沒信號表明壓在黑線上,車子底板上L3滅

  SL = digitalRead(SensorLeft);//有信號表明在白色區域,車子底板上L2亮;沒信號表明壓在黑線上,車子底板上L2滅

  if (SL == LOW&&SR==LOW)

    run();   //調用前進函數

  else if (SL == HIGH & SR == LOW)// 左循跡紅外傳感器,檢測到信號,車子向右偏離軌道,向左轉

    left();

  else if (SR == HIGH & SL == LOW) // 右循跡紅外傳感器,檢測到信號,車子向左偏離軌道,向右轉 

    right();

  else // 都是白色, 停止

  brake();

這里使用了與的語句,當左邊高電平右邊低電頻時想左,當左邊低電平右邊高電平時向右,若都是高電平則停車

這里的if else語句也滿足了小車在行駛時的各種情況

8.智能小車紅外避障實驗1&2&3(基礎避障)

與黑線實驗類似,只是將判定寫到了紅外探頭中,當紅外探頭探測到障礙時小車停止或者轉向或者跟隨障礙物行駛指向哪里走到哪里。

遇到障礙物后退

else // 都是有障礙物, 后退

      back(3);這里是與其他兩個程序不同的一點,遇到了障礙則后退

 

SR_2 = digitalRead(SensorRight_2);

    SL_2 = digitalRead(SensorLeft_2);

    if (SL_2 == HIGH&&SR_2==HIGH)

      run();   //調用前進函數

    else if (SL_2 == HIGH & SR_2 == LOW)// 右邊探測到有障礙物,有信號返回,向左轉

        left();

    else if (SR_2 == HIGH & SL_2 == LOW) //左邊探測到有障礙物,有信號返回,向右轉 

      right();

    else // 都是有障礙物, 后退

      back(3);

遇到障礙物跟隨

 

else if (SL_2 == HIGH & SR_2 == LOW)

 left();

這里與上一個程序不同,是跟隨障礙物

哪里有障礙物就向哪里走,這是與上一個程序不同的地方,

若前方沒有障礙物則停車

可以在這句話中體現

else // 沒有障礙物,停

brake();

 

SR_2 = digitalRead(SensorRight_2);

 

    SL_2 = digitalRead(SensorLeft_2);

    if (SL_2 == LOW&&SR_2==LOW)

      run();   //調用前進函數

   

 

    else if (SR_2 == HIGH & SL_2 == LOW) //左邊探測到有障礙物,有信號返回,向左轉 

      left();

    else // 沒有障礙物,停

brake();

遇到障礙物轉向

 

這里遇上兩個程序不同的是增加了一個自動尋路功能,遇到障礙物后可以自己調節方向

可以在下面這句話中體現else // 都是有障礙物, 后退

    {

      back(4.5);//后退

      spin_right(4.5);//有旋轉,調整方向

先停車,停車之后轉向,使得小車十分靈活,規避障礙物

 

SR_2 = digitalRead(SensorRight_2);

    SL_2 = digitalRead(SensorLeft_2);

    if (SL_2 == HIGH&&SR_2==HIGH)

      run();   //調用前進函數

    else if (SL_2 == HIGH & SR_2 == LOW)// 右邊探測到有障礙物,有信號返回,向左轉

        left();

    else if (SR_2 == HIGH & SL_2 == LOW) //左邊探測到有障礙物,有信號返回,向右轉 

      right();

    else // 都是有障礙物, 后退

    {

      back(4.5);//后退

      spin_right(4.5);//有旋轉,調整方向

9.智能小車超聲波測距實驗

給小車安裝液晶板與聲波探頭,對距離進行測量

這里程序中大家可以看到Fdistance= Fdistance/58;

這里選擇除以58后再輸出是因為為什么除以58等於厘米,  Y米=(X秒*344)/2,

X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58

 

void Distance_test()   // 量出前方距離

{

  digitalWrite(Trig, LOW);   // 給觸發腳低電平2μs

  delayMicroseconds(2);

  digitalWrite(Trig, HIGH);  // 給觸發腳高電平10μs,這里至少是10μs

  delayMicroseconds(10);

  digitalWrite(Trig, LOW);    // 持續給觸發腳低電

  float Fdistance = pulseIn(Echo, HIGH);  // 讀取高電平時間(單位:微秒)

  Fdistance= Fdistance/58;       //為什么除以58等於厘米,  Y米=(X秒*344)/2

  // X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58

  Serial.print("Distance:");      //輸出距離(單位:厘米)

  Serial.println(Fdistance);         //顯示距離

  Distance = Fdistance;

 

10.智能小車超聲波避障實驗(無舵機)

這里只是比之前多了一個轉向遇到障礙物可以轉向躲避,並測出距離

這時的小車已經十分的靈活,可以根據距離選擇行駛的模式

可以在下面這句話體現

 while(Distance < 60)//再次判斷是否有障礙物,若有則轉動方向后,繼續判斷

      {

        right(1);//右轉

        brake(1);//停車

        Distance_test();//測量前方距離

        Distance_display();//液晶屏顯示距離

      }

遇到障礙物先停車后向右轉向

 

 

Distance_test();//測量前方距離

    Distance_display();//液晶屏顯示距離

    if(Distance < 60)//數值為碰到障礙物的距離,可以按實際情況設置

      while(Distance < 60)//再次判斷是否有障礙物,若有則轉動方向后,繼續判斷

      {

        right(1);//右轉

        brake(1);//停車

        Distance_test();//測量前方距離

        Distance_display();//液晶屏顯示距離

      }

    else

      run();//無障礙物,直行

11.智能小車超聲波避障實驗(有舵機)

舵機是一種位置伺服的驅動器,主要是由外殼、電路板、無核心馬達、齒輪與位置檢測器所構成。

其工作原理是由接收機或者單片機發出信號給舵機,其內部有一個基准電路,產生周期為20ms,

寬度為1.5ms 的基准信號,將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。

經由電路板上的IC 判斷轉動方向,再驅動無核心馬達開始轉動,透過減速齒輪將動力傳至擺臂,

同時由位置檢測器送回信號,判斷是否已經到達定位。適用於那些需要角度不斷變化並可以保持的控制系統。

當電機轉速一定時,通過級聯減速齒輪帶動電位器旋轉,使得電壓差為0,電機停止轉動。

一般舵機旋轉的角度范圍是0 度到180 度。

舵機有很多規格,但所有的舵機都有外接三根線,分別用棕、紅、橙三種顏色進行區分,

由於舵機品牌不同,顏色也會有所差異,棕色為接地線,紅色為電源正極線,橙色為信號線。

舵機的轉動的角度是通過調節PWM(脈沖寬度調制)信號的占空比來實現的,標准PWM(脈沖寬度調制)

信號的周期固定為20ms(50Hz),理論上脈寬分布應在1ms到2ms 之間,但是,事實上脈寬可由0.5ms 到2.5ms 之間,

脈寬和舵機的轉角0°~180°相對應。有一點值得注意的地方,由於舵機牌子不同,對於同一信號,不同牌子的舵機旋轉的角度也會有所不同。

用Arduino 控制舵機的方法有兩種,一種是通過Arduino 的普通數字傳感器接口產生占空比不同的方波,

模擬產生PWM 信號進行舵機定位,第二種是直接利用Arduino 自帶的Servo 函數進行舵機的控制,這種控制方法的優點在於程序編寫,

缺點是只能控制2 路舵機,因為Arduino 自帶函數只能利用數字9、10 接口。Arduino 的驅動能力有限,所以當需要控制1 個以上的舵機時需要外接電源。

 

在無舵機的試驗中往往遇到小車被卡住,那是因為聲波探頭探測范圍小而小車體積很大,

所以探測有盲區,加上一個舵機之后,小車行駛前會轉動舵機對左右兩邊的距離進行測量,

若左右兩邊都為安全距離,則小車直行,若左邊探測非安全距離而右側在安全距離,比對后轉向右側,

反之同理。這里還對舵機的轉速進行了定義,並且注意小車速度,防止損壞舵機,超聲波探頭以及液晶顯示屏。

while(1)

  {

    front_detection();//測量前方距離

    if(Front_Distance < 32)//當遇到障礙物時

    {

      back(2);//后退減速

      brake(2);//停下來做測距

      left_detection();//測量左邊距障礙物距離

      Distance_display(Left_Distance);//液晶屏顯示距離

      right_detection();//測量右邊距障礙物距離

      Distance_display(Right_Distance);//液晶屏顯示距離

      if((Left_Distance < 35 ) &&( Right_Distance < 35 ))//當左右兩側均有障礙物靠得比較近

        spin_left(0.7);//旋轉掉頭

      else if(Left_Distance > Right_Distance)//左邊比右邊空曠

      {     

        left(3);//左轉

        brake(1);//剎車,穩定方向

      }

      else//右邊比左邊空曠

      {

        right(3);//右轉

        brake(1);//剎車,穩定方向

      }

    }

    else

    {

      run(); //無障礙物,直行

12.智能小車紅外遙控實驗

 

紅外遙控器發出的信號是一連串的二進制脈沖碼。為了使其在無線傳輸過程中免受其他紅外信號的干擾,

通常都是先將其調制在特定的載波頻率上,然后再經紅外發射二極管發射出去,而紅外線接收裝置則要濾除其他雜波,

叧接收該特定頻率的信號並將其還原成二進制脈沖碼,也就是解調。

  內置接收管將紅外發射管發射出來的光信號轉換為微弱的電信號,

此信號經由IC內部放大器進行放大,然后通過自動增益控制、帶通濾波、解調變、

波形整形后還原為遙控器發射出的原始編碼,經由接收頭的信號輸出腳輸入到電器上的編碼識別電路。

要想對某一遙控器進行解碼必須要了解該遙控器的編碼方式。本產品使用的遙控器的碼方式為:NEC協議。下面就介紹一下NEC協議的特點:

(1)8位地址位,8位命令位

(2)為了可靠性地址位和命令位被傳輸兩次

(3)脈沖位置調制

(4)載波頻率38khz

(5)每一位的時間為1.125ms或2.25ms

VOUT接到模擬口,GND接到實驗板上的GND,VCC接到實驗板上的+5v。

將紅外接收頭按照上述方法接好,將VOUT接到數字11口引腳,將LED燈通過電阻接到數字引腳2,3,4,5,6,7。

unsigned long last = millis();/*應用millis函數可獲取機器運行的時間長度,單位ms。

系統最長的記錄時間為9小時22分,如果超出時間將從0開始。函數返回值為unsigned long型,無參數。

注意:

復制\2.例程代碼\例程19-紅外遙控里的庫文件夾IRremote到Arduino的安裝目錄

:Arduino\libraries目錄下,缺失庫文件可能編譯出錯。

 

給小車安裝紅外探頭,並給遙控器定義,即可完成控制過程

long run_car = 0x00FF18E7;//按鍵2

long back_car = 0x00FF4AB5;//按鍵8

long left_car = 0x00FF10EF;//按鍵4

long right_car = 0x00FF5AA5;//按鍵6

long stop_car = 0x00FF38C7;//按鍵5

long left_turn = 0x00ff30CF;//按鍵1

long right_turn = 0x00FF7A85;//按鍵3

if (millis() - last > 250) //確定接收到信號

    {

      on = !on;//標志位置反

      digitalWrite(13, on ? HIGH : LOW);//板子上接收到信號閃爍一下led

      dump(&results);//解碼紅外信號

    }

    if (results.value == run_car )//按鍵2

      run();//前進

    if (results.value == back_car )//按鍵8

      back();//后退

    if (results.value == left_car )//按鍵4

      left();//左轉

    if (results.value == right_car )//按鍵6

      right();//右轉

    if (results.value == stop_car )//按鍵5

      brake();//停車

    if (results.value == left_turn )//按鍵1

      spin_left();//左旋轉

    if (results.value == right_turn )//按鍵3

      spin_right();//右旋轉

    last = millis();     

    irrecv.resume(); // Receive the next value

13.智能小車黑線循跡&超聲波避障綜合實驗

是對黑線實驗和超聲波實驗的一個綜合,具體可參照上文

四.     心得與不足

這次實驗是一人完成,過程比較艱辛,主要是在安裝液晶板時出現了問題,經歷了兩三個小時對液晶板反復的安裝,

最終克服困難,線路繁瑣,工具不夠是主要困難,對編程有了新的認識。

五.     總結

這次完成智能小車是一個有趣的事,本以為自己根本無法完成,因為自己基礎很差,但是經過努力,

經過自學最總完成小車,並且第一個完成,什么事沒有不可能的,只要努力,這次的實驗我學到了很多,

不僅僅是在知識上,最后附上小車帥照一張。


免責聲明!

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



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