Arduino RF 探索者機器人—第2部分—組裝所有元件

點擊此處閱讀本文第1部分>

arduino robot

在第1部分中,我們討論了構建一個探索者機器人的幾個重要步驟。我們透過Eagle設計並創建了我們自己的PCB。在第2部分中,我們將添加其他元件,並對程式進行測試,以確保RF機器人能夠按照預期方式運行。這裡我們所設計的探索者機器人能夠自主行駛,感知周圍環境並無線傳輸收集到的資料。該專案的目標是為探索者機器人製造原型,該原型將配備有一組感測器,如溫度感測器和壓力感測器,這些感測器能夠借助數位無線電通信模組(RF)即時發送所收集的資訊。

硬體

  • Arduino Uno
  • 2x 收發器 NRF24l01+
  • 2x Pololu 發動機 100:1
  • 4x 車輪
  • 穩壓器
  • 水晶玻璃
  • L298
  • nRF24L01
  • 氣壓感測器 BMP085
  • 距離感測器 HC-SR04

軟體

工具

  • Eagle CAD

 

arduino robot

圖1:第1部分中的RF機器人設置

步驟1:結構和機械元件

遠端控制器將從筆記型電腦的USB埠獲取資訊,並透過第二個nRF24l01+模組進行重定向。遠端控制器由Arduino開發板和帶有NRF連接器和電源的板組成,這個板將被安裝在Uno上方,以避免使用電線。

arduino robot

圖2:遠程控制器原理圖

arduino robot

圖3:遠程控制器PCB

arduino robot

圖4:安裝有連接到Arduino Uno 的NRF24L01+模組的遠端控制器

您還會看到我們安裝的兩個LED燈,用來指示電路的功能和上述的其他元件。我們將會使用一些用於穩壓器和NPN電晶體過熱保護的小冷卻器。電路板將會被放置于電池上方,如圖5所示。

arduino robot

圖5:安裝在電池上方的遠程控制器

步驟2:模組

我們正在使用的是nRF24L01+無線收發器模組。nRF24L01+是一款超低功耗的無線射頻收發器。對於此類應用程式,該模組是最佳選擇。它以其出色的性能和低廉的價格成為最受歡迎的型號之一,同時,該模組通用的通信協定使其能夠與全球廣泛使用的軟體相容。

nRF24L01+ 資料表

規格:

  • 工作頻率2.4GHz – 126 通道
  • 速度: 250kbps, 1 和2 Mbps
  • 發射器:輸出功率為0dBm 時是11.3mA
  • 最大功率:100mW (由於前置放大器)
  • 介面:4引腳 SPI – 有效負載: 32 位元組
arduino robot

圖6:NRF24L01+模組

為了獲取壓力和溫度資料,我們將使用Sparkfun BMP085氣壓感測器。該感測器提供300至110 kPa的測量範圍,誤差為0.03 kPa。BMP085還可以提供0至65 °C範圍內的溫度測量功能。其承受的電壓必須在1.8-3.6V範圍內,並透過l2C直接與微控制器建立連接。

BMP085 資料表

規格:

  • 介面(l2C)
  • 寬氣壓範圍
  • 寬電壓範圍
  • 極低的電流損耗
  • 低噪環境測量
  • 完全較准
  • 含運動感測器
arduino robot

圖7:BMP085氣壓感測器

現在我們將要安裝HC-SR04超聲波感測器。HC-SR04的檢測範圍為2-200釐米。微控制器向感測器發送激發聲波的脈衝。當感測器感知到聲波已返回時,將向微控制器發送回脈衝,計算發送脈衝的時間與接收到脈衝的時間之間的差值即可算出距離。

𝐷=(𝑡2−𝑡1)×170

 

arduino robot

圖8:位於車體正面的HC-SR04距離感測器

步驟3:數據路由

Arduino平臺提供了預定義的功能,使用者無需對一些寄存器進行配置。可以透過一些庫來實現平臺與其他週邊設備的介面。使用一根Arduino-PC電纜就可以以非常簡單地完成程式設計。該開發板配有USB-UART轉換器。

在本專案中,需要有兩個程式:一個用於機器人的功能,另一個用於遠端控制器。這兩個程式透過nRF24101+模組以無線電的方式相互通信。資料流程圖如圖9所示。有兩種方式。正向傳遞:首先,資訊被應用程式發送到Arduino。然後由收發器接管的資訊將進一步發送到第二個收發器,再返回到微控制器。這將用於控制機器人的機體運動。

arduino robot

圖9:資料流程圖

反向傳遞:控制器從感測器獲取資訊並進行處理,然後將其發送到OTA(空中下載技術),使其最終到達PC端。

步驟4:應用程式

該應用程式是透過Microsoft Visual Studio 2010使用Visual C#程式設計語言來完成的。Visual Studio在編輯部分融入視覺元素,具有非常簡潔直觀的介面。這有助於實現一些複雜的應用程式。該應用程式可以發送指令,接收資料並進行顯示。機器人的控制由鍵盤上的箭頭按鍵來實現。當您按下箭頭按鍵的時候,運動按鈕會亮起,表示指令已經被接收到。這些指令其實是串列傳送的字母,最後會到達機器人控制器進行解碼。例如,當您按下“向上”鍵時,應用程式透過USB在序列埠發送“U”,指令的解碼表如下所示:

字母 動作
U 前進
R 右轉
D 向後移動
L 左轉
N 更新
B 打開燈光
O 發送PWM值

為了達到該效果,我們應用了以下演算法:應用程式發送LED燈“打開”指令,然後遠端控制器接收指令並將其發送給機器人。一旦機器人接收到指令,就會打開LED並向應用程式發送指令打開指示燈。我們引入該演算法來避免產生不同步的問題(LED熄滅但指示燈亮起的情況)。

另一個重要問題是介面中資訊的導入和顯示。為了使應用程式能夠區分資訊並知道在哪裡顯示,我們實施了以下方法:一旦機器人從遠端控制器接收到資訊,它不僅僅只是進行簡單的傳送,還會對其進行處理並發送類似這樣的指令:“CMD: TE =” + val.marime。應用程式就會在透過序列埠檢索到以“CMD”開頭的資訊時刪除掉“:”並讀取之後的兩個字母,這兩個字母表示的是資訊將會被寫入的區域。“val. marime”會在“=”之後被讀取,對於以上示例,程式將會把讀取到的資料分配到溫度區域中。

為了使應用程式能夠識別同時按下的兩個按鍵,我們已經為每個按鍵初始化了一個變數。當按下一個按鍵時,對應事件就會其變數的值增加到1;當釋放按鍵時,對應事件就會將其變數減少到0。計時器將會持續計算這些變數的值。

arduino robot

圖10:設計應用程式

步驟5:關於程式

機器人使用的是在Arduino IDE中編譯的程式,比遠端控制器的程式要複雜的多:

  • 程式定義了向前/向後移動,轉彎,開燈,計算距離、溫度和壓力的函數。
  • 主程序是一個無限迴圈程式,將會持續判斷無線電模組是否接收到資訊,如果有,就會對輸入的代碼進行處理。
  • 如果輸入資訊與程式中的一條預設指令匹配,那麼將根據收到的字母執行相應功能。
  • 當從感測器接收到傳遞資訊的指令時,將會運行多個函數來對資訊進行收集,並將其添加到將被傳遞的向量中。
  • 如果我們要運行的是有關運動的函數,則當收到“U”,“D”,“R”或“L”時,程式將執行一個指令20ms。儘管這個時間很短,但透過持續按下筆記型電腦上的按鍵,就可以非常快速地發送一連串的指令。

步驟6:代碼

1. 遠程控制器

 

 

2. 機器人

 

 

arduino robot

圖11:完成的RF機器人

arduino robot

圖12:組裝好的RF機器人(側視圖)

現在,我們已經構建了一個自主arduino機器人,該機器人能夠自主導航並從周圍環境中收集資料!這是一個非常具有挑戰性又很有意義的項目。這個原型還可以進行進一步的改善,例如添加用於在崎嶇地形/環境中提供保護的外殼。如果您有任何改進的建議,請隨時與我分享!