電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>Arduino機(jī)器人開源分享

Arduino機(jī)器人開源分享

2022-10-26 | zip | 0.08 MB | 次下載 | 免費(fèi)

資料介紹

描述

介紹

我想介紹一下 YAAR——又一個 Arduino 機(jī)器人。YAAR(ar ar – Lt. Tasha Yar、星際迷航……和 YACC Yet Another Compiler Compiler)旨在作為機(jī)器人項目的模塊化硬件和軟件開發(fā)平臺。以下是主要特點:

  • Wi-Fi 連接命令和監(jiān)督控制
  • Wi-Fi視頻監(jiān)控
  • 用于更高級別處理的 Raspberry Pi
  • 用于低電平控制的 Arduino Mega2560
  • 閉環(huán)速度控制
  • 支持直流電機(jī)和無刷電機(jī)
  • 伺服驅(qū)動轉(zhuǎn)向
  • 軟件差動動力和轉(zhuǎn)向
  • 帶按鈕開/關(guān)的 Pi 兼容電源
  • 支持更大平臺的模塊化硬件

多年來,我已經(jīng)制造了許多具有不同程度自主性的在地板上跑來跑去的機(jī)器人。但我之前的所有機(jī)器人項目都受到通信問題的困擾。我使用了帶有 900 MHz / 2.4 GHz / 5.8 GHz 數(shù)據(jù)鏈路和視頻發(fā)射器和接收器的射頻和藍(lán)牙鏈路。它們都可以工作,但是要設(shè)置所有組件并正常工作總是很麻煩。通過 Wi-Fi 整合所有通信將是一項重大改進(jìn)。此外,我想到了一些更大的機(jī)器人項目,這些項目將受益于 Raspberry Pi 帶來的更高智能。YAAR 就是這樣誕生的。

項目說明

該項目的機(jī)械方面是使用 Fusion 360 設(shè)計的。這是一個免費(fèi)(非商業(yè))的 Autodesk 3D CAD 系統(tǒng)。CAD的基本要求是能夠?qū)С鲇糜诩す馇懈畹?DXF文件和用于3D打印的.STL文件。某些激光切割機(jī)無法正確導(dǎo)入 .DXF 文件。Inkscape 非常擅長解決這些文件不兼容問題。

我使用 DipTrace 進(jìn)行原理圖捕獲和 PWB 布局。DipTrace 可免費(fèi)用于非商業(yè)用途,以創(chuàng)建最多 500 個焊盤的一層或兩層板。如果需要,DipTrace 可以導(dǎo)出 Eagle 文件。原理圖和 PWB 布局以 DipTrace 文件的形式提供。還提供了 Gerber 文件。盡管我提供了 GBR、DXF 和 STL 格式的文件,但我鼓勵您直接從 Fusion 或 DipTrace 生成這些文件——尤其是 .DXF 文件的結(jié)果令人不安。

我通過全球速賣通購買幾乎所有的組件。最小的電阻器和電容器為 0805 尺寸,因此手工焊接很簡單。我還從中國購買了通用集成電路,例如 MCP6001 運(yùn)算放大器、TCST1103 光斷續(xù)器、DRV8833 雙電機(jī)控制和 SS34 肖特基二極管。誠然,您必須等待幾周才能交貨(我的平均時間是 3 到 4 周)。Digi-Key 是我購買 Molex C-Grid 連接器等特殊零件的首選來源。我使用 Oshpark 和 JLCPCB 作為 PCB 源。我使用 0.1 英寸 Molex C-Grid 系統(tǒng)進(jìn)行電線互連和端接。

這是一個項目概述。我不會詳細(xì)介紹諸如“下載 Arduino IDE……”之類的所有細(xì)節(jié),這需要一本書。但是,我認(rèn)為我已經(jīng)為具有基本硬件和軟件技能的人提供了足夠的資源來成功啟動和運(yùn)行 YAAR。

此處的所有內(nèi)容以及更多內(nèi)容均可從文章末尾附近的 .ZIP 文件中獲得。

建筑學(xué)

YAAR的硬件由4個主要部分組成;電源、硬件輸入/輸出和相關(guān)的微控制器、電機(jī)控制和大腦。

Raspberry Pi 的主要目的是充當(dāng)通信中心并提供高級思考能力。Pi 與運(yùn)行終端仿真程序 (PuTTY) 的 PC 之間的通信基于 Wi-Fi 上的 SSH 協(xié)議。來自攝像機(jī)的視頻也由 UV4L 流媒體服務(wù)器通過 Wi-Fi 傳輸。UV4L 是根據(jù)最佳視頻延遲選擇的,大約半秒。我在這個項目中使用了 Raspberry Pi 3B+,因為我手頭有它,并且所有 Raspberry Pi 目前都缺貨或只能以黃牛價格購買。

pYYBAGNYfSqAfylFAAElDK071CU022.png
雅爾建筑
?

微控制器選擇

Arduino Mega2560 Pro 用作低級硬件控制器。評估了另外兩個微控制器;基于 32U4 的 Pro Micro 和基于 STM32F103 的 Blue Pill。雖然 Pro Micro 有足夠的內(nèi)部資源,但它沒有足夠的 I/O 引腳來支持該項目。Blue Pill 確實有足夠的 I/O,而且速度相當(dāng)快,但很容易受到電機(jī)產(chǎn)生的噪音的影響。此外,Blue Pill 不是“主流”Arduino。安裝一致的、最新的庫并找到文檔是一項挑戰(zhàn)。

poYBAGNYfS2Ae0TnAAEh-tZhQ7g831.png
微控制器選擇
?

硬件控制單元

Arduino 連接到一個定制板,該板提供板載電源并將電源和信號分配到所有連接的輸入和輸出。一個定制的雙電機(jī)控制器板連接到配電板上。該硬件控制單元 (HCU) 共同支持以下功能:

  • 兩個有刷電機(jī)的 PWM 輸出
  • 可選,兩個用于無刷電機(jī)的 RC 輸出
  • 兩個軸編碼器傳感器輸入
  • 緊急停止保險杠
  • SR-04 聲納障礙物檢測
  • 電源監(jiān)控
  • 伺服控制轉(zhuǎn)向
  • 閃爍激光二極管(就像 Picard the Borg)
  • 壓電報警器
  • 與 Raspberry Pi 的串行通信
  • 板載 5 伏開關(guān)電源
  • 大量未使用的 I/O 以滿足未來需求

硬件控制單元響應(yīng)通過連接到 Pi 的串行端口或 Arduino IDE 串行端口發(fā)送的命令。HCU 將監(jiān)視和控制轉(zhuǎn)向和電機(jī)以完成以下任務(wù):

  • 沿直線路徑以規(guī)定的速度前進(jìn)
  • 以規(guī)定的速度倒退
  • 停止
  • 遵循規(guī)定半徑的彎曲路徑
  • 按規(guī)定量向右或向左傾斜路徑
poYBAGNYfTGAFRi1AAOOkg11TBo067.png
示意圖 - 配電板
?

硬件控制單元軟件

Pro Micro 有足夠的內(nèi)部資源(中斷、定時器、串行端口),但缺少所需數(shù)量的 I/O 引腳。Blue Pill 的速度很誘人,但我發(fā)現(xiàn)微控制器很容易受到噪音的影響,雖然我成功地讓它運(yùn)行起來,但我發(fā)現(xiàn) Mega2560 更容易連接,更無故障,軟件支持環(huán)境更發(fā)達(dá)并更好地記錄在案。Arduino 以 100 x/秒的速度管理任務(wù)調(diào)度程序,并以超過 100k/秒的循環(huán)速度運(yùn)行事件驅(qū)動的狀態(tài)機(jī),處理器開銷約為 20%。所有事件都盡可能由中斷驅(qū)動。雖然沒有藍(lán)丸那么快,但也足夠快了。

Arduino 控制方案以兩個主要元素為中心;一個任務(wù)調(diào)度器和一個狀態(tài)機(jī)。任務(wù)調(diào)度器由定時器 5 每 10 毫秒產(chǎn)生的周期性中斷驅(qū)動。中斷服務(wù)程序設(shè)置一個對應(yīng)于自上次調(diào)用以來的時間間隔的標(biāo)志。標(biāo)志設(shè)置為對應(yīng)于 10 毫秒、20 毫秒、50 毫秒、100 毫秒、…… 1 秒。主程序循環(huán)由任務(wù)調(diào)度程序組成,檢查每個標(biāo)志,如果設(shè)置,則執(zhí)行分配給該時隙的任務(wù)。最終結(jié)果是某些任務(wù)(例如閉環(huán)速度控制)可以以更高的速率執(zhí)行,而其他任務(wù)(例如電池監(jiān)控)可以以低得多的速率執(zhí)行。

poYBAGNYfTOADzHHAABpSPuQaZc559.png
任務(wù)計劃程序
?

第二個主要的軟件元素是狀態(tài)機(jī)。YAAR 始終處于幾種狀態(tài)之一,例如,停止、前進(jìn)或后退。狀態(tài)機(jī)不斷監(jiān)控與當(dāng)前狀態(tài)相關(guān)的所有輸入,如果有任何變化,則采取適當(dāng)?shù)拇胧?/font>許多事件是中斷驅(qū)動的,這減少了微控制器開銷并提高了執(zhí)行率。任務(wù)調(diào)度器每 10 毫秒執(zhí)行一次狀態(tài)機(jī)任務(wù)。

poYBAGNYfTWACpztAACB1TYfhkM447.png
狀態(tài)機(jī)
?

YAAR 的主要功能之一是光學(xué)速度編碼器,可為閉環(huán)速度控制提供速度信息。如果沒有反饋回路控制方案,速度會受到負(fù)載、摩擦、表面和幾何形狀變化的嚴(yán)重影響。YAAR 能夠以穩(wěn)定的 5 厘米/秒(0.1 英里/小時?。┑乃俣扰佬?。編碼器還支持軌道控制,可以實現(xiàn)受控轉(zhuǎn)向角,例如“右 20 度”。

轉(zhuǎn)向是通過伺服控制的前輪和兩個后輪的差速控制來完成的。在機(jī)械上,前輪簡單地安裝在伺服系統(tǒng)的前叉上。為了使 YAAR 旋轉(zhuǎn)到位,前輪伺服必須從中心左右旋轉(zhuǎn) 90 度。

電機(jī)控制

YAAR 的軟件和硬件與機(jī)器人大小無關(guān),電機(jī)控制除外。HCU 上提供了一個連接器,用于連接外部電機(jī)控制。可用的信號有 PWM、RC 伺服、電源和用于啟用和方向的單獨(dú)控制。RC 伺服信號支持現(xiàn)成的無刷電機(jī)控制器。

pYYBAGNYfTiAPYJGAAGhRX9SFS8840.jpg
DRV8833 雙電機(jī)控制板
?
poYBAGNYfTuARsLbAAERyMFBNzw397.png
示意圖
?

這里使用的電機(jī)控制是為“Arduino TT”電機(jī)設(shè)計的,這些電機(jī)體積小、容易獲得且價格便宜。Texas Instruments DRV8833 雙電機(jī)控制以 11.5 伏的最大輸入電壓為每個電機(jī)提供高達(dá) 1 安培的電流。跳線選擇 5 伏電源或電池作為電機(jī)電源 - 使用電池選項。DRV8833 每個電機(jī)只有兩個控制引腳。如果一個用于 PWM 速度控制,另一個成為方向控制,但在反轉(zhuǎn)方向時,PWM 信號必須反轉(zhuǎn)。幸運(yùn)的是,Arduino 中的定時器支持輸出反相的 PWM 信號。兩個輸入信號的狀態(tài)控制 DRV8833 如何處理反激電流(電感器關(guān)閉后流動的電流)。如果兩個輸入信號均為低電平,電流通過電源再循環(huán),直到消散,然后電機(jī)慣性滑行。如果兩個信號都為高電平,則電機(jī)對地短路,從而在電機(jī)上施加電氣制動。制動效率較低,但會導(dǎo)致低速運(yùn)行更平穩(wěn)。我選擇了制動模式進(jìn)行前進(jìn)操作,導(dǎo)致平穩(wěn)的慢速前進(jìn)運(yùn)動,但在倒車狀態(tài)下以低速移動時運(yùn)動更加劇烈。兩個示波器捕獲說明了電機(jī)兩側(cè)的波形。第一個在慢衰減模式下是正向的,第二個在快速衰減模式下是反向的。明顯的區(qū)別在于,在第二次示波器捕獲中,可以看到電機(jī)電樞“反沖”到超過電源的電壓。PWM 速率的范圍可以從 30Hz 到 31kHz。我選擇了 4kHz。電機(jī)對地短路,從而在電機(jī)上設(shè)置電子制動器。制動效率較低,但會導(dǎo)致低速運(yùn)行更平穩(wěn)。我選擇了制動模式進(jìn)行前進(jìn)操作,導(dǎo)致平穩(wěn)的慢速前進(jìn)運(yùn)動,但在倒車狀態(tài)下以低速移動時運(yùn)動更加劇烈。兩個示波器捕獲說明了電機(jī)兩側(cè)的波形。第一個在慢衰減模式下是正向的,第二個在快速衰減模式下是反向的。明顯的區(qū)別在于,在第二次示波器捕獲中,可以看到電機(jī)電樞“反沖”到超過電源的電壓。PWM 速率的范圍可以從 30Hz 到 31kHz。我選擇了 4kHz。電機(jī)對地短路,從而在電機(jī)上設(shè)置電子制動器。制動效率較低,但會導(dǎo)致低速運(yùn)行更平穩(wěn)。我選擇了制動模式進(jìn)行前進(jìn)操作,導(dǎo)致平穩(wěn)的慢速前進(jìn)運(yùn)動,但在倒車狀態(tài)下以低速移動時運(yùn)動更加劇烈。兩個示波器捕獲說明了電機(jī)兩側(cè)的波形。第一個在慢衰減模式下是正向的,第二個在快速衰減模式下是反向的。明顯的區(qū)別在于,在第二次示波器捕獲中,可以看到電機(jī)電樞“反沖”到超過電源的電壓。PWM 速率的范圍可以從 30Hz 到 31kHz。我選擇了 4kHz。我選擇了制動模式進(jìn)行前進(jìn)操作,導(dǎo)致平穩(wěn)的慢速前進(jìn)運(yùn)動,但在倒車狀態(tài)下以低速移動時運(yùn)動更加劇烈。兩個示波器捕獲說明了電機(jī)兩側(cè)的波形。第一個在慢衰減模式下是正向的,第二個在快速衰減模式下是反向的。明顯的區(qū)別在于,在第二次示波器捕獲中,可以看到電機(jī)電樞“反沖”到超過電源的電壓。PWM 速率的范圍可以從 30Hz 到 31kHz。我選擇了 4kHz。我選擇了制動模式進(jìn)行前進(jìn)操作,導(dǎo)致平穩(wěn)的慢速前進(jìn)運(yùn)動,但在倒車狀態(tài)下以低速移動時運(yùn)動更加劇烈。兩個示波器捕獲說明了電機(jī)兩側(cè)的波形。第一個在慢衰減模式下是正向的,第二個在快速衰減模式下是反向的。明顯的區(qū)別在于,在第二次示波器捕獲中,可以看到電機(jī)電樞“反沖”到超過電源的電壓。PWM 速率的范圍可以從 30Hz 到 31kHz。我選擇了 4kHz。明顯的區(qū)別在于,在第二次示波器捕獲中,可以看到電機(jī)電樞“反沖”到超過電源的電壓。PWM 速率的范圍可以從 30Hz 到 31kHz。我選擇了 4kHz。明顯的區(qū)別在于,在第二次示波器捕獲中,可以看到電機(jī)電樞“反沖”到超過電源的電壓。PWM 速率的范圍可以從 30Hz 到 31kHz。我選擇了 4kHz。

電機(jī)控制任務(wù)是一個簡單的誤差反饋回路,由比例和積分校正項組成(定時器 OCR2A、B 寄存器用作 I 項)。我嘗試過使用 D 項,但沒有發(fā)現(xiàn)任何改進(jìn)。也許隨著更快的編碼器更新率,這會改變。該任務(wù)每秒執(zhí)行 20 次。電機(jī)控制軟件編寫在 Arduino IDE 中標(biāo)有“DRV8833”的單獨(dú)選項卡中,以方便更換其他電機(jī)控制器。在將診斷報告打印到 IDE 串行監(jiān)視器時,有時會觀察到電機(jī)速度的“打嗝”,因為在較長的報告期間任務(wù)會暫停。

編碼器

槽編碼器是一個簡單的電路。盡管您可以在 AliExpress 上以 1 美元的價格購買 Arduino 機(jī)器人的插槽編碼器,但我測試過的那些有幾個缺點。最大的問題是它們會反彈。它們很大并且消耗大量電流。該電路消除了運(yùn)算放大器周圍正反饋的反彈。

插槽編碼器是 YAAR 設(shè)計的關(guān)鍵。它們可以實現(xiàn)準(zhǔn)確的速度控制和跟蹤。所示電路結(jié)構(gòu)緊湊、功耗低且無反彈。該電路的工作電壓為 3V 至 6V。

與編碼器一起改進(jìn)的編碼器盤有 50 個孔,而不是通常的 10 個。不幸的是,沒有實用的方法將編碼器盤連接到電機(jī)軸的末端而不是輪軸。盡快獲取盡可能多的速度信息是實現(xiàn)平穩(wěn)低速運(yùn)行的關(guān)鍵。五十個孔是我的激光切割機(jī)能干凈地切割的最大值。圓盤是從 1/16” 層切割而成的。用 2-56 或 2mm 螺釘將圓盤連接到輪軸的另一端。PWB 應(yīng)在 2 盎司的 032 英寸庫存上制造。銅。

pYYBAGNYfT6AHMseAAH7OXpiRbM559.jpg
編碼器
?
poYBAGNYfUCAarEWAACMvYc13PU626.bmp
編碼器
?

電源

電源是一個開關(guān)模式降壓轉(zhuǎn)換器,可將 7.4 伏 2S 鋰聚合物電池調(diào)節(jié)至 5 伏。按下按鈕即可啟動系統(tǒng)電源。關(guān)機(jī)是用同一個按鈕完成的——就像你的電腦一樣。這很重要,因為就像不建議拔掉 PC 上的插頭一樣,也不建議將其用于 Raspberry Pi。為什么不直接關(guān)掉電源?因為 Pi 有很多家務(wù)要做才能關(guān)閉。如果此過程在錯誤的時間中斷,SD 卡文件可能會損壞。電源直接插入 Pi 的 40 針接頭,由 Arduino 控制。請注意,當(dāng)按下按鈕時,配電板的電源是通過按鈕提供的,然后通過二極管到配電板上電源的使能引腳。Arduino 啟動后(大約需要一秒鐘),Arduino 將通過第二個隔離二極管控制使能引腳。

  • 直接連接到 Pi 20 排針
  • 20 伏最大電池輸入
  • 3 安培輸出
  • 可調(diào)電位器從 4.95 到 5.48 伏輸出
  • 92% 效率
  • 2 芯 LiPo 供應(yīng)
poYBAGNYfUeAVEwnABBRrS2aUUQ045.jpg
帶有附加電源的 Pi
?
poYBAGNYfUmAHVIYAACYnN_LGnM332.bmp
電源
?
pYYBAGNYfUuAfcn5AAA9PO9WM9Y504.png
電源控制
?

該電源基于 Diodes Inc. 的 3 Amp AP62300T 開關(guān)模式穩(wěn)壓器。最初,我將電源設(shè)計為使用 5 Amp Texas Instruments TPS565201 穩(wěn)壓器。然而,在我最初的原型機(jī)開始工作后,我試圖訂購更多,卻發(fā)現(xiàn)交貨時間已經(jīng)延長到一年多。我暗自竊笑,我的小項目助長了汽車行業(yè)的“芯片短缺”。幸運(yùn)的是,AP62300T 幾乎可以直接替代。我對 Raspberry Pi 的所有電流消耗(帶攝像頭)的測量平均不到 1 安培,在 1.75 安培的啟動期間有短暫的偏移,因此 AP62300T 就足夠了。參考電壓和使能引腳控制要求存在細(xì)微差別。此外,還有兩個版本;具有不同參考電壓的“T”和“非 T”版本。沒關(guān)系——原理圖顯示了每個版本的正確電阻。與從速賣通購買的大多數(shù)組件一樣,數(shù)據(jù)表是一廂情愿的想法。中國采購的電容都沒有爆炸,7x7x3 毫米電感器的額定電流似乎普遍超過 5 安培。顯示電阻值時,輸出范圍為 4.95 V 至 5.48 V(使用“T”版本)。調(diào)整微調(diào)電位器時要小心,如果您沒有非導(dǎo)電螺絲刀,請勿在插入 Pi 時進(jìn)行調(diào)整 - 將金屬十字螺絲刀插入插槽會改變電壓。安裝R1后,除非EN引腳拉高,否則電源不會打開,因此請在測試和調(diào)整單元后安裝R1。我已將設(shè)備調(diào)整為 5.1 V,負(fù)載為 5 Ohm。電源將保持穩(wěn)定,除非電池電壓低于 6.5 伏,此時 2 節(jié)鋰聚合物電池將耗盡 90% 以上。AP62300T 的額定最大輸入電壓為 20 伏。

事實證明,控制連接器的最佳方向是 90 度。這掩蓋了電壓調(diào)整微調(diào)器,使調(diào)整乏味。調(diào)整微調(diào)器時關(guān)閉電源。與硬件控制單元的連接如下:

poYBAGNYfU6AEWMUAAAssXF3Kjc158.png
線路調(diào)節(jié)
?
pYYBAGNYfVCAUXjwAAAybkA2bcs124.png
負(fù)載調(diào)節(jié)
?

電源還提供 I2C 連接器。將電源連接到 Pi 的連接器掩蓋了 SDA 和 SCL 信號,因此它們在 I2C 連接器上與幾個控制信號一起重新創(chuàng)建。

您可能已經(jīng)注意到,電池始終連接到系統(tǒng),這可能會導(dǎo)致大量漏電流。泄漏電流測量為 10 uA,相當(dāng)于 LiPo 18650 電池的數(shù)年。PWB 應(yīng)在 2 盎司的 032 英寸庫存上制造。銅。最后,因為 Arduino 需要大約一秒鐘才能啟動,所以您必須按住按鈕直到持續(xù)的嗶聲開始或激光二極管開始閃爍,這意味著 Arduino 已經(jīng)啟動。

電源和信號排序

互連電路上電和斷電時必須特別小心。大多數(shù) IC 具有輸入保護(hù)二極管,如部分?jǐn)?shù)據(jù)表原理圖所示。在我們的例子中,Arduino 首先啟動,這意味著 Pi 仍然處于關(guān)閉狀態(tài)。如果 Arduino 試圖向 Pi 上的任何引腳輸出數(shù)字高電平,結(jié)果將是通過輸入保護(hù)二極管短路。這將大大超過 Arduino 的最大輸出電流額定值和 Pi 的輸入電流額定值。但問題還不止于此。一些 IC 容易受到“閂鎖”的影響,這意味著如果在上電期間電流流過體二極管,整個 IC 將像 SCR 一樣將電源短路到地,從而導(dǎo)致尖銳的“砰砰”聲,a一小股煙霧和我們極客非常熟悉的刺鼻氣味。關(guān)閉電源時必須牢記這些相同的注意事項;所有 Arduino 輸出都處于三態(tài),只有這樣 Pi 才能安全關(guān)閉。您可以通過 SSH / PC 終端鏈接發(fā)送“(K)ill”命令或按下按鈕來執(zhí)行此過程。

poYBAGNYfVKAOiwBAAAau9nP2XE120.png
輸入保護(hù)二極管
?

傳感器單元

傳感器單元由攝像頭、SR-04超聲波距離傳感器、保險杠開關(guān)和激光二極管組成。3D 打印支架專為所有傳感器設(shè)計,以便在安裝到機(jī)器人之前進(jìn)行組裝和接線。

SR-04、攝像頭和保險杠開關(guān)安裝在升高的頭部單元中。這是用 3 毫米螺釘連接到 ECU 的,因此可以向上旋轉(zhuǎn)以訪問下面的連接。安裝相機(jī)時要小心。在組件下面放一塊軟布,否則會損壞鏡頭。

注意:激光二極管模塊包含一個 91 歐姆的電阻器,它會從微控制器輸出中汲取過多的電流 (31 mA)。這必須用一個 150 歐姆的電阻器代替,它將電流限制在 19 毫安。

pYYBAGNYfVmAMa3mABAv6GrnLY4007.jpg
傳感器接線
?

樹莓派

Raspberry Pi 充當(dāng) YAAR 的“大腦”和通信中心。目前命令通過 SSH 通過 Wi-Fi 從 PC 終端 (PuTTY) 發(fā)送到 Pi,然后通過串行鏈路中繼到硬件控制單元。通過連接到 Pi 的攝像頭使用低延遲 UV4L 軟件鏈接到瀏覽器窗口,在 PC 上監(jiān)控進(jìn)度。

在這一點上,我必須承認(rèn)我不是 Python / Linux 程序員。Python 代碼的第一部分是一個簡單的草圖,它監(jiān)控來自 Arduino 的輸入,并在信號變低時執(zhí)行關(guān)機(jī)命令。這是從網(wǎng)絡(luò)上許多地方發(fā)現(xiàn)的按鈕關(guān)閉代碼中提取的一個簡單的黑客攻擊。第二段代碼原則上很簡單,但需要一段時間才能正常工作。基本上,代碼將來自 SSH 端口的任何輸入發(fā)送到 UART,并將從 UART 接收到的任何輸入發(fā)送到 SSH 端口。聽起來很容易,對吧?

pYYBAGNYfVuAIObFAAA-DsqBTaE848.png
機(jī)器人控制
?
#!/usr/bin/env python3
# non blocking input from SSH
# without "timeout" any noise will hang program
# This is a Pyton3 sketch, the .py file type is removed so it can be invoked easier


import sys
import select
import serial
from time import sleep


ser = serial.Serial("/dev/ttyS0", 9600, timeout=1) # timeout=1 second


while True:
    while sys.stdin in select.select([sys.stdin], [], [], 0)[0]:
        fromSSH = sys.stdin.readline() #get input string from PC via SSH
    
        if fromSSH:                    # if not empty
            fromSSH += '\n'            # add lf, needed for parseInt()
            toUART = fromSSH.encode('utf-8') # convert utf-8 to bytes
            ser.write(toUART)          # write out ascii bytes
            sleep(0.1)                 # time for Arduino to reply
 
    else:
        if ser.inWaiting() > 0:        # anything from Arduino?
            fromUART = ser.readline()  # '\n' terminated line, bytes
            toSSH = fromUART.decode()  # convert bytes to utf-8 string
            print(toSSH)               # send to PC via SSH

以下是必須在 Pi 上安裝的操作和項目的概述:

  • 啟用 Wi-Fi
  • 啟用并測試與您的 PC 終端程序的 SSH 通信(PuTTY 主機(jī)名 raspberrypi,端口 22,連接類型 SSH,登錄為:pi,Pi@raspberrypi 的密碼:默認(rèn)為 raspberry,除非您更改它)
  • 安裝和測試 Python shutdown.py 代碼——使用接地按鈕進(jìn)行測試
  • 使 shutdown.py 在啟動時執(zhí)行
  • 安裝和測試 UV4L
  • 安裝和測試robot.py——此時你應(yīng)該能夠連接到Y(jié)AAR并通過Wi-Fi/SSH/PuTTY與HCU通信

接線

制作線束。我為 SIG1 使用了一個 18 針 DRH,為 SIG2 使用了一個 24 針 DRH,一個 6 針 SRH 用于連接電源的控制連接器,一個 6 針極化 SRH 用于連接傳感器頭單元的連接器。

poYBAGNYfV6AQcJ-AAGa9f2eoSg167.png
雅爾接線
?
pYYBAGNYfWWACKP9ABJr-SFWmVs545.jpg
線束
?

機(jī)械的

從機(jī)械上講,YAAR 沒什么好說的——只是測試電子設(shè)備和開發(fā)軟件所需的最低要求。我發(fā)現(xiàn)激光切割 1/8” (3mm) lite ply (3 ply poplar) 是一種快速簡便的車身制造方法。我使用薄的氰基丙烯酸酯膠來組裝膠合板,事先用橡皮筋把它粘在一起。小心不要讓電機(jī)支架周圍或 ECU 安裝區(qū)域有多余的膠水——這些地方非常貼合。

poYBAGNYfWuAWObcAAsu_hMyCkM756.jpg
身體
?

電機(jī)提出了一個設(shè)計挑戰(zhàn)——在某些電機(jī)和車輪中,電機(jī)與車輪的間隙可能小至 1 毫米(存在相當(dāng)大的差異)。不幸的是,電機(jī)安裝螺釘直接位于擠壓點下方,因此即使電機(jī)安裝在車身外側(cè),螺釘頭也會在車輪上摩擦。解決方案是設(shè)計一個 3D 打印電機(jī)安裝座,該安裝座用螺釘固定在車身內(nèi)部,并放置在足夠間隙的位置。編碼器底座通過正常的電機(jī)安裝孔連接到電機(jī)底座,以確保編碼器和編碼器盤的正確光學(xué)對準(zhǔn)。組裝電機(jī)/電機(jī)支架/編碼器支架時,注意電機(jī)本體上的小突起與車輪在同一側(cè)(電機(jī)不對稱)。我盡可能使用 3 毫米螺釘并輕敲 3D 打印的 PLA。這導(dǎo)致非常令人滿意的組裝過程。舊臺式電腦可以是 3 毫米螺絲的母線。

有幾個 3D 打印部件:

  • 電子控制單元 (ECU) – Pi、HCU 和電池的支架
  • 保險杠延長臂 – 延長微動開關(guān)臂
  • 保險杠 - 連接車輪前部的兩個保險杠臂延伸件
  • 伺服安裝 - 持有轉(zhuǎn)向伺服
  • 前叉 – 可容納 1.75” 輪子
  • 電機(jī)安裝 - 固定電機(jī)和編碼器安裝
  • 傳感器安裝 - 允許在安裝前對傳感器單元進(jìn)行接線

ECU 設(shè)計用于安裝 Raspberry Pi 3B+。Pi 4 需要重新設(shè)計。前叉是為具有 25 個樣條的 TS-53 伺服系統(tǒng)設(shè)計的。不同的伺服系統(tǒng)可能需要重新設(shè)計。我選擇的 TS-53 伺服已經(jīng)過時了。我相信源文件中建議的替代方案更好,但未經(jīng)測試。為了讓 YAAR 旋轉(zhuǎn)到位,伺服必須能夠旋轉(zhuǎn) 180 度。

將微動開關(guān)臂向前彎曲到足以使保險杠在壓下時與前輪脫離。使用制造商最好的朋友 - 熱熔膠將保險杠連接到手臂延伸部分。

測試/調(diào)試

我的第一步是拿出熱熔膠槍,在 Arduino 上的微型 USB 連接器上涂上一團(tuán)膠水。沒有什么比在從板上撕下后看到 USB 電纜末端懸掛的連接器更令人沮喪的了。

首先對 HCU 進(jìn)行基準(zhǔn)測試。將 Arduino 連接到配電板并連接微型 USB。調(diào)用 Arduino IDE 并加載代碼。不要在 HCU 上附加任何其他東西。電源將由 USB 提供。調(diào)用 IDE 串行監(jiān)視器并確認(rèn)顯示菜單。

pYYBAGNYfW2AK3h2AADDKezZTn4564.png
菜單
?

接下來將電機(jī)控制模塊和兩個電機(jī)組件連接到 HCU。可以通過發(fā)送正向和反向命令來測試電機(jī)。請記住,電源由 PC USB 端口供電,因此請限制您的速度。我的果汁以大約 25 厘米/秒的速度耗盡。通過在每個車輪上放一點便利貼來檢查編碼器是否正確運(yùn)行,并通過注意標(biāo)記的相對位置未更改來驗證電機(jī)實際上是否在跟蹤。問題可能是由編碼器和編碼器盤未對準(zhǔn)或被遮擋(或部分遮擋)的槽造成的。

連接傳感器模塊和連接器 SIG2。激光應(yīng)該開始閃爍。超聲波測距儀可以使用報告 3 進(jìn)行測試。

將電源連接到 SIG1 連接器,將 SIG1 連接器連接到 HCU。向電源施加 7.4V 電源。確認(rèn)保險杠開關(guān)和按鈕的正確操作。每當(dāng)進(jìn)入 STOP 狀態(tài)時,HCU 都會發(fā)送一個表示原因的二進(jìn)制代碼 (CODABOPP):

pYYBAGNYfXCAJweYAACkOYepAg0039.jpg
CODABOPP
?

單擊監(jiān)視器中的數(shù)據(jù)輸入窗口并輸入命令,例如“f”表示前進(jìn),然后輸入“v10”表示速度。有 7 個內(nèi)置診斷報告,例如“x1”,如下圖所示(見插圖)。請注意,基本指令速度為 10 厘米/秒,但每個電機(jī)都在稍微修改指令速度,因為轉(zhuǎn)向任務(wù)試圖保持軌道筆直,Adist = Bdist。

poYBAGNYfXKAaxiCAABin4_yGmk977.jpg
報告 1
?

有7個報告:

1 - 電機(jī)信息

2 - 轉(zhuǎn)向

3 - 一般

4 - 平

5 - 旋轉(zhuǎn)

6 - 電源控制

7 - 機(jī)械和菜單

輸入任何沒有預(yù)期參數(shù)的命令都會將該參數(shù)設(shè)置為零,因此調(diào)用報告 0 將關(guān)閉任何活動報告。您將不得不檢查代碼以了解許多列的含義,因為縮寫的標(biāo)題可能是鈍的。

請注意,您的 PC 的 USB 連接器可能限制為 500 mA。接近此限制將導(dǎo)致異常行為。

幾秒鐘后,您將看到顯示器上顯示的命令菜單。命令可以從 IDE 串行監(jiān)視器或 Raspberry Pi 串行端口(通過 SSH 和 PuTTY)發(fā)送到 Arduino。

在您對 HCU 正常運(yùn)行感到滿意后,將電源連接到 Pi 并將 HCU 連接到控制連接器。連接電池(或外部電源)。請記住,當(dāng)連接 Arduino IDE 時,您必須小心不要導(dǎo)致 Arduino 重置,因為這會立即關(guān)閉 Pi 的電源,例如當(dāng)您加載新代碼或調(diào)用監(jiān)視器時。該軟件檢測電池的存在,并僅在存在且充電充足的情況下為 Pi 供電。使用 Raspberry Pi 和 Arduino IDE 進(jìn)行調(diào)試并激活監(jiān)視器可能會很棘手。這是我的啟動程序:

在 PC 上調(diào)用 Arduino IDE,打開相應(yīng)的代碼文件

將 USB 電纜插入 Arduino,這將啟動 Arduino,但不會啟動 Pi

啟用 IDE 串行監(jiān)視器,這將重新啟動 Arduino

如果需要,將新代碼加載到 Arduino

將電池連接到電源板上

禁用然后重新啟用 IDE 串行監(jiān)視器,這將重新啟動 Arduino 和 Pi。將注意到電池的存在,并且 Pi 將通電。

幾秒鐘后,您將看到顯示器上顯示的命令菜單。Pi 大約需要 30 秒才能啟動,之后您可以確認(rèn)視頻鏈接的操作。命令可以從 IDE 串行監(jiān)視器或 Raspberry Pi 串行端口(通過 SSH 和 PuTTY)發(fā)送到 Arduino。

通過按下按鈕或發(fā)送 (K)ill 命令來完成關(guān)機(jī)。等待斷開電池,直到警報停止發(fā)出嗶嗶聲或激光停止閃爍。如果要將新代碼加載到 Arduino 中,請關(guān)閉系統(tǒng),斷開電池,加載代碼并重新啟動系統(tǒng)。Arduino 和 Pi 之間的通信失敗通常是由電池電量不足引起的。盡管我對在操作過程中關(guān)閉 Pi 進(jìn)行了所有警告,但我的機(jī)器在數(shù)十次意外斷電后仍然幸免于難,沒有發(fā)現(xiàn)任何不良影響。

在調(diào)試 HCU 時,我確實遇到了一個棘手的問題,其特點是電機(jī)在低速時運(yùn)行良好,但在加速時會打嗝或重置。這(終于?。┍蛔粉櫟?20 針 MTRCTRL 連接器上的引腳 1 和 2 與 SIG1 連接器上的接地引腳 1 和 2 之間的弱接地連接。在引腳之間添加 22 號線解決了這個問題。

手術(shù)

YAAR 響應(yīng) 9 個基本命令:

  • 停止 - 進(jìn)入停止?fàn)顟B(tài),電機(jī)將應(yīng)用電機(jī)制動
  • 前進(jìn) - 進(jìn)入前進(jìn)狀態(tài)(速度 = 0)
  • 反向 - 進(jìn)入反向狀態(tài)(速度 = 0)
  • 速度——設(shè)定規(guī)定的速度
  • 距離 - 設(shè)置規(guī)定的距離(默認(rèn) = 10 公里)
  • 曲線 - 將路徑設(shè)置為以厘米為單位的規(guī)定半徑的右 (+) 或左 (-) 圓
  • 右 - 以度數(shù)設(shè)置規(guī)定的新軌道
  • 左 - 如果從停止?fàn)顟B(tài)執(zhí)行,YAAR 將原地旋轉(zhuǎn)
  • Halt – 設(shè)置速度=0,但保持正向或反向狀態(tài)

命令可以從 Arduino 串行控制臺輸入或由 Raspberry Pi 發(fā)送。一個典型的命令包括進(jìn)入所需的狀態(tài),然后指定所需的速度。命令不區(qū)分大小寫。每個命令都必須使用 發(fā)送,例如:

f     Enter the forward state
v20   Set speed to 20 cm/sec, begin moving forward

以下命令序列將導(dǎo)致 YAAR 以 30 厘米/秒的速度向后移動 100 厘米:

b     Enter the backup state
d100  Set distance to 100 cm
v30   Set speed to 30 cm/sec, begin moving backward

可以輸入相同的命令序列:

B d100 v30 Use spaces to separate commands, execute upon ENTER

在 YAAR 進(jìn)入前進(jìn)狀態(tài)后,可以使用 R、L 和 C 命令修改路徑。

f      Enter the forward state
v20   Begin forward motion at speed = 20 cm/sec
r45   Change track to the right 45 degrees
c-100 Circle to the left with a radius of 1 meter
r     Change track to right 0 degrees (straight ahead)
s     Enter the stop state
r360  Enter the spin state, rotate in place right 360 degrees

在后備狀態(tài)下不調(diào)用轉(zhuǎn)向任務(wù),從而導(dǎo)致在反向時對兩個電機(jī)的速度命令相同。

?

從這里到哪里?

現(xiàn)在,大腦并沒有像中繼通信那樣考慮太多,但可能性是無窮無盡的……首先,正如我所說,我不太習(xí)慣用 Python 編碼。但也許我的第一步是用飛行時間傳感器(如通過 I2C 連接到 Pi 的 VL53L5)替換 SR-04 超聲波距離傳感器。這將導(dǎo)致架構(gòu)改進(jìn),因為 Pi 將能夠利用空間信息以及簡單的避障。它也會給 Pi 一些思考的東西,這是項目的重點。

之后,以下項目招手;跟隨一個顏色斑點,在房子周圍導(dǎo)航,構(gòu)建一個更大的平臺,遠(yuǎn)程呈現(xiàn),音頻命令,跟隨一個人……如果有人感興趣,我很想合作擴(kuò)展這個項目的功能。


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

評論

查看更多

下載排行

本周

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

本月

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

總榜

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