精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>電子資料>帶有PID控制的線跟隨機器人

帶有PID控制的線跟隨機器人

2022-11-08 | zip | 0.06 MB | 次下載 | 2積分

資料介紹

描述

該項目的目的是構建一個帶有 PID 控制的線跟隨機器人。我們還將使用 Android 設備輕松設置主要控制參數,以便更好、更快地進行調整。

這個項目是一個由兩部分組成的更復雜項目中的第一個,我的目的是探索 Line Follower Robots 的潛力。第二部分:迷宮求解機器人,使用 Arduino人工智能,機器人將使用簡單的人工智能技術探索和解決迷宮。

第 1 步:物料清單

所需材料清單非常簡單,最終的機器人非常便宜(約 75.00 美元):

車身(可根據您的需要進行調整):

  • 2個木方格(80X80mm)
  • 3 個活頁夾
  • 2個木輪(直徑:50mm)
  • 1個球腳輪
  • 9 松緊帶
  • 3M 命令框條
  • 面包板和接線
  • 2組4XNi金屬氫化物電池(每組5V)
  • 2 X SM-S4303R 連續旋轉 360 度塑料伺服
  • Arduino納米
  • 5 X 線傳感器(TCRT5000 4CH 紅外線跟蹤傳感器模塊 + 1 個獨立的跟蹤傳感器)
  • 1 個按鈕

第 2 步:設置電機

?
?
?
?
pYYBAGNooiSAIPOGAAAXANEbatA804.jpg
?
1 / 4
?

對于電機,使用了 2 個連續伺服系統 (SM-S4303R)。正如您在照片中看到的那樣,它們將被“粘合”在一起,形成一個單一的實心塊(使用 3M 命令條、膠水或雙面膠帶)。這些伺服系統將以給定的速度運行,由其數據輸入上接收到的脈沖寬度定義。對于這個特定的伺服,脈沖寬度從 1.0ms(1,000 微秒)到 2.0ms(2,000 微秒)。其他伺服系統可以使用不同的脈沖寬度。

細看:

  • 1.5ms 的脈沖將伺服定位在中性位置,或“停止”。
  • 1.0ms 的脈沖將命令伺服在一個方向上全速(約 70 RPM)
  • 反方向的 2.0ms 全速脈沖。
  • 1.0 到 1.5ms 或 1.5ms 到 2.0ms 之間的脈沖,將產生比例速度。

將兩個伺服系統物理連接后,按照上面的繪圖電路為它們提供源(外部 5V 或 6V),并為它們提供 Arduino 的信號

  • 左舵機:Arduino Pin 5
  • 右舵機:Arduino Pin 3

全部連接后,必須做的第一件事是發送一個 1.5 毫秒的脈沖來驗證電機是否“停止”(未運行)。如果不是,則必須將伺服系統調整到完全停止(尋找黃色螺栓,在伺服系統下方)。

注意:如果您的舵機沒有此物理調整,請嘗試更改函數內部的參數“1500”微秒(向上或向下),直到完全停止。

下面的 Arduino 代碼可以完成這項工作:

#include  // Servo library 
Servo leftServo;
Servo rightServo;
Void setup()
{
  leftServo.attach(5);
  rightServo.attach(3);
  leftServo.writeMicroseconds(1500);
  rightServo.writeMicroseconds(1500);
}
void loop()
{
}

第 3 步:組裝車身和電機進行運動測試

?
?
?
?
pYYBAGNoojiAXlxwAAGL-6CnkRg260.jpg
?
1 / 7
?
  • 使用 3M Command 框架條,將 2 個舵機固定到其中一個方形木片上。
  • 使用活頁夾將第二塊方形木頭固定在上面的木頭上。根據您的需要調整平臺的長度。
  • 使用活頁夾固定球腳輪。
  • 電機的電源將來自一組 5V 電池。這套電池將安裝在面包板和車身框架之間。
  • 連接舵機使用的電池:左側一側電網專用于舵機源
  • 將 Arduino Nano 連接到面包板
  • 將電網的 GND 連接到 Arduino GND。
  • 將伺服系統連接到 Arduino:左 ==> 引腳 5;右 ==> 引腳 3
  • 將 LED 連接到 Arduino 引腳 13
  • 將按鈕連接到 Arduino 引腳 9

請注意,由于伺服系統的安裝方式(相反),速度范圍為:

  • 右舵機前進速度從 1,500us(停止)到 2,000us(全速)
  • 左舵機前進速度從 1,500us(停止)到 1,000(全速)

一個外部 LED 被添加到 pin13,用于信號化和測試目的(如果需要,您可以使用內部 Arduino LED,而不是外部 LED,但考慮到在電纜中間很難看到它)。

還有一個按鈕連接到引腳 9。這個按鈕對于測試目的和機器人的啟動非常有用。

例如:

while(digitalRead(buttonPin)) 
{ 
}
motorTurn (LEFT, 500);
motorTurn (RIGHT, 500);

請注意,將命令機器人向左轉、等待 500 毫秒并向右轉的 2 行僅在您按下按鈕 (buttonPin = 0) 后才會發生。在此之前,程序將在無限循環中停止。

下面的代碼可用作完整電機測試(前進、后退、句號、左轉、右轉)的基礎。如有必要,您必須根據您的電機調整所需轉角的延遲(此外,有時左右脈沖值應該略有不同,以補償電機的任何缺乏平衡。

?

第四步:藍牙模塊(可選)

?
?
?
?
poYBAGNoojuAA3FhAACYT4Z0fRU204.jpg
?
1 / 2
?

藍牙模塊 HC-06 應安裝在面包板上,如圖所示。將使用 Arduino 庫 SoftSerial。

HC-06 引腳連接下方:

  • Tx 引腳到 Arduino引腳 10 (Rx)
  • RX 引腳到 Arduino引腳 11 (Tx)
  • VCC/GND到 Arduino 5V/GND

機器人將使用或不使用藍牙。該代碼的構建方式是,如果您不激活 BT,則默認參數將是機器人使用的參數。因此,如果您不想安裝 HC-06 模塊,請不要擔心,代碼仍然可以正常工作。在本教程的最后一部分,我將探討如何使用 Android 應用程序發送數據以更好地調整機器人參數和/或在手動模式下移動機器人。例如,如果有人想更多地探索使用 Line Follower Robot 進行比賽,我會將藍牙和應用程序的使用保留為可選項。

第 5 步:添加線傳感器

?
?
?
?
pYYBAGNooj-ATrypAADIjXGGs6I329.jpg
?
1 / 10
?

將電纜連接到 Arduino 引腳,如下所示:

  • 傳感器 0 = 12
  • 傳感器 1 = 18
  • 傳感器 2 = 17
  • 傳感器 3 = 16
  • 傳感器 4 = 19
  • 如圖所示,將 5 個傳感器固定在塑料條上
  • 建議對傳感器進行標記以進行測試。傳感器名稱從“0”(更靠左)到“4”(更靠右)
  • 將電纜穿過框架下方,使用松緊帶固定它們。注意不要與輪子或腳輪混淆。
  • 固定第二組 5V 電池并將其連接到 Arduino Vin。

就我而言,我使用了一個集成了 4 個傳感器 + 1 個額外傳感器的模塊。它們都是兼容的。為簡單起見,在圖中我包括了 5 個連接在一起的獨立傳感器。兩種配置的最終結果相同。

第 6 步:實現 IR 傳感器邏輯

?
?
?
?
poYBAGNookGAURd0AAA4OAat_z8626.jpg
?
1 / 5
?

IR 傳感器由一個單獨的 IR LED 和一個 IR 光電二極管組成。LED 發出的紅外光照射到表面并反射回紅外光電二極管。然后,光電二極管產生與表面反射率水平成比例的輸出電壓(“亮表面”的值較高,“黑/暗表面”的值較低)。

在使用傳感器的情況下,模塊上的集成電路會生成一個簡單的數字信號(HIGH:暗;LOW:亮)作為輸出。安裝在模塊上的電位器(見照片)將調整正確的光線水平以被認為是“暗”或“亮”。它的工作方式是,當反射光顏色為黑色/深色時,在其輸出端生成一個高(“1”)數字電平,并為另一種較淺的顏色生成一個低(“0”)數字電平。我在這里使用了一個帶有 4 個傳感器的集成模塊和一個帶有唯一傳感器的額外模塊(不同的形狀,但相同的邏輯)。該組合是由 5 個傳感器組成的陣列,我發現它們有利于實現良好而平穩的控制,如下所述。

5 個傳感器陣列的安裝方式是,如果只有一個傳感器相對于黑線居中,則只有該特定傳感器會產生 HIGH。另一方面,應計算傳感器之間的空間,以允許 2 個傳感器可以同時覆蓋黑線的整個寬度,同時在兩個傳感器上產生一個 HIGH(見上圖)。

跟隨線時可能的傳感器陣列輸出是:

  • 0 0 0 0 1
  • 0 0 0 1 1
  • 0 0 0 1 0
  • 0 0 1 1 0
  • 0 0 1 0 0
  • 0 1 1 0 0
  • 0 1 0 0 0
  • 1 1 0 0 0
  • 1 0 0 0 0

擁有 5 個傳感器,可以生成一個“誤差變量”,這將有助于控制機器人在線上的位置,如下所示。

讓我們考慮一下最佳條件是機器人居中時,這條線正好位于“中間傳感器”(傳感器 2)下方。數組的輸出將是:0 0 1 0 0,在這種情況下,“錯誤”將是“零”。如果機器人開始向左移動(線“似乎向右移動”),則誤差必須隨著正信號而增加。如果機器人開始向右移動(線“似乎向左移動”),在同樣,誤差必須增加,但現在是負信號。

與傳感器狀態相關的錯誤變量將是:

0 0 1 0 0 ==> 錯誤 = 0

  • 0 0 0 0 1 ==> 錯誤 = 4
  • 0 0 0 1 1 ==> 錯誤 = 3
  • 0 0 0 1 0 ==> 錯誤 = 2
  • 0 0 1 1 0 ==> 錯誤 = 1
  • 0 1 1 0 0 ==> 錯誤 = -1
  • 0 1 0 0 0 ==> 錯誤 = -2
  • 1 1 0 0 0 ==> 錯誤 = -3
  • 1 0 0 0 0 ==> 錯誤 = -4

查看 Arduino 代碼,每個傳感器都將定義一個特定的名稱(考慮到更靠左的 Line Follow Sensor 必須分配一個標簽“0”):

const int lineFollowSensor0 = 12;
const int lineFollowSensor1 = 18;
const int lineFollowSensor2 = 17;
const int lineFollowSensor3 = 16;
const int lineFollowSensor4 = 19;

為了存儲每個傳感器的值,將創建一個數組變量:

int LFSensor[5]={0, 0, 0, 0, 0};

陣列的每個位置都將隨著每個傳感器的輸出不斷更新:

LFSensor[0] = digitalRead(lineFollowSensor0);
LFSensor[1] = digitalRead(lineFollowSensor1);
LFSensor[2] = digitalRead(lineFollowSensor2);
LFSensor[3] = digitalRead(lineFollowSensor3);
LFSensor[4] = digitalRead(lineFollowSensor4);

有了每個傳感器的值,必須實現一個邏輯來生成錯誤變量:

if((LFSensor[0]== 0 )&&(LFSensor[1]== 0 )&&(LFSensor[2]== 0 )&&(LFSensor[3]== 0 )&&(LFSensor[4]== 1 )) error = 4;
else if((LFSensor[0]== 0 )&&(LFSensor[1]== 0 )&&(LFSensor[2]== 0 )&&(LFSensor[3]== 1 )&&(LFSensor[4]== 1 )) error = 3; 
else if((LFSensor[0]== 0 )&&(LFSensor[1]== 0 )&&(LFSensor[2]== 0 )&&(LFSensor[3]== 1 )&&(LFSensor[4]== 0 )) error = 2;
else if((LFSensor[0]== 0 )&&(LFSensor[1]== 0 )&&(LFSensor[2]== 1 )&&(LFSensor[3]== 1 )&&(LFSensor[4]== 0 )) error = 1;
else if((LFSensor[0]== 0 )&&(LFSensor[1]== 0 )&&(LFSensor[2]== 1 )&&(LFSensor[3]== 0 )&&(LFSensor[4]== 0 )) error = 0;
else if((LFSensor[0]== 0 )&&(LFSensor[1]== 1 )&&(LFSensor[2]== 1 )&&(LFSensor[3]== 0 )&&(LFSensor[4]== 0 )) error =- 1;
else if((LFSensor[0]== 0 )&&(LFSensor[1]== 1 )&&(LFSensor[2]== 0 )&&(LFSensor[3]== 0 )&&(LFSensor[4]== 0 )) error = -2;
else if((LFSensor[0]== 1 )&&(LFSensor[1]== 1 )&&(LFSensor[2]== 0 )&&(LFSensor[3]== 0 )&&(LFSensor[4]== 0 )) error = -3;
else if((LFSensor[0]== 1 )&&(LFSensor[1]== 0 )&&(LFSensor[2]== 0 )&&(LFSensor[3]== 0 )&&(LFSensor[4]== 0 )) error = -4;

第 7 步:控制方向(比例控制 - P)

?
poYBAGNookWAIx1kAACr5K4TFJA971.jpg
?

完美的!至此,我們的機器人已經組裝完畢并可以運行了。您應該對電機進行一些基本測試,讀取傳感器的輸出并通過一條線對其進行測試。缺少的是真正的“大腦”,即“人工智能”的第一步。我們將得到這一點,實現一個控制邏輯,以保證機器人將保持跟隨線。

簡單的比例控制:

假設機器人在一條線上運行,傳感器陣列輸出為:“0 0 1 0 0” 。對應錯誤為“0”。在這種情況下,兩臺電機都應該勻速向前運行。

例如:

定義變量:iniMotorSpeed = 250 ; 表示左舵機將接收 1,250us 的脈沖,右舵機將接收 1,750us 的脈沖。使用這些參數,機器人將以半速前進。請記住,右舵機前進速度的脈沖長度范圍從 1,500us(停止)到 2,000us(全速),左舵機從 1,500us(停止)到 1,000us(全速)。

rightServo.writeMicroseconds(1500 + iniMotorPower);
leftServo.writeMicroseconds(1500 - iniMotorPower);

現在假設機器人向左行駛(就像“線向右”)并且還覆蓋了傳感器 3。陣列輸出將為:“0 0 1 1 0”并且錯誤 = 1。在這種情況下,您需要將機器人向右轉。為此,您必須降低 RIGHT 伺服的速度,這意味著減少脈沖的長度。此外,左舵機的速度必須增加,這意味著減少左舵機脈沖的長度。為此,我們需要更改電機控制功能:

rightServo.writeMicroseconds(1500 + iniMotorPower - error); ==> Positive error: decrease velocity
leftServo.writeMicroseconds(1500 - iniMotorPower - error); ==> Positive error: increase velocity

上述邏輯是正確的,但很容易理解,在脈沖長度上添加或減去“1”微秒不會在實際時間產生所需的校正。很直觀,要加減的數字應該更大,例如 50、100 等。為此,“誤差”必須乘以一個常數(我們稱其為“K”)。一旦這個常數的影響將與誤差成正比,我們將其命名為“比例常數:Kp” 。

運動功能將是:

int Kp = 50;
rightServo.writeMicroseconds(1500 + iniMotorPower - Kp*error);
leftServo.writeMicroseconds(1500 - iniMotorPower - Kp*error);

我們可以恢復電機將發生的情況,如下所示:

  • 傳感器陣列:0 0 1 0 0 ==>錯誤 = 0 ==> 右伺服脈沖長度 = 1,750us ==> 左伺服脈沖長度 = 1,250us(兩個電機速度相同)
  • 傳感器陣列:0 0 1 1 0 ==>錯誤 = 1 ==> 右側伺服脈沖長度 = 1,700us(較慢)==> 左側伺服脈沖長度 = 1,200us(較快)

如果情況相反并且機器人向右驅動,則錯誤將為“負”并且伺服系統的速度應該改變:

  • 傳感器陣列:0 0 1 0 0 ==>錯誤 = 0 ==> 右伺服脈沖長度 = 1,750us ==> 左伺服脈沖長度 = 1,250us(兩個電機速度相同)
  • 傳感器陣列:0 1 1 0 0 ==>錯誤 = -1 ==> 右舵機脈沖長度 = 1,800us(更快)==> 左舵機脈沖長度 = 1,300us(更慢)

在這一點上,很明顯,機器人向一側行駛的次數越多,誤差越大,它必須更快地返回中心。機器人的速度將對誤差做出反應,與誤差成正比。這稱為“比例控制” ,即更復雜的控制網絡 PDI(比例、微分、積分)的“P”組件。

第 8 步:PID 控制(可選)

?
?
?
?
pYYBAGNookeALq9QAABaEJsZ4cU603.jpg
?
1 / 3
?

如果你想跳過這部分,也可以。您可以繼續使用上一步解釋的比例控制,也可以燒一些腦筋在您的機器人中實現更復雜的控制系統,這是您的選擇。

如果你下定決心,那就走吧!

PID(比例、微分和積分)是最常見的控制方案之一。大多數工業控制回路使用某種 PID 控制。調整 PID 回路的方法有很多,包括本例中使用的手動技術。

將 PID 視為一個簡單的彈簧。彈簧具有原始長度,當受到膨脹或收縮的干擾時,它往往會在盡可能短的時間內恢復其原始長度。類似地,系統中的 PID 算法具有要控制的特定物理量的設定值,稱為“ set point ”,當由于某種原因改變時,系統控制其中的其他必要特征,以回到在盡可能短的時間內達到初始設定點。PID 控制器用于需要控制物理量并使其等于指定值的任何地方。例如,汽車中的巡航控制器、機器人、溫度調節器、電壓調節器等。

PID是如何工作的?

系統通過使用傳感器測量該物理量的當前值,從設定點計算物理量的“ error”或“ ”。deviation為了回到設定點,這個' error'應該被最小化,并且應該理想地等于零。此外,這個過程應該盡快發生。理想情況下,系統對其設定點變化的響應應該為零滯后。

更多信息可以在許多書籍和網站中找到,包括這里。

實施 PID

i) 誤差項 (e):

這等于設定點與被控制量的當前值之間的差值。Error = set_pointcurrent_value(在我們的例子中是從 Robot 線上的位置獲取的誤差變量

ii) 比例項 (P):

該項與誤差成正比。

P = 錯誤

該值負責物理量達到設定點所需的變化幅度。比例項決定了控制回路的上升時間或達到設定點的速度。

iii) 積分學期 (I):

該項是所有先前誤差值的總和。

我 = 我 + 錯誤

該值負責系統對設定點變化的響應速度。積分項用于消除比例項所需的穩態誤差。通常,小型機器人不使用積分項,因為我們不關心穩態誤差,它會使“ loop tuning”復雜化。

iv) 微分或微分項 (D):

該項是設定點的瞬時誤差與前一時刻的誤差之差。

D = 錯誤 - previousError

當物理量接近設定點時,該值負責減慢物理量的變化率。微分項用于減少過沖或系統應“ over correct”的程度。

方程:

PID 值 = (Kp*P) + (Ki*I) + (Kd*D)

在哪里:

Kp是用于改變達到設定點所需的變化幅度的常數。Ki是用于改變物理量的變化率以達到設定點的常數。Kd是用于改變系統穩定性的常數。

調整循環的一種方法是Try-error tentative 方法

Kd 變量設置為 0并首先單獨調整 Kp 項。在我們的案例中, Kp 為 25是一個很好的起點。在最后一步,我們使用了 50 的 Kp,這與我的機器人非常配合。一旦機器人做出合理響應,調整控制回路的微分部分 ( Kd )。首先將 Kp 和 Kd 值分別設置為 Kp 值的 1/2。例如,如果機器人響應合理,Kp = 50,則設置 Kp = 25 和 Kd = 25 開始。增加 Kd(微分)增益以減少過沖,如果機器人變得不穩定,則減少它。

  • 如果機器人反應太慢,請增加該值。
  • 如果機器人似乎反應迅速變得不穩定,請減小該值。

要考慮的循環的另一個組成部分是實際的Sample/Loop Rate。加快或減慢此參數可以顯著提高機器人的性能。這是由代碼中的延遲語句設置的。這是一種嘗試錯誤的嘗試方法,以獲得最佳結果。

基于上述方法,實現了以下功能:

void calculatePID()
{
  P = error;
  I = I + error;
  D = error-previousError;
  PIDvalue = (Kp*P) + (Ki*I) + (Kd*D);
  previousError = error;
}

最后一步使用的簡單 Kp 常數將被替換為更完整PIDvalue

void motorPIDcontrol()
{
  int leftMotorSpeed = 1500 - iniMotorPower - PIDvalue;
  int rightMotorSpeed = 1500 + iniMotorPower - PIDvalue;
  
  leftServo.writeMicroseconds(leftMotorSpeed);
  rightServo.writeMicroseconds(rightMotorSpeed);
}

但請注意,如果您有 Kd 和Ki =0 ,PIDvalue 則僅在最后一步中使用 Kp*error。

第 9 步:最終代碼

?
?
?
?
pYYBAGNookqAD9tJAAFqvgi7ZjE223.jpg
?
1 / 2
?

在這一步,機器人可以遵循一個恒定的循環,并且不會停止。循環程序將是:

void loop ()
{
  readLFSsensors(); // read sensors, storage values at Sensor Array and calculate "error"
  calculatePID(); 
  motorPIDcontrol();
}

但是為了更完整和真實的操作,添加至少幾個基礎commands “完成”是很重要的with the line 。例如,讓我們引入一個新變量:“ mode ”。我們將為這個變量定義 3 個狀態:

模式:

  • #define STOPPED 0
  • #define FOLLOWING_LINE 1
  • #define NO_LINE 2

如果所有傳感器都找到一條黑線,則傳感器陣列輸出將為:1 1 1 1 1。在這種情況下,我們可以將模式定義為“STOPPED”,機器人應該執行“ full stop”。

if((LFSensor[0]== 1 )&&(LFSensor[1]== 1 )&&(LFSensor[2]== 1 )&&(LFSensor[3]== 1 )&&(LFSensor[4]== 1 )) 
{ 
  mode = STOPPED;
}

Follower Line Robots 的其他常見情況是它找到“ no line ”的位置,或者 Sensor Array 輸出為:0 0 0 0 0。在這種情況下,我們可以將其編程為返回 180o 或以小角度轉動,直到找到一條線并且恢復正常的線路跟隨條件。

else if((LFSensor[0]== 0 )&&(LFSensor[1]== 0 )&&(LFSensor[2]== 0 )&&(LFSensor[3]== 0 )&&(LFSensor[4]== 0 )) 
{ 
  mode = NO_LINE;
}

完整的loop ()將是:

void loop() 
{
  readLFSsensors();
  switch (mode)
  {
    case STOPPED:
       motorStop();
       break;
    case NO_LINE:
       motorStop();
       motorTurn(LEFT, 180);
       break;
    case FOLLOWING_LINE:
       calculatePID();
       motorPIDcontrol();
       break;
  }
}

真正的最終代碼將集成一些額外的邏輯以及一些必須初始化的變量等。在上面的解釋中,為了簡單起見,我將它們省略了,但看最終代碼應該一切都清楚。

下面是最終的 Arduino 代碼:

?
?
?
?
?

第 10 步:使用 Android 應用程序調整 PID 控制

?
?
?
?
pYYBAGNookyAHlHIAACeYdDwLI0635.jpg
?
1 / 3
?

在前面的代碼中,您可以在“ robotDefines.h”選項卡中找到以下用于 PID 控制的常數定義:

float Kp=50;
float Ki=0;
float Kd=0;

如上一步所述,定義與 PID 控制器一起使用的正確常數的最佳方法是使用“試錯”方法。不好的一面是每次必須更改程序時都必須重新編譯程序。加速該過程的一種方法是使用 Android 應用程序在“設置階段”發送常量。

我專門為此開發了一個 Android 應用程序。簡而言之,有傳統的手動命令:

  • FW、BW、Left、Right 和 Stop,應用程序將分別發送到 BT 模塊:'f'、'b'、'l'、'r' 和 's'。

還包括 3 個滑塊,每個 PID 常數一個:

  • Kd:“d/XXX”,其中“XXX”是一個從 0 到 100 的數字。
  • Kp:“p/XXX”
  • Ki:“我/XXX”

包括一個額外的按鈕,它與 Arduino Pin9 上連接的按鈕完全一樣。您可以使用其中一種,沒關系。

您可以在下面找到.aia 可以在MIT AppInventor修改的.apk 文件以及要直接安裝在您的 Android 設備中的文件。

?
?

第 11 步:更改 PID 遠程調整的代碼

在設置過程中,我們將引入一個循環,您可以在其中將 PID 參數發送給機器人,然后再將其置于線路上:

 while (digitalRead(buttonPin) && !mode)
  {  
    checkBTcmd();  // verify if a comand is received from BT remote control
    manualCmd ();    
    command = "";  
  }
  checkPIDvalues();
  mode = STOPPED;

手動命令功能將是:

void manualCmd()
{
  switch (command[0])
  {
    case 'g':
      mode = FOLLOWING_LINE;
      break;
    
    case 's': 
      motorStop(); //turn off both motors
      break;
    case 'f':  
      motorForward();  
      break;
    case 'r':     
      motorTurn(RIGHT, 30);
      motorStop();
      
      break;
   case 'l': 
      motorTurn(LEFT, 30);
      motorStop();
      break;
    
    case 'b':  
      motorBackward();
      break;
      
    case 'p':
      Kp = command[2];
      break;
    
    case 'i':
      Ki = command[2];
      break; 
    
    case 'd':
      Kd = command[2];
      break;
  }
}

視頻中,您可以看到一些使用 Android 應用程序的測試。在最終代碼下方,包括通過 Android 設置的 PID:

?
?
?
?
?
?

第 12 步:結論

?
pYYBAGNVny-AfjK0AACej2Rcuno506.jpg
?

這是一個更復雜項目的第一部分,探索線跟隨機器人的潛力。在下一部分中,我將基于這個項目在這里開發一個迷宮求解機器人。希望我可以為其他人做出貢獻,以了解更多關于電子、機器人、Arduino 等的知識。

這個項目的更新文件可以在GITHUB找到。更多教程請訪問我的博客:MJRoBot.org

?


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數據手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費