構(gòu)建一款由藍(lán)牙控制器控制的機(jī)械臂
Bracc.ino是一個(gè)簡(jiǎn)單的關(guān)節(jié)臂,由6個(gè)伺服馬達(dá)組成,通過(guò)Arduino手柄通過(guò)藍(lán)牙控制。它是作為一個(gè)學(xué)校項(xiàng)目誕生的,它的目的是模擬一個(gè)工業(yè)機(jī)器人。經(jīng)過(guò)不同的嘗試,我們可以找到正確的方法,我們可以移動(dòng)一個(gè)機(jī)器人。
為了創(chuàng)建最終的原型,我們使用了不同的生產(chǎn)方法,比如使用激光切割機(jī)制作結(jié)構(gòu),使用3D打印機(jī)制作別針、夾具和底座。
手臂的運(yùn)動(dòng)由Arduino板控制。我們可以通過(guò)AT兩個(gè)板之間的藍(lán)牙通信來(lái)發(fā)送關(guān)于要做哪個(gè)動(dòng)作的信息。我們決定使用HC-05傳感器來(lái)做這件事。
藍(lán)牙通信
藍(lán)牙通信包括通過(guò)無(wú)線電頻率發(fā)送和接收信息。它可以AT不需要電線的情況下發(fā)送數(shù)據(jù)。所以我們決定想辦法為我們的機(jī)械臂制作一個(gè)手柄。我們發(fā)現(xiàn)使用Arduino是可以實(shí)現(xiàn)的。使用藍(lán)牙模塊HC-05,我們可以通過(guò)一個(gè)設(shè)備接收數(shù)據(jù),但通過(guò)對(duì)傳感器進(jìn)行編程,我們也可以將數(shù)據(jù)發(fā)送到另一個(gè)HC-05。因此,我們找到了一種編程和改變模塊配置的方法。發(fā)送數(shù)據(jù)給另一方的模塊稱為MASTER,而接收方則稱為SLAVE。所以這兩種構(gòu)型有點(diǎn)不同,但是有一些共同點(diǎn)?;旧现饕挠^點(diǎn)是:
將兩個(gè)Arduino與HC-05傳感器連接,用5V為EN引腳(或密鑰)供電。然后上傳一個(gè)空草圖并打開串行通信。為了簡(jiǎn)化程序,我們可以同時(shí)連接兩個(gè)板,使用兩個(gè)不同的Arduino IDE窗口。
現(xiàn)ATAT串行監(jiān)視器上寫一些字,我們可以改變藍(lán)牙配置。
?寫“AT”,直到回復(fù)為“OK”。
?+ UART = 38400。它設(shè)置波特率,對(duì)于藍(lán)牙是38400波特。
?AT+角色= 0。將HC-05設(shè)置為從機(jī)模式。
?AT+ CMODE = 0。它只用于連接配對(duì)設(shè)備
?+ PSWD = 1234。設(shè)置密碼。對(duì)于主傳感器使用相同的方法也是很重要的。
主配置:串行監(jiān)控序列
?寫“AT”,直到回復(fù)為“OK”。
?+ UART = 38400。它設(shè)置波特率,對(duì)于藍(lán)牙是38400波特。
?AT= 1 +的作用。將HC-05設(shè)置為主模式。
?AT+ RMAAD。清除先前配對(duì)的設(shè)備。
?AT+重置。復(fù)位模塊。
?AT+ CMODE = 0。
?At + inqm = 0,5,9。
?AT+ INIT。
?AT+ INQ。最后三個(gè)命令幫助我們搜索從模塊。最后一個(gè)命令返回模塊附近設(shè)備的地址。
?現(xiàn)在我們要復(fù)制正確的地址。如果我們有多個(gè),我們可以控制右邊的設(shè)備粘貼地址AT“AT+RNAME=”之后。用逗號(hào)代替冒號(hào)是很重要的。
?找到正確的設(shè)備,寫入“AT+PAIR=”9”
?AT+BIND=<address>
?AT+CMODE=1.
?AT+LINK=<address>
?如果我們收到“OK”的回復(fù),我們已經(jīng)成功配對(duì)了兩個(gè)藍(lán)牙模塊。
結(jié)構(gòu)描述
學(xué)校給了我們很多機(jī)會(huì)學(xué)習(xí)如何使用激光切割和3D打印技術(shù)。所以我們能夠創(chuàng)建一個(gè)手臂結(jié)構(gòu),開始AT3D軟件上繪制它,比如“SolidWorks”。然后,出于美觀的考慮,我們選擇使用激光切割機(jī)生產(chǎn)結(jié)構(gòu)部分,使用3D打印機(jī)生產(chǎn)夾具和底座。此外,操縱桿是由3d打印機(jī)創(chuàng)建的。
手柄
伺服
手臂的關(guān)節(jié)是用伺服馬達(dá)移動(dòng)的。它們很容易使用,有Arduino庫(kù),我們可以很容易地控制電機(jī)的角度。但對(duì)于結(jié)構(gòu)的升力,我們必須使用一些不同的伺服,具有更高的失速扭矩。伺服MG996R,幫助我們抬起所有的手臂。此外,這種伺服是數(shù)字型的,也就是說(shuō),他們比普通的更準(zhǔn)確。我們還必須使用庫(kù)而不是普通的庫(kù)。前一個(gè)有更多的功能,幫助我們模擬一個(gè)更流暢的運(yùn)動(dòng)。它還具有控制伺服速度和以異步方式移動(dòng)它們的功能。
爪
機(jī)械臂工具現(xiàn)AT是一個(gè)簡(jiǎn)單的抓手,可以懸掛小物體并移動(dòng)它們。它是由我們?cè)O(shè)計(jì)并通過(guò)3d打印機(jī)實(shí)現(xiàn)的。SG90伺服電機(jī)旋轉(zhuǎn)一個(gè)齒輪,帶動(dòng)另一個(gè)齒輪打開或關(guān)閉爪。
基地軸承
另一個(gè)有用的部件是基礎(chǔ)軸承。它就像一個(gè)assial滾珠軸承,但它是完全3D打印的。它有兩個(gè)環(huán),里面有一些滾子,它們有特定的形狀,可以滑動(dòng)而不會(huì)出現(xiàn)問(wèn)題。主要功能是幫助底座旋轉(zhuǎn),避免AT木盤上爬行。
命令塊-基礎(chǔ)
AT手臂下面有一個(gè)塊,里面有機(jī)器人的所有電路和電池。它包含Arduino板,PCB和充電電池。這個(gè)底座可以從地面拆卸,并且可以模塊化安裝到其他設(shè)備上。
電路:手臂
手臂電路由藍(lán)牙線路與HC-05組成,并將每個(gè)伺服連接到GND, 6V和PWM引腳。伺服有不同的電源線,因?yàn)樗麄冇懈叩呐ぞ嘏c更高的供應(yīng)。
電路:手柄
操縱桿電路由相同的藍(lán)牙線路組成,加上兩個(gè)操縱桿,兩個(gè)按鈕和一個(gè)LCD。
操縱桿由兩個(gè)微調(diào)器組成,每個(gè)微調(diào)器的數(shù)值由模擬輸入管腳讀取。按鈕也是如此,但我們必須使用數(shù)字引腳來(lái)讀取它是高(按下)還是低(未按下)。
液晶顯示器,我們連接到I2C模塊,減少連接的數(shù)量,打印我們是如何移動(dòng)的伺服和他們的角度。
印刷電路板
針對(duì)飛線和電路不清晰的問(wèn)題,我們想畫一個(gè)PCB電路,像屏蔽一樣連接到Arduino板上。我們使用“EasyDA”網(wǎng)站繪制它們,并通過(guò)JLC網(wǎng)站訂購(gòu)零件。這樣,電路更清晰,更小,使用起來(lái)更舒適。
代碼功能
對(duì)于編程,我們使用Arduino IDE軟件,它使用了一種非常簡(jiǎn)單的編程語(yǔ)言。我們有兩個(gè)不同的代碼,一個(gè)用于Arduino的操縱桿,另一個(gè)用于手臂運(yùn)動(dòng)。
為了便于理解,代碼的主要功能和動(dòng)作AT后續(xù)的流程圖中進(jìn)行了說(shuō)明。
手柄
為了發(fā)送命令,我們創(chuàng)建了一個(gè)代碼列表,由不同的字母組成,這意味著不同的事情。每個(gè)代碼都與一個(gè)字母或數(shù)字相匹配,通過(guò)藍(lán)牙通信發(fā)送到手臂上。
AT這兩個(gè)代碼中都有一個(gè)“限制()”空白,用于控制伺服角度。如果值大于最大值或小于最小值,則角度返回到限制值。最大值和最小值是AT第一次裝配時(shí)測(cè)試伺服電機(jī)時(shí)設(shè)置的,它們可以很容易地改變,修改代碼開頭的變量。
手臂
AT代碼開始時(shí),藍(lán)牙模塊搜索數(shù)據(jù),如果收到信息,則修改接收字母中的“reads”變量,對(duì)應(yīng)一個(gè)動(dòng)作。
此外,這個(gè)代碼有一個(gè)控制伺服角度的“限制空白”。
AT代碼的末尾有一個(gè)moveAll() void。我們選擇使用這個(gè)函數(shù),而不是ATif函數(shù)中更新伺服角度,因?yàn)檫@樣每次循環(huán)開始/結(jié)束時(shí),伺服角度都會(huì)更新,電機(jī)保持張力。
手臂有兩種模式;正向模式是一個(gè)一個(gè)移動(dòng)電機(jī),逆模式是移動(dòng)所有的伺服,從一個(gè)點(diǎn)坐標(biāo)開始計(jì)算角度。
點(diǎn)保存功能
一個(gè)有趣的功能是點(diǎn)保存方法。它可以保存手臂位置并按順序回放。AT正態(tài)模式下,代碼記憶所有伺服器的角度值,而AT逆態(tài)模式下,代碼記憶一個(gè)點(diǎn)的坐標(biāo)。
操縱桿ATLCD上打印保存的點(diǎn),并AT達(dá)到最大點(diǎn)數(shù)時(shí)發(fā)出警報(bào)(實(shí)際上是五個(gè),最后加上home點(diǎn)),當(dāng)它重置內(nèi)存時(shí)。
逆運(yùn)動(dòng)學(xué)模式
該方法采用基于逆運(yùn)動(dòng)學(xué)的算法求出所有伺服角度,而不是直接求出。這個(gè)計(jì)算從坐標(biāo)位置(x,y)和夾持點(diǎn)的方向開始。對(duì)于這個(gè)計(jì)算,我們使用幾何方法。事實(shí)上,它是基于三角形的構(gòu)造與余弦和正弦函數(shù),我們可以計(jì)算出所有的角度,并將這個(gè)值轉(zhuǎn)化為伺服角度。
1- G點(diǎn)的平移
首先我們要把G點(diǎn)平移到G'點(diǎn)來(lái)簡(jiǎn)化逆計(jì)算。G點(diǎn)的y也要向上平移93,因?yàn)樵c(diǎn)與第一個(gè)關(guān)節(jié)重合。
2-直線和斜率
現(xiàn)AT我們可以計(jì)算從直角原點(diǎn)到G點(diǎn)的直線的斜率m。
3-圓交叉
然后我們可以畫一個(gè)圓心為G'的圓,半徑等于連桿3的長(zhǎng)度。我們知道圓的方程,所以我們可以求直線的交點(diǎn),ATB點(diǎn)。
對(duì)這兩個(gè)方程進(jìn)行化簡(jiǎn),可以用二次解的方法求出Xb方程。我們可以通過(guò)對(duì)圓和直線方程的化簡(jiǎn)和集合來(lái)求出a b c的值。
現(xiàn)AT解二階方程我們要取離原點(diǎn)最近的次值。我們用Yb值代替直線方程中的Xb。
然后用畢達(dá)哥拉斯公式計(jì)算原點(diǎn)b的線長(zhǎng)。
4-三角形角
現(xiàn)AT我們可以畫一個(gè)三角形,我們知道三角形的三條邊,分別是“r”的長(zhǎng)度,連桿1的長(zhǎng)度和連桿2的長(zhǎng)度。知道了這三條邊,我們就可以用SSS(邊對(duì)邊)公式求出角度值。
5-Deltoid角度
然后我們要找到最后一個(gè)角,畫出三角線就能找到最后一個(gè)角。
三角線由兩條相等的三角形組成,我們知道這兩條三角形的兩條邊(連桿2和連桿3)和鄰角“delta”。計(jì)算對(duì)角線長(zhǎng)度,我們可以計(jì)算A角我們就完成了第二個(gè)關(guān)節(jié)角。
6 .尋找關(guān)節(jié)角
為了AT一個(gè)伺服值中平移角度,我們必須減去和我們的角度。
?對(duì)于Θ1,我們將斜率的角度加上c^。
?對(duì)于Θ2,我們添加“a^”角和a^角,并減去90°,以找到垂直于link1和link2之間的角度。
?Θ3等于90°與角的相減。
?Θ4是角度和“伽馬”角之和的減法,等于270°。
7-Servo轉(zhuǎn)換
現(xiàn)AT我們必須直接ATservo2和4上寫角度Θ2和Θ4,而對(duì)于伺服1和3,我們必須減去計(jì)算的角度為180°,因?yàn)樗欧姆较蛳喾础?
使用該算法,我們可以改變x, y和握把角度值來(lái)移動(dòng)手臂。所以手臂創(chuàng)造了一個(gè)垂直的直角平面,但是現(xiàn)AT還沒(méi)有一個(gè)三維坐標(biāo)空間,所以Z軸是基礎(chǔ)伺服的旋轉(zhuǎn)。
本文編譯自hackster.io





