這篇文章來(lái)源于DevicePlus.com英語(yǔ)網(wǎng)站的翻譯稿。
試想一下,您剛搬到一個(gè)新地方,需要盡快添置家具,但是手頭沒(méi)有卷尺可以進(jìn)行測(cè)量。那么,這款Parallax激光Arduino機(jī)器人就會(huì)派上用場(chǎng)!
我們?cè)谥暗奈恼隆度绾沃谱髯约旱臋C(jī)器人》 和《如何制作自己的機(jī)器人(第2部分)》中描述了如何利用Arduino UNO R3從零開(kāi)始搭建屬于自己的機(jī)器人。在本文中,我們將進(jìn)一步增加機(jī)器人的功能:讓它能夠動(dòng)起來(lái)并且添加激光測(cè)距(LRF)功能,以使該設(shè)備能夠檢測(cè)物體并測(cè)量距離。
激光傳感器會(huì)幫我們獲得更準(zhǔn)確、更可靠的數(shù)據(jù)。該Arduino機(jī)器人的移動(dòng)方式為自主移動(dòng)模式。它在移動(dòng)的過(guò)程中能夠檢測(cè)到障礙物并主動(dòng)避開(kāi)。
該機(jī)器人的設(shè)計(jì)目標(biāo)如下:
向前、向后移動(dòng);向左和向右旋轉(zhuǎn)90度;向左和向右旋轉(zhuǎn)45度。
基于最佳路徑,通過(guò)向不同方向移動(dòng)避開(kāi)障礙物。
測(cè)量各個(gè)方向(前方、左右90度、左右45度)的距離。
基于可用的最長(zhǎng)距離,確定朝哪個(gè)方向前進(jìn)(向前、向后、向左或向右)。
傳感器安裝在伺服上,以便機(jī)器人可以左右平移以進(jìn)行多次測(cè)量。測(cè)量的距離將顯示在一塊小型OLED顯示屏上。我們將使用步進(jìn)電機(jī)實(shí)現(xiàn)平穩(wěn)、安靜的運(yùn)行。
我們會(huì)一步一步地討論該Arduino機(jī)器人的構(gòu)建過(guò)程。第一步是如何安裝底盤(pán)、電機(jī)和Arduino/電機(jī)開(kāi)發(fā)板。然后,我們利用一個(gè)小程序來(lái)測(cè)試電機(jī),以確保系統(tǒng)連接和軟件安裝都準(zhǔn)確無(wú)誤。然后,在下一篇文章中,我們會(huì)逐步添加其余設(shè)備,并且每一步都通過(guò)程序來(lái)測(cè)試安裝和連接是否正確。通過(guò)這種按部就班的方法能夠讓我們更方便地解決制作過(guò)程中遇到的任何問(wèn)題。
硬件
制作該機(jī)器人所需的硬件請(qǐng)參見(jiàn)以下硬件明細(xì),這些零部件在許多電商處都可以買(mǎi)到(明細(xì)中給出了部分地址)。
Arduino Uno rev 3 (www.adafruit.com/products/50)
適用于Arduino的Adafruit步進(jìn)電機(jī)開(kāi)發(fā)套件 (www.adafruit.com/products/1438)
步進(jìn)電機(jī)(www.adafruit.com/products/324)
底盤(pán)、螺絲和尾輪 Parallax.com
車輪、橡膠輪胎和輪轂 Makeblock.com
伺服裝置和安裝套件(www.parallax.com/product/570-28015)
Parallax激光測(cè)距儀(www.parallax.com/product/28044)
OLED顯示屏(www.seeedstudio.com/Grove-OLED-Display-1.12”-p-824.html)
紅色包裝紙/盒(https://www.seeedstudio.com/Grove-Red-Wrapper-1*2(4-PCS-pack)-p-2585.html
鋰聚合物電池3型(11.1V)和連接器(https://www.hobbyking.com/hobbyking/store/__18203)
195 x 195 x 3mm亞克力板(https://www.jaycar.com.au/clear-acrylic-sheet/p/HM9509)
軟件
Arduino IDE
Adafruit Motor Shield Library
LCD Display9696 Library.zip
工具
圓銼
Dremel 電動(dòng)工具
電烙鐵
迷你鋼鋸
安裝電機(jī)、輪子和亞克力底座
Parallax底盤(pán)由高強(qiáng)度鋁制成。該部件是專門(mén)為伺服系統(tǒng)而不是步進(jìn)電機(jī)設(shè)計(jì)的,因此我們需要做一些修改。
首先,要將電機(jī)安裝到機(jī)箱上,我們得在機(jī)箱的兩側(cè)開(kāi)口。請(qǐng)用Dremel電動(dòng)工具按照電機(jī)的安裝尺寸精確切割機(jī)箱。
我們使用的步進(jìn)電機(jī)型號(hào)為NEMA 17,其分辨率為200步/轉(zhuǎn)。其供電規(guī)格為12V 350mA。
要將電機(jī)裝入底盤(pán)內(nèi),我們需要尺寸為6.5cm x 4.5cm的亞克力板,如圖1所示。請(qǐng)用鋼鋸將亞克力板切割成所需尺寸,然后用Dremel電動(dòng)工具鉆孔。用M2x10mm的螺釘將電機(jī)裝在亞克力安裝板上,兩個(gè)電機(jī)需要8顆螺釘。然后,將制作完畢的亞克力板和電機(jī)安裝到底盤(pán)內(nèi)。
圖1.將步進(jìn)電機(jī)安裝在6.5×4.5cm亞克力板上
要固定Arduino和OLED顯示屏,我們需要切割一塊15cmx8cm的亞克力底座(圖2)。請(qǐng)用4個(gè)墊片和螺絲安裝亞克力底座,然后用附帶的銷釘安裝尾輪。
圖2.機(jī)箱、尾輪和15×8亞克力板底座
圖3.輪子和軸連接器
圖4.安裝在底盤(pán)上的步進(jìn)電機(jī)和尾輪
我們需要用圖3中所示的軸連接器安裝輪子。但是,我們必須做一個(gè)小修改。軸孔的直徑為4mm,而步進(jìn)電機(jī)軸的直徑為5mm。因此,我們需要將連接器的孔擴(kuò)大到5mm。請(qǐng)使用圓銼或Dremel工具擴(kuò)孔。擴(kuò)孔時(shí)一定要小心操作!
圖5.安裝在底盤(pán)上的亞克力底座
請(qǐng)將電機(jī)線纜從頂部的孔穿出,然后用雙面膠帶將電池粘在機(jī)箱下方。對(duì)于該項(xiàng)目來(lái)說(shuō),鋰聚合物電池是理想解決方案。其供電規(guī)格為11.1V 800mAh?1000mAh,這使得系統(tǒng)續(xù)航可超過(guò)1小時(shí),而且還可以充電。但是該電池需要專門(mén)的充電器。如果您是航空模型或遙控車愛(ài)好者,那么您肯定知道這種電池。我們也可以用6或8節(jié)AA電池(9-12V)代替。
圖6.用雙面膠將電池粘在底盤(pán)上
將電機(jī)電纜連至電機(jī)開(kāi)發(fā)板
Adafruit 電機(jī)開(kāi)發(fā)板規(guī)格 – Adafruit
與Arduino高分辨率專用計(jì)時(shí)器相連的兩個(gè)5V Hobby伺服器接口
4個(gè)H橋:搭載TB6612芯片組,每個(gè)橋可提供1.2A電流(峰值為3A,持續(xù)20ms),具有熱關(guān)斷保護(hù)功能,以及內(nèi)部反沖保護(hù)二極管。可為電機(jī)提供4.5VDC至13.5VDC供電。
可連接最多4個(gè)雙向直流電機(jī),具有單獨(dú)8位速度選擇功能。
可連接最多2個(gè)單線圈、雙線圈、交叉步進(jìn)或微步進(jìn)電機(jī)(單極或雙極)。
經(jīng)測(cè)試與Arduino UNO、Leonardo、ADK/Mega R3、Diecimila和Duemilanove兼容。兼容Due,配有3.3v邏輯跳線。兼容Mega/ADK R2及更早版本,具有2個(gè)跳線。
5v 或 3.3v邏輯電平(跳線可配置)。
該電機(jī)開(kāi)發(fā)板能同時(shí)運(yùn)行2個(gè)步進(jìn)電機(jī)和2個(gè)伺服器。該步進(jìn)電機(jī)開(kāi)發(fā)板的一個(gè)很大優(yōu)勢(shì)在于它不占用任何Arduino引腳,因?yàn)樗ㄟ^(guò)I2C連接。唯一需要引腳的是伺服器。我們只需按照說(shuō)明連接電機(jī)電纜即可。
要了解步進(jìn)電機(jī)的基本知識(shí)及其與Arduino UNO R3的連接,請(qǐng)參考《Arduino與零件和傳感器——步進(jìn)電機(jī)第1部分》。
圖7.將電機(jī)連至電機(jī)開(kāi)發(fā)板
圖8.亞克力底座上的Arduino和電機(jī)開(kāi)發(fā)板
現(xiàn)在,我們只需要根據(jù)下圖安裝輪子和電池接頭即可。
圖9.步進(jìn)電機(jī)電纜連至電機(jī)開(kāi)發(fā)板
安裝軟件并上傳代碼
現(xiàn)在,我們可以運(yùn)行第一段代碼了!首先,我們需要從Arduino網(wǎng)站下載并安裝Arduino IDE,從Adafruit網(wǎng)站上下載并安裝電機(jī)開(kāi)發(fā)板庫(kù)。安裝成功后,請(qǐng)將以下源代碼復(fù)制到Arduino中。
//******************************************************************************************************************************************* #include #include #include "utility/Adafruit_MS_PWMServoDriver.h" Adafruit_MotorShield AFMS = Adafruit_MotorShield(); Adafruit_StepperMotor *myMotor1 = AFMS.getStepper(200, 1); Adafruit_StepperMotor *myMotor2 = AFMS.getStepper(200, 2); void setup() { Serial.begin(9600); // set up Serial library at 9600 bps Serial.println("Stepper test!"); AFMS.begin(); // create with the default frequency 1.6KHz myMotor1->setSpeed(100); // 100 rpm myMotor2->setSpeed(100); // 100 rpm } void loop() { Motor(50,3); // turn Left for 50 steps delay(1000); Motor(100,4); // turn Right for 100 steps delay(1000); Motor(50,3); // turn Left for 50 steps (back to original position) delay(1000); Motor(400,1); // move Forward for 400 steps delay(1000); Motor(400,2); // move Backward for 400 steps delay(1000); } //******************************************* ************************************* void Motor(int x,int y) { int i = 0; for ( i; (i < x); i ++) { if (y == 1) // move forward { myMotor1->step(1, FORWARD, SINGLE); myMotor2->step(1, BACKWARD, SINGLE);} if (y == 2) // move backward {myMotor1->step(1, BACKWARD, SINGLE); myMotor2->step(1, FORWARD, SINGLE);} if (y == 3) // move left { myMotor1->step(1, FORWARD, SINGLE); myMotor2->step(1, FORWARD, SINGLE);} if (y == 4) // move right { myMotor1->step(1, BACKWARD, SINGLE); myMotor2->step(1, BACKWARD, SINGLE);}} } //********************************************************************************************************************************************
這段代碼非常簡(jiǎn)單。其目的是讓機(jī)器人能夠向左旋轉(zhuǎn)90度以及向右旋轉(zhuǎn)90度。該程序還能讓機(jī)器人返回到起始位置:向前移動(dòng)400步,然后向后移動(dòng)回到起始位置。在程序循環(huán)中,我們運(yùn)行Motor函數(shù),該函數(shù)具有2個(gè)參數(shù)。第一個(gè)參數(shù)表明電機(jī)必須旋轉(zhuǎn)多少步,第二個(gè)參數(shù)表明電機(jī)移動(dòng)方向(向前、向后、向左和向右)。
程序運(yùn)行后,該Arduino機(jī)器人應(yīng)該會(huì)像上述視頻顯示的那樣移動(dòng)。
在下一篇文章中,我們將繼續(xù)添加其他系統(tǒng)部件,比如伺服器和激光測(cè)距儀(LRF),并編寫(xiě)一個(gè)程序,讓機(jī)器人能夠自主移動(dòng)。因此,敬請(qǐng)關(guān)注我的下一篇文章!
Purnomo Nuhalim
來(lái)自墨爾本的Purnomo是一名退休人員,也是電子發(fā)燒友。目前,他正使用Arduino和Raspberry Pi從事各種開(kāi)放式硬件項(xiàng)目的研發(fā)。除了電子學(xué),他還對(duì)航空建模和天文學(xué)充滿熱情。
審核編輯黃宇
-
機(jī)器人
+關(guān)注
關(guān)注
211文章
28468瀏覽量
207358 -
OLED
+關(guān)注
關(guān)注
119文章
6203瀏覽量
224329 -
激光傳感器
+關(guān)注
關(guān)注
2文章
152瀏覽量
21410 -
Arduino
+關(guān)注
關(guān)注
188文章
6471瀏覽量
187241
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論