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

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

3天內(nèi)不再提示

開發(fā)一個控制和編程機械臂的項目

科技觀察員 ? 來源:hackster.io ? 作者:hackster.io ? 2022-08-08 15:20 ? 次閱讀

讓我們逐步開發(fā)一個控制和編程機械臂的項目,模擬工業(yè)機器人的基本功能。

poYBAGLwuOiAV374AAUyoLNKlHM642.png

第 1 步:規(guī)格

pYYBAGLwuOSAJ-y8AAIglmarYXc611.png

機器人有兩個基本功能:

程序:記錄三個維度的手臂位置(每個記錄是一個“步驟”)

運行:依次執(zhí)行“程序”中記錄的位置。機器人將運行程序,直到使用命令“ABORT”。

主要特征:

該項目可用于控制具有 3 或 4 DOF(“自由度”)的機器人。

機器人可以在“本地”和“遠(yuǎn)程”模式下控制(最后一個通過 Android 設(shè)備)

在程序階段,用戶可以將控制模式從“LOCAL”更改為“REMOTE”,反之亦然。

將通過彩色 LED、2 行 LED 顯示屏和聲音(蜂鳴器)向用戶提供信息。

聲音警報也可以遠(yuǎn)程觸發(fā)。

第 2 步:項目

poYBAGLwuOCAeU1PAAZQhuvKHCw819.png

上一步的框圖顯示了將在此項目中使用的“材料清單”。

我選擇了 Arduino MEGA,以免擔(dān)心可用的 Arduino 端口 (I/O) 的數(shù)量。例如,UNO 可以正常工作,但應(yīng)使用端口擴(kuò)展方法。有幾個選項可以在 Internet 上輕松找到,例如 74138 解碼器。

關(guān)于藍(lán)牙網(wǎng)絡(luò),這個項目使用的是 HC-06。

用于“ remote mode”的Android應(yīng)用程序是使用MIT Appinventor2工具開發(fā)的,該工具是基于Android設(shè)備的此類應(yīng)用程序的強大單一平臺。

第 3 步:開發(fā)

pYYBAGLwuNyADfFsAAFF9SWM_1U945.png

機械臂可以根據(jù)它們擁有的“關(guān)節(jié)”或“自由度”(DOF)的數(shù)量進(jìn)行分類。

“底座”或“腰部”通??梢詫⑹直坜D(zhuǎn)動 180o 或 360o,具體取決于所使用的伺服類型(在此項目中,使用了 180o 伺服)。

“肩”,負(fù)責(zé)垂直“抬高或降低”手臂。

“肘”將使手臂“向前或向后”。

“爪”或“抓手”通過打開或關(guān)閉來“抓取東西”。

第 4 步:電路

poYBAGLwuNeAFEGUAAJft18kdmc164.png

上圖顯示了完整的電路。

伺服電機將用于驅(qū)動關(guān)節(jié),直接連接到 Arduino。請注意,在底座上使用“步進(jìn)電機”以獲得更大的扭矩和精度并不少見。舵機的正確選擇非常重要。

舵機的直流電源應(yīng)與 Arduino 和其他組件分開。5 或 6V 的外部電源應(yīng)該可以正常工作(檢查伺服器的數(shù)據(jù)表以驗證正確的電壓范圍)。一種常見的做法是在 VCC 和 GND 之間使用 470uF 電容器,以最大限度地減少伺服器內(nèi)部直流電機產(chǎn)生的噪聲。確保連接所有“接地”(外部電源與 Arduino GND 引腳)。

如果伺服系統(tǒng)有問題并且振動很大,請在代碼的“延遲”處進(jìn)行調(diào)整。重要的是,伺服系統(tǒng)在接收新命令之前有時間到達(dá)某個點。同樣值得檢查的是舵機是數(shù)字的還是模擬的,就好像它們在機械上相似,數(shù)字的工作頻率為 300Hz,而模擬的工作頻率為 50Hz。標(biāo)準(zhǔn) Arduino 庫“ Servo.h”是為模擬舵機開發(fā)的,必要時可以進(jìn)行修改,以便更好地使用數(shù)字舵機。

第 5 步:代碼

這個項目并不復(fù)雜,但它有很多變數(shù)。最謹(jǐn)慎的做法是明確定義它們并將備注留在唯一的文件中:

ArmDefine.h

該文件還應(yīng)設(shè)置最小、最大和初始伺服角度。本文中包含的代碼有兩組參數(shù),用于我在項目中測試的機械臂(當(dāng)然應(yīng)該只使用一組常量):

// MeArm 4-DOF

#define minGrip 15
#define minBase 0
#define minShou 60
#define minElbw 60
#define maxGrip 45
#define maxBase 170
#define maxShou 180
#define maxElbw 150
#define midGrip 30
#define midBase 87
#define midShou 138
#define midElbw 100
/* SS 3-DOF
#define minGrip 75
#define minBase 5
#define minShou 5
#define minElbw 0
#define maxGrip 125
#define maxBase 150
#define maxShou 155
#define maxElbw 0
#define midGrip 100
#define midBase 90
#define midShou 90
#define midElbw 0
*/

每種類型的手臂都有一組不同的參數(shù),重要的是找到適合自己的。我的建議是,最初電位器(電位器)保持在其中點,PWM 輸出的映射設(shè)置為默認(rèn)值:Max = 255和Min = 0(Mid = 126上面的“ #defines”)。然后,開始改變電位器(一個接一個)并在串行監(jiān)視器(或 LCD)中跟蹤手臂正常工作的最小值和最大值。這些將是用于設(shè)置的最終值(將我的原始值更改為ArmDefine.h).

為了“記錄”機器人應(yīng)該播放的坐標(biāo)(或步數(shù))集,我將使用數(shù)據(jù)數(shù)組:

int gripPosition[100];
int basePosition[100];
int shouPosition[100];
int elbwPosition[100];
int positionIndex = 0; // Index to be used at position array used for recorded tasks

請注意,我沒有保留“存儲”位置,并且在“機器人”程序結(jié)束時,索引回到零,機器人將等待新序列的記錄(程序丟失)。或者,您可以將這些數(shù)據(jù)陣列保存在 Arduino EEPROM 中。這樣做程序?qū)⒈辉俅螆?zhí)行,甚至您可能擁有多個存儲的程序。

第 6 步:程序邏輯

主塊(“循環(huán)”)非常簡單:

檢查是否使用了執(zhí)行“程序”(步驟序列)的命令。

如果是這樣,請運行它。

否則,“程序”是不完整的,仍然必須編寫新的步驟。

如果定義了“新位置”,請將其添加到程序中。

首先,檢查來自 Android 設(shè)備的到達(dá)串行緩沖區(qū)的消息。

接下來,驗證控制模式是“本地”還是“遠(yuǎn)程”(默認(rèn)為本地)。

回到開頭并再次執(zhí)行步驟 1。

void loop ()

{
checkBTcmd ();
defineLocalRemote () ;
execTaskCmd = digitalRead (execTaskPin);
if (execTaskCmd == || HIGH command == "runon")
{
RunProgram () ;
}
else recArmPosition () ;
command = "";
}

函數(shù)checkBTcmd()使用來自 BT 模塊的單個字符組裝一個字符串。這個字符串被傳遞給變量“ command ”。

函數(shù)defineLocalRemote()考慮變量“ command ”檢查是否接收到將模式更改為遠(yuǎn)程的命令,反之亦然。報警命令也在這里分析。對于程序邏輯,如果在Android設(shè)備中觸發(fā)了“Alarm”,則arm一定要進(jìn)入Remote模式。

函數(shù)RunProgram()執(zhí)行準(zhǔn)備工作,打開/關(guān)閉 LED 等,特別是調(diào)用函數(shù):ExecuteTask()。后者是包含步驟序列的執(zhí)行邏輯的函數(shù)。該函數(shù)使用工具將位置數(shù)據(jù)發(fā)送到手臂的“位置索引”增加: armPosition(grip, base, Shoulder, E肘)。

最后,真正指揮舵機并編寫“步驟”的函數(shù)是recArmPosition()。根據(jù)接收到的 Android 命令,該函數(shù)將定義舵機的定位,可以通過罐子,也可以通過 Android 應(yīng)用程序的“滑塊”。隨著每個位置的變化,此功能使用功能(握把、底座、肩部、肘部)將坐標(biāo)發(fā)送到伺服系統(tǒng)。armPosition在觸發(fā)“SAVE”或“PROGRAM”命令時,會讀取電位器或滑塊的實際位置以及相應(yīng)的伺服激活。在那一刻,數(shù)組的位置索引增加并存儲步驟。

為了簡化理解,所有的代碼都是基于它的特定功能。“ Setup”、“ Loop”和上面描述的函數(shù)幾乎都在文件:MJRoBot_Arm_Robot_Task_Prgm.ino 中,并可在本文下方找到。

更通用的函數(shù)如讀取 BT 命令:void checkBTcmd();聲音發(fā)生器:void beep(int pin,int freq,long ms)和去抖:boolean debounce(int pin);存檔:General_Functions.ino

一個重要的事實:由于 Arduino 基于 16Mhz 時鐘執(zhí)行指令,預(yù)計控制按鈕每秒讀取數(shù)百甚至數(shù)千次,因此制作一個設(shè)置記錄步驟的“去抖動”按鈕很重要。

第四個也是最后一個文件是:Arm_Ctrl_and_Display.ino

在這個文件中是電位器的讀取函數(shù):bool readPotenciometers() ; 讀取 Android 滑塊:bool readSliders() ; 伺服系統(tǒng)的放置:void armPosition (int gripp, int basee, int肩部, 肘部 int)。文件中包含的其他功能是用于 LCD 上的數(shù)據(jù)顯示、串行監(jiān)視器、警報等。

第 7 步:結(jié)論

一如既往的是,我希望這個項目可以幫助其他人在電子、機器人和物聯(lián)網(wǎng)的激動人心的世界中找到自己的道路!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 控制
    +關(guān)注

    關(guān)注

    4

    文章

    1012

    瀏覽量

    122687
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3627

    瀏覽量

    93809
  • 機械臂
    +關(guān)注

    關(guān)注

    12

    文章

    515

    瀏覽量

    24627
收藏 人收藏

    評論

    相關(guān)推薦

    基于LabVIEW和SolidWorks改進(jìn)機械的設(shè)計流程

    和移動殘骸、檢查車輛車盤和完成大部分現(xiàn)在使用的機器人所無法完成的其他任務(wù)。這就是約束區(qū)域機器人手臂(CARMA)開發(fā)。 CARMA機械成品  將這個項目作為提高設(shè)計流程效率并大幅擴(kuò)展
    發(fā)表于 02-12 15:56

    開源工業(yè)機械開發(fā)套件

    `、產(chǎn)品介紹: 小型四軸碼垛工業(yè)機器人是由款桌面級四軸開源迷你機器組成,配合本系統(tǒng)的二軸或者單軸機械爪可組成六軸或五軸機器人,采用鋁合金材質(zhì)鑄造,步進(jìn)電機伺服
    發(fā)表于 10-23 11:26

    開源工業(yè)增強型機械

    通信軟件設(shè)計及開發(fā)10、工業(yè)機械的圖形化編程軟件的應(yīng)用及開發(fā)11、工業(yè)機械
    發(fā)表于 10-23 11:29

    【NanoPi M2申請】六軸機械控制開發(fā)

    申請理由:隨著工業(yè)機械的普及應(yīng)用,現(xiàn)在機械運行動作單,控制操作難度大已不滿足現(xiàn)代工業(yè)的生產(chǎn)
    發(fā)表于 04-27 16:16

    【Pocket-RIO申請】采用labview與FPGA的多自由度機械快速控制系統(tǒng)原型開發(fā)

    項目名稱:采用labview與FPGA的多自由度機械快速控制系統(tǒng)原型開發(fā)試用計劃: 機械
    發(fā)表于 12-19 15:30

    【FPGA開發(fā)項目連載】Gowin Minstar做機械視覺處理的機械

    項目本來設(shè)想是使用高云 ministar 開發(fā)板。制做5640攝像頭模塊的圖像處理并使用高云 ministar內(nèi)嵌ARM硬核處理器做機械控制
    發(fā)表于 05-11 21:48

    眾為興SCARA四軸機械編程概述

    眾為興SCARA四軸機械編程)概述方案原理功能實現(xiàn)通訊功能機械
    發(fā)表于 07-20 07:45

    機械控制學(xué)習(xí)

    機械控制-------------控制器1.位置控制機器人最傳統(tǒng),最常用的控制方式就是位置
    發(fā)表于 02-23 07:49

    【CW32飯盒派開發(fā)板試用體驗】+機械游戲項目(開源)(5)加紅外游戲操控機

    接上幾篇: 【CW32飯盒派開發(fā)板試用體驗】+機械游戲項目(開源)(1)開箱試驗舵機 - 武漢芯源MCU - 電子技術(shù)論壇 - 廣受歡迎的專業(yè)電子論壇! 【CW32飯盒派
    發(fā)表于 05-24 22:27

    dfrobotArduino開發(fā)實戰(zhàn)-遙控機械套裝簡介

    遙控機械套裝,本套裝可以通過Arduino編程控制桌面機械
    的頭像 發(fā)表于 11-29 17:19 ?2524次閱讀
    dfrobotArduino<b class='flag-5'>開發(fā)</b>實戰(zhàn)-遙控<b class='flag-5'>機械</b><b class='flag-5'>臂</b>套裝簡介

    使用 Python 和可視化編程控制樹莓派機械myCobot

    進(jìn)行編程,簡單易用,功能豐富。適合那些有興趣學(xué)習(xí)如何對機械進(jìn)行編程控制項目開發(fā)的人。 myC
    的頭像 發(fā)表于 11-30 14:56 ?5236次閱讀
    使用 Python 和可視化<b class='flag-5'>編程控制</b>樹莓派<b class='flag-5'>機械</b><b class='flag-5'>臂</b>myCobot

    控制機械開源

    電子發(fā)燒友網(wǎng)站提供《人控制機械開源.zip》資料免費下載
    發(fā)表于 01-31 14:43 ?4次下載
    人<b class='flag-5'>臂</b><b class='flag-5'>控制</b><b class='flag-5'>機械</b><b class='flag-5'>臂</b>開源

    如何完成機械的運動控制模塊

    使用桌面型的六軸機械,在機械的末端安裝
    的頭像 發(fā)表于 02-10 16:07 ?1756次閱讀
    如何完成<b class='flag-5'>機械</b><b class='flag-5'>臂</b>的運動<b class='flag-5'>控制</b>模塊

    構(gòu)建簡單的機械

    電子發(fā)燒友網(wǎng)站提供《構(gòu)建簡單的機械.zip》資料免費下載
    發(fā)表于 06-14 14:55 ?0次下載
    構(gòu)建<b class='flag-5'>一</b><b class='flag-5'>個</b>簡單的<b class='flag-5'>機械</b><b class='flag-5'>臂</b>

    自然語言控制機械:ChatGPT與機器人技術(shù)的融合創(chuàng)新(下)

    和Google的Speech-to-text服務(wù),以及我們是如何通過pymycobot模塊來控制機械的。通過將自然語言處理和機械
    的頭像 發(fā)表于 04-11 15:54 ?923次閱讀
    自然語言<b class='flag-5'>控制</b><b class='flag-5'>機械</b><b class='flag-5'>臂</b>:ChatGPT與機器人技術(shù)的融合創(chuàng)新(下)