ARDUINO機械臂實驗報告111_第1頁
ARDUINO機械臂實驗報告111_第2頁
ARDUINO機械臂實驗報告111_第3頁
ARDUINO機械臂實驗報告111_第4頁
ARDUINO機械臂實驗報告111_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、 NANCHANG UNIVERSITY 綜合設(shè)計報告題 目 基于Arduino的簡易機械臂 學(xué) 院: 信息工程學(xué)院 系 電子系 專業(yè)班級: 電子信息類xxx班 學(xué)生姓名: xxx 學(xué)號: xxx 指導(dǎo)教師: xxx xxx 起訖日期: 2017.6.26-2017.9.1 基于Arduino 的簡易機械臂摘要Arduino是一款便捷靈活、方便上手的開源電子原型平臺。Arduino IDE基于processing IDE開發(fā)。對于初學(xué)者來說,極易掌握,同時有著足夠的靈活性。Arduino語言基于wiring語言開發(fā),是對 avr-gcc庫的二次封裝,不需要太多的單片機基礎(chǔ)、編程基礎(chǔ)。Ardui

2、no不僅僅是全球最流行的開源硬件,也是一個優(yōu)秀的硬件開發(fā)平臺,更是硬件開發(fā)的趨勢。Arduino簡單的開發(fā)方式使得開發(fā)者更關(guān)注創(chuàng)意與實現(xiàn),更快的完成自己的項目開發(fā),大大節(jié)約了學(xué)習(xí)的成本,縮短了開發(fā)的周期。越來越多的專業(yè)硬件開發(fā)者已經(jīng)或開始使用Arduino來開發(fā)他們的項目、產(chǎn)品;越來越多的軟件開發(fā)者使用Arduino進入硬件、物聯(lián)網(wǎng)等開發(fā)領(lǐng)域;大學(xué)里,自動化、軟件,甚至藝術(shù)專業(yè),也紛紛開展了Arduino相關(guān)課程。安卓手機與Arduino之間采用藍牙串口通訊,是很多智能裝置和互動裝置常用的控制方法,簡單而有效,無需網(wǎng)絡(luò)環(huán)境,很實用的技術(shù)。通過Arduino與機械臂上的舵機結(jié)合,使其可以和電腦通

3、信,再通過手機藍牙控制Arduino進而控制機械臂。用實現(xiàn)簡單的抓取動作。關(guān)鍵詞:Arduino UNO;機械臂;簡單目錄第一章21.1實驗?zāi)康摹?.2實驗器材錯誤!未定義書簽。1.3實驗原理2第二章52.1實驗程序設(shè)計52.2功能實現(xiàn)錯誤!未定義書簽。2.3實物圖6第三章錯誤!未定義書簽。3.1結(jié)論與展望錯誤!未定義書簽。附錄8源代碼8第一章1.1 實驗?zāi)康恼莆誂rduino進行串口通信的原理,熟練使用Arduino UNO開發(fā)板。了解HC-06藍牙模塊工作原理。掌握機械臂工作原理。1.2 實驗器材制作機械臂的亞克力板套件 x 1Arduino UNO開發(fā)板 x 1HC-06藍牙模塊 x 1

4、電源模塊 x 1面包板 x 1安卓手機 x 1面包板跳線若干杜邦線(公對公) x 209g舵機 x 4USB線(公對公) x 1充電寶或其它可為面包板供電的設(shè)備 x 11k 歐姆電阻 X 1 (HC-06模塊需要)20k 歐姆電阻 X 1(HC-06模塊需要)1.3 實驗原理 人為編寫程序燒錄Arduino,Arduino通過控制四個舵機的轉(zhuǎn)動進而控制整個機械臂的運行。藍牙技術(shù)是一種近距離地保證可靠接受和信息安全的無線通信技術(shù)。藍牙的工作頻段為2.4022.480GHz,為免費的工業(yè)、科學(xué)、醫(yī)學(xué)頻段,調(diào)頻速率為1600次/s,同時連接的最大設(shè)備數(shù)為7個,有效的最大傳輸距離為10米。Arduin

5、o UNO是基于ATmega328P 的單片機開發(fā)板。該開發(fā)板由14路數(shù)字輸入/輸出引腳(其中6路可以用作PWM輸出)、 6路模擬輸入、1個16MHz的石英晶體振蕩器、一個USB接口、1個電源接頭、1個ICSP數(shù)據(jù)頭以及1個復(fù)位按鈕組成。Uno 包含了單片機運行所需的所有要素,只需用USB連接線將其連接到計算機,或利用 AC-DC 適配器或電池供電后即可啟動。 Uno 的特色在于將 Atmega16U2 編程為一個 USB-to-serial 轉(zhuǎn)換器,以便能簡單、輕松和自由地安裝驅(qū)動程序。Arduino開發(fā)使用java開發(fā)的編程環(huán)境,使用類c語言編程,并提供豐富的庫函數(shù)。Aeduino是免費開

6、源的,所有資源都可以免費下載,只需要一根USB線即可完成編程和燒寫。其工作電壓為5V,出入電壓在712V為最佳,最大范圍為620V。板上主要資源技術(shù)規(guī)格舵機的伺服系統(tǒng)由可變寬度的脈沖來進行控制,控制線是用來傳送脈沖的。脈沖的參數(shù)有最小值,最大值,和頻率。一般而言,舵機的基準信號都是周期為20ms,寬度為1.5ms。這個基準信號定義的位置為中間位置。舵機有最大轉(zhuǎn)動角度,中間位置的定義就是從這個位置到最大角度與最小角度的量完全一樣。最重要的一點是,不同舵機的最大轉(zhuǎn)動角度可能不相同,但是其中間位置的脈沖寬度是一定的,那就是1.5ms。角度是由來自控制線的持續(xù)的脈沖所產(chǎn)生。這種控制方法叫做脈沖調(diào)制。脈

7、沖的長短決定舵機轉(zhuǎn)動多大角度。例如:1.5毫秒脈沖會到轉(zhuǎn)動到中間位置(對于180舵機來說,就是90位置)。當控制系統(tǒng)發(fā)出指令,讓舵機移動到某一位置,并讓他保持這個角度,這時外力的影響不會讓他角度產(chǎn)生變化,但是這個是由上限的,上限就是他的最大扭力。除非控制系統(tǒng)不停的發(fā)出脈沖穩(wěn)定舵機的角度,舵機的角度不會一直不變。 當舵機接收到一個小于1.5ms的脈沖,輸出軸會以中間位置為標準,逆時針旋轉(zhuǎn)一定角度。接收到的脈沖大于1.5ms情況相反。不同品牌,甚至同一品牌的不同舵機,都會有不同的最大值和最小值。一般而言,最小脈沖為1ms,最大脈沖為2ms。第二章2.1 實驗程序設(shè)計按要求將亞克力板和舵機組裝好。A

8、rduino Uno與各個舵機連接好。接法如下:UNO板接口接向電腦USB端口用于傳輸程序,電源模塊可用充電寶給其供電。從網(wǎng)絡(luò)上尋找合適的藍牙連接軟件,我選擇的是Arduino Bluetooth controller。參考網(wǎng)絡(luò)上控制舵機的程序編寫代碼2.2 功能實現(xiàn)將舵機的運動分解為水平方向和豎直方向運動,用四個舵機實現(xiàn)機械臂再空間范圍內(nèi)的上下前后左右運動;來達到將細微物體夾取并移動。2.3 實物圖第三章31 結(jié)論與展望在制作Arduino機械臂的過程中,由于配件過多,組裝機械臂花費了我大量時間,在程序的編寫過程中我也遇到了很多困難,最后通過參考網(wǎng)上的教程終于完成了代碼的編寫。通過本次Ard

9、uino項目的制作我對于Arduino開發(fā)板有了更深刻的認識,也初步的了解了伺服舵機的工作原理,對串口通信有了一定的了解。附錄實驗源代碼/*1 使用串口獲得電機數(shù)據(jù),設(shè)置機械臂動作 將串口指令解讀改寫為函數(shù),加入狀態(tài)匯報函數(shù)reportStatus2 加入servoCmd函數(shù)控制電機速度3 加入判斷人類指令是否超出舵機限值4 MeArm執(zhí)行一系列動作(執(zhí)行程序) armIniPos - 1 (一維數(shù)組)5 MeArm執(zhí)行一系列動作(執(zhí)行程序) armIniPos - 2 (二維數(shù)組)6 加入手柄控制模式 加入機器判斷:人類輸入信息錯誤檢查 */#include /使用servo庫Servo b

10、ase, fArm, rArm, claw ; /創(chuàng)建4個servo對象 /存儲電機極限值(const指定該數(shù)值為常量,常量數(shù)值在程序運行中不能改變)const int baseMin = 0;const int baseMax = 180;const int rArmMin = 45;const int rArmMax = 180;const int fArmMin = 35;const int fArmMax = 120;const int clawMin = 25;const int clawMax = 100; int DSD = 15; /Default Servo Delay (默

11、認電機運動延遲時間) /此變量用于控制電機運行速度.增大此變量數(shù)值將 /降低電機運行速度從而控制機械臂動作速度。bool mode; /mode = 1: 指令模式, mode = 0: 手柄模式int moveStep = 3; / 每一次按下手柄按鍵,舵機移動量(僅適用于手柄模式) void setup() base.attach(11); / base 伺服舵機連接引腳11 舵機代號b delay(200); / 穩(wěn)定性等待 rArm.attach(10); / rArm 伺服舵機連接引腳10 舵機代號r delay(200); / 穩(wěn)定性等待 fArm.attach(9); / fAr

12、m 伺服舵機連接引腳9 舵機代號f delay(200); / 穩(wěn)定性等待 claw.attach(6); / claw 伺服舵機連接引腳6 舵機代號c delay(200); / 穩(wěn)定性等待 base.write(81); delay(10); fArm.write(100); delay(10); rArm.write(90); delay(10); claw.write(95); delay(10); Serial.begin(9600); Serial.println(Welcome to Taichi-Maker Robot Arm Tutorial); void loop() if

13、 (Serial.available()0) char serialCmd = Serial.read(); if( mode = 1 ) armDataCmd(serialCmd); /指令模式 else armJoyCmd(serialCmd); /手柄模式 void armDataCmd(char serialCmd) /Arduino根據(jù)串行指令執(zhí)行相應(yīng)操作 /指令示例:b45 底盤轉(zhuǎn)到45度角度位置 / o 輸出機械臂舵機狀態(tài)信息 /判斷人類是否因搞錯模式而輸入錯誤的指令信息(指令模式下輸入手柄按鍵信息) if ( serialCmd = w | serialCmd = s | se

14、rialCmd = a | serialCmd = d | serialCmd = 5 | serialCmd = 4 | serialCmd = 6 | serialCmd = 8 ) Serial.println(+Warning: Robot in Instruction Mode.); delay(100); while(Serial.available()0) char wrongCommand = Serial.read(); /清除串口緩存的錯誤指令 return; if (serialCmd = b | serialCmd = c | serialCmd = f | seria

15、lCmd = r) int servoData = Serial.parseInt(); servoCmd(serialCmd, servoData, DSD); / 機械臂舵機運行函數(shù)(參數(shù):舵機名,目標角度,延遲/速度) else switch(serialCmd) case m : /切換至手柄模式 mode = 0; Serial.println(Command: Switch to Joy-Stick Mode.); break; case o: / 輸出舵機狀態(tài)信息 reportStatus(); break; case i: armIniPos(); break; default

16、: /未知指令反饋 Serial.println(Unknown Command.); void armJoyCmd(char serialCmd) /Arduino根據(jù)手柄按鍵執(zhí)行相應(yīng)操作 /判斷人類是否因搞錯模式而輸入錯誤的指令信息(手柄模式下輸入舵機指令) if (serialCmd = b | serialCmd = c | serialCmd = f | serialCmd = r) Serial.println(+Warning: Robot in Joy-Stick Mode.); delay(100); while(Serial.available()0) char wrong

17、Command = Serial.read(); /清除串口緩存的錯誤指令 return; int baseJoyPos; int rArmJoyPos; int fArmJoyPos; int clawJoyPos; switch(serialCmd) case a: / Base向左 Serial.println(Received Command: Base Turn Left); baseJoyPos = base.read() - moveStep; servoCmd(b, baseJoyPos, DSD); break; case d: / Base向右 Serial.println

18、(Received Command: Base Turn Right); baseJoyPos = base.read() + moveStep; servoCmd(b, baseJoyPos, DSD); break; case s: / rArm向下 Serial.println(Received Command: Rear Arm Down); rArmJoyPos = rArm.read() + moveStep; servoCmd(r, rArmJoyPos, DSD); break; case w: / rArm向上 Serial.println(Received Command:

19、 Rear Arm Up); rArmJoyPos = rArm.read() - moveStep; servoCmd(r, rArmJoyPos, DSD); break; case 8: / fArm向上 Serial.println(Received Command: Front Arm Up); fArmJoyPos = fArm.read() + moveStep; servoCmd(f, fArmJoyPos, DSD); break; case 5: / fArm向下 Serial.println(Received Command: Front Arm Down); fArmJ

20、oyPos = fArm.read() - moveStep; servoCmd(f, fArmJoyPos, DSD); break; case 4: / Claw關(guān)閉 Serial.println(Received Command: Claw Close Down); clawJoyPos = claw.read() + moveStep; servoCmd(c, clawJoyPos, DSD); break; case 6: / Claw打開 Serial.println(Received Command: Claw Open Up); clawJoyPos = claw.read()

21、 - moveStep; servoCmd(c, clawJoyPos, DSD); break; case m : /切換至指令模式 mode = 1; Serial.println(Command: Switch to Instruction Mode.); break; case o: reportStatus(); break; case i: armIniPos(); break; default: Serial.println(Unknown Command.); return; void servoCmd(char servoName, int toPos, int servoD

22、elay) Servo servo2go; /創(chuàng)建servo對象 /串口監(jiān)視器輸出接收指令信息 Serial.println(); Serial.print(+Command: Servo ); Serial.print(servoName); Serial.print( to ); Serial.print(toPos); Serial.print( at servoDelay value ); Serial.print(servoDelay); Serial.println(.); Serial.println(); int fromPos; /建立變量,存儲電機起始運動角度值 switch(servoName) case b: if(toPos = baseMin & toPos = clawMin & toPos = fArmMin & toPos = rArmMin & toPos = rArmMax) servo2go = rArm; fromPos = rArm.read(); / 獲取當前電機角度值用于“電機運動起始角度值” break; else Serial.println(+Warning: rArm Servo Value Out Of Limit!);

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論