這篇文章來源于DevicePlus.com英語網(wǎng)站的翻譯稿。
試想一下,您剛搬到一個新地方,需要盡快添置家具,但是手頭沒有卷尺可以進行測量。那么,這款Parallax激光Arduino機器人就會派上用場!
我們在之前的文章《如何制作自己的機器人》 和《如何制作自己的機器人(第2部分)》中描述了如何利用Arduino UNO R3從零開始搭建屬于自己的機器人。在本文中,我們將進一步增加機器人的功能:讓它能夠動起來并且添加激光測距(LRF)功能,以使該設(shè)備能夠檢測物體并測量距離。
激光傳感器會幫我們獲得更準確、更可靠的數(shù)據(jù)。該Arduino機器人的移動方式為自主移動模式。它在移動的過程中能夠檢測到障礙物并主動避開。
該機器人的設(shè)計目標如下:
向前、向后移動;向左和向右旋轉(zhuǎn)90度;向左和向右旋轉(zhuǎn)45度。
基于最佳路徑,通過向不同方向移動避開障礙物。
測量各個方向(前方、左右90度、左右45度)的距離。
基于可用的最長距離,確定朝哪個方向前進(向前、向后、向左或向右)。
傳感器安裝在伺服上,以便機器人可以左右平移以進行多次測量。測量的距離將顯示在一塊小型OLED顯示屏上。我們將使用步進電機實現(xiàn)平穩(wěn)、安靜的運行。
我們會一步一步地討論該Arduino機器人的構(gòu)建過程。第一步是如何安裝底盤、電機和Arduino/電機開發(fā)板。然后,我們利用一個小程序來測試電機,以確保系統(tǒng)連接和軟件安裝都準確無誤。然后,在下一篇文章中,我們會逐步添加其余設(shè)備,并且每一步都通過程序來測試安裝和連接是否正確。通過這種按部就班的方法能夠讓我們更方便地解決制作過程中遇到的任何問題。
硬件
制作該機器人所需的硬件請參見以下硬件明細,這些零部件在許多電商處都可以買到(明細中給出了部分地址)。
Arduino Uno rev 3 (www.adafruit.com/products/50)
適用于Arduino的Adafruit步進電機開發(fā)套件 (www.adafruit.com/products/1438)
步進電機(www.adafruit.com/products/324)
底盤、螺絲和尾輪 Parallax.com
車輪、橡膠輪胎和輪轂 Makeblock.com
伺服裝置和安裝套件(www.parallax.com/product/570-28015)
Parallax激光測距儀(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 電動工具
電烙鐵
迷你鋼鋸
安裝電機、輪子和亞克力底座
Parallax底盤由高強度鋁制成。該部件是專門為伺服系統(tǒng)而不是步進電機設(shè)計的,因此我們需要做一些修改。
首先,要將電機安裝到機箱上,我們得在機箱的兩側(cè)開口。請用Dremel電動工具按照電機的安裝尺寸精確切割機箱。
我們使用的步進電機型號為NEMA 17,其分辨率為200步/轉(zhuǎn)。其供電規(guī)格為12V 350mA。
要將電機裝入底盤內(nèi),我們需要尺寸為6.5cm x 4.5cm的亞克力板,如圖1所示。請用鋼鋸將亞克力板切割成所需尺寸,然后用Dremel電動工具鉆孔。用M2x10mm的螺釘將電機裝在亞克力安裝板上,兩個電機需要8顆螺釘。然后,將制作完畢的亞克力板和電機安裝到底盤內(nèi)。
圖1.將步進電機安裝在6.5×4.5cm亞克力板上
要固定Arduino和OLED顯示屏,我們需要切割一塊15cmx8cm的亞克力底座(圖2)。請用4個墊片和螺絲安裝亞克力底座,然后用附帶的銷釘安裝尾輪。
圖2.機箱、尾輪和15×8亞克力板底座
圖3.輪子和軸連接器
圖4.安裝在底盤上的步進電機和尾輪
我們需要用圖3中所示的軸連接器安裝輪子。但是,我們必須做一個小修改。軸孔的直徑為4mm,而步進電機軸的直徑為5mm。因此,我們需要將連接器的孔擴大到5mm。請使用圓銼或Dremel工具擴孔。擴孔時一定要小心操作!
圖5.安裝在底盤上的亞克力底座
請將電機線纜從頂部的孔穿出,然后用雙面膠帶將電池粘在機箱下方。對于該項目來說,鋰聚合物電池是理想解決方案。其供電規(guī)格為11.1V 800mAh?1000mAh,這使得系統(tǒng)續(xù)航可超過1小時,而且還可以充電。但是該電池需要專門的充電器。如果您是航空模型或遙控車愛好者,那么您肯定知道這種電池。我們也可以用6或8節(jié)AA電池(9-12V)代替。
圖6.用雙面膠將電池粘在底盤上
將電機電纜連至電機開發(fā)板
Adafruit 電機開發(fā)板規(guī)格 – Adafruit
與Arduino高分辨率專用計時器相連的兩個5V Hobby伺服器接口
4個H橋:搭載TB6612芯片組,每個橋可提供1.2A電流(峰值為3A,持續(xù)20ms),具有熱關(guān)斷保護功能,以及內(nèi)部反沖保護二極管??蔀殡姍C提供4.5VDC至13.5VDC供電。
可連接最多4個雙向直流電機,具有單獨8位速度選擇功能。
可連接最多2個單線圈、雙線圈、交叉步進或微步進電機(單極或雙極)。
經(jīng)測試與Arduino UNO、Leonardo、ADK/Mega R3、Diecimila和Duemilanove兼容。兼容Due,配有3.3v邏輯跳線。兼容Mega/ADK R2及更早版本,具有2個跳線。
5v 或 3.3v邏輯電平(跳線可配置)。
該電機開發(fā)板能同時運行2個步進電機和2個伺服器。該步進電機開發(fā)板的一個很大優(yōu)勢在于它不占用任何Arduino引腳,因為它通過I2C連接。唯一需要引腳的是伺服器。我們只需按照說明連接電機電纜即可。
要了解步進電機的基本知識及其與Arduino UNO R3的連接,請參考《Arduino與零件和傳感器——步進電機第1部分》。
圖7.將電機連至電機開發(fā)板
圖8.亞克力底座上的Arduino和電機開發(fā)板
現(xiàn)在,我們只需要根據(jù)下圖安裝輪子和電池接頭即可。
圖9.步進電機電纜連至電機開發(fā)板
安裝軟件并上傳代碼
現(xiàn)在,我們可以運行第一段代碼了!首先,我們需要從Arduino網(wǎng)站下載并安裝Arduino IDE,從Adafruit網(wǎ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);}} } //********************************************************************************************************************************************
這段代碼非常簡單。其目的是讓機器人能夠向左旋轉(zhuǎn)90度以及向右旋轉(zhuǎn)90度。該程序還能讓機器人返回到起始位置:向前移動400步,然后向后移動回到起始位置。在程序循環(huán)中,我們運行Motor函數(shù),該函數(shù)具有2個參數(shù)。第一個參數(shù)表明電機必須旋轉(zhuǎn)多少步,第二個參數(shù)表明電機移動方向(向前、向后、向左和向右)。
程序運行后,該Arduino機器人應該會像上述視頻顯示的那樣移動。
在下一篇文章中,我們將繼續(xù)添加其他系統(tǒng)部件,比如伺服器和激光測距儀(LRF),并編寫一個程序,讓機器人能夠自主移動。因此,敬請關(guān)注我的下一篇文章!
Purnomo Nuhalim
來自墨爾本的Purnomo是一名退休人員,也是電子發(fā)燒友。目前,他正使用Arduino和Raspberry Pi從事各種開放式硬件項目的研發(fā)。除了電子學,他還對航空建模和天文學充滿熱情。
審核編輯黃宇
-
機器人
+關(guān)注
關(guān)注
211文章
28632瀏覽量
208097 -
OLED
+關(guān)注
關(guān)注
119文章
6219瀏覽量
224667 -
激光傳感器
+關(guān)注
關(guān)注
2文章
152瀏覽量
21446 -
Arduino
+關(guān)注
關(guān)注
188文章
6477瀏覽量
187659
發(fā)布評論請先 登錄
相關(guān)推薦
評論