舵機(jī)又稱伺服電機(jī);作為小型機(jī)器人身上最常用的動(dòng)作元件,如果連舵機(jī)知識(shí)都不懂你又怎么混跡DIY界呢?
1???簡介
舵機(jī)控制的機(jī)器人
● 我猜你肯定在機(jī)器人和電動(dòng)玩具中見到過這個(gè)小東西,至少也聽到過它轉(zhuǎn)起來時(shí)那與眾不同的“吱吱吱”的叫聲。對(duì),它就是遙控舵機(jī),常用在機(jī)器人技術(shù)、電影效果制作和木偶控制當(dāng)中,不過讓人大跌眼鏡的是,它竟是為控制玩具汽車和飛機(jī)才設(shè)計(jì)的。
● 舵機(jī)的旋轉(zhuǎn)不像普通電機(jī)那樣只是古板的轉(zhuǎn)圈圈,它可以根據(jù)你的指令旋轉(zhuǎn)到0至180度之間的任意角度然后精準(zhǔn)的停下來。如果你想讓某個(gè)東西按你的想法運(yùn)動(dòng),舵機(jī)可是個(gè)不錯(cuò)的選擇,它控制方便、最易實(shí)現(xiàn),而且種類繁多,總能有一款適合你呦。
● 用不著太復(fù)雜的改動(dòng),舵機(jī)就可搖身一變成為一個(gè)高性能的、數(shù)字控制的、并且可調(diào)速的齒輪電機(jī)。在這篇文章中,我會(huì)介紹舵機(jī)使用的的一些基礎(chǔ)知識(shí)以及怎樣制作一個(gè)連續(xù)運(yùn)轉(zhuǎn)舵機(jī)。
2???舵機(jī)的結(jié)構(gòu)和原理
A.標(biāo)準(zhǔn)舵機(jī)圖解
● 遙控舵機(jī)(或簡稱舵機(jī))是個(gè)糅合了多項(xiàng)技術(shù)的科技結(jié)晶體,它由直流電機(jī)、減速齒輪組、傳感器和控制電路組成,是一套自動(dòng)控制裝置,神馬叫自動(dòng)控制呢?所謂自動(dòng)控制就是用一個(gè)閉環(huán)反饋控制回路不斷校正輸出的偏差,使系統(tǒng)的輸出保持恒定。我們在生活中常見的恒溫加熱系統(tǒng)就是自動(dòng)控制裝置的一個(gè)范例,其利用溫度傳感器檢測溫度,將溫度作為反饋量,利用加熱元件提輸出,當(dāng)溫度低于設(shè)定值時(shí),加熱器啟動(dòng),溫度達(dá)到設(shè)定值時(shí),加熱器關(guān)閉,這樣不就使溫度始終保持恒定了嗎。
B.閉環(huán)反饋控制
● 對(duì)于舵機(jī)而言呢,位置檢測器是它的輸入傳感器,舵機(jī)轉(zhuǎn)動(dòng)的位置一變,位置檢測器的電阻值就會(huì)跟著變。通過控制電路讀取該電阻值的大小,就能根據(jù)阻值適當(dāng)調(diào)整電機(jī)的速度和方向,使電機(jī)向指定角度旋轉(zhuǎn)。圖A顯示的是一個(gè)標(biāo)準(zhǔn)舵機(jī)的部件分解圖。圖B顯示的是舵機(jī)閉環(huán)反饋控制的工作過程。
3???選擇舵機(jī)
C.大扭力/微型/標(biāo)準(zhǔn)舵機(jī)
● 舵機(jī)的形狀和大小多到讓人眼花繚亂,但大致可以如圖C所示分類。最右邊身材不錯(cuò)的是常見的標(biāo)準(zhǔn)舵機(jī),中間兩個(gè)小不點(diǎn)是體積最小的微型舵機(jī),左邊的魁梧的那個(gè)是體積最大的大扭力舵機(jī)。它們都是同樣的三線控制,因此你可以根據(jù)需求換個(gè)大個(gè)的或小個(gè)的。
● 除了大小和重量,舵機(jī)還有兩個(gè)主要的性能指標(biāo):扭力和轉(zhuǎn)速,這兩個(gè)指標(biāo)由齒輪組和電機(jī)所決定。扭力,通俗講就是舵機(jī)有多大的勁兒。在5V的電壓下,標(biāo)準(zhǔn)舵機(jī)的扭力是5.5千克/厘米(75盎司/英寸),轉(zhuǎn)速很容易理解,就是指從一個(gè)位置轉(zhuǎn)到另一個(gè)位置要多長時(shí)間。在5V電壓下,舵機(jī)標(biāo)準(zhǔn)轉(zhuǎn)度是0.2秒移動(dòng)60度。總之,和我們?nèi)艘粯樱鏅C(jī)的個(gè)子越大,轉(zhuǎn)的就越慢但也越有勁兒。
● 趕快想好你要做的東西,讓我們開始動(dòng)手吧。確定做什么之后,選擇哪種大小的舵機(jī)(標(biāo)準(zhǔn)型、微型、絞盤型)就是小case了,你可以紳士般的從中選個(gè)最便宜的。在這個(gè)項(xiàng)目中,我選的就是微型系列的HexTronik公司生產(chǎn)的HXT500型舵機(jī),額定數(shù)值是扭力0.8千克,轉(zhuǎn)速0.10秒,只花不到4美元就搞定了。
4???舵機(jī)的支架和連接裝置
D.多種舵盤
● 想在你的項(xiàng)目中用上舵機(jī),就要滿足兩個(gè)條件:一是需要個(gè)能把舵機(jī)固定到基座上的支架,二是得有個(gè)能將驅(qū)動(dòng)軸和物體連在一起的連接裝置。支架一般舵機(jī)上就有,而且?guī)в袛Q螺絲用的安裝孔。如果你僅僅是測試的話,用點(diǎn)兒熱熔膠或者雙面泡沫膠帶就能輕松的固定住舵機(jī)。
● 怎樣連接驅(qū)動(dòng)軸呢,你會(huì)發(fā)現(xiàn)舵機(jī)都附帶了一些有孔的小東西,這就是舵盤,它可以套在驅(qū)動(dòng)軸,臂上打上了些小孔。你只要用連接棒或者線把物體連到孔上,就可以將舵機(jī)的旋轉(zhuǎn)運(yùn)動(dòng)變成物體的直線運(yùn)動(dòng)了,當(dāng)然了,選用不同的舵盤或固定孔就能產(chǎn)生不同的運(yùn)動(dòng)啦。
● 圖示的是幾種不同的舵盤。前面4個(gè)白色的是舵機(jī)附帶的舵盤,右邊四個(gè)是用激光切割機(jī)切割塑料得到的DIY舵盤。最右邊的2個(gè)是舵盤和支架的組合,如果你想實(shí)現(xiàn)兩個(gè)舵機(jī)的組合運(yùn)動(dòng),把這個(gè)舵盤的支架固定到另一個(gè)舵機(jī)的支架上就OK了。
E.普通舵盤設(shè)計(jì)
F.其他舵盤
● 制作普通舵盤對(duì)于童鞋們來說是比較容易的,先用矢量作圖軟件畫一個(gè)多邊形,這個(gè)多邊形的半徑和頂點(diǎn)數(shù)都要和舵機(jī)驅(qū)動(dòng)軸匹配,這樣它就能連接到驅(qū)動(dòng)軸上了,其他種類的也是這樣畫出來的。
5???如何控制舵機(jī)
G.3線接口
● 像圖所示那樣,舵機(jī)有一個(gè)三線的接口。黑色(或棕色)的線是接地線,紅線接+5V電壓,黃線(或是白色或橙色)接控制信號(hào)端。
H.控制信號(hào)
● 控制信號(hào)(如圖H)是一種脈寬調(diào)制(PWM)信號(hào),凡是微控制器能輕松的產(chǎn)生這種信號(hào)。在此文中,我用的是常用的Arduino開發(fā)環(huán)境下的微控制器。
● 脈沖的高電平持續(xù)1到2毫秒(ms),也就是1000到2000微秒(μs)。在1000μs時(shí),舵機(jī)左滿舵。在2000μs時(shí),右滿舵。不過你可以通過調(diào)整脈寬來實(shí)現(xiàn)更大或者更小范圍內(nèi)的運(yùn)動(dòng)。
● 控制脈沖的低電平持續(xù)20毫秒。每經(jīng)過20毫秒(50次每秒),就要再次跳變?yōu)楦唠娖剑駝t舵機(jī)就可能罷工,難以保持穩(wěn)定。不過你要是想讓它一瘸一拐的跳舞,倒可以采取這種方法。
這是一個(gè)完整的Arduino設(shè)計(jì)程序,在這個(gè)程序下,舵機(jī)始終在正中間位置,控制起來很容易
I.舵機(jī)連接Arduino實(shí)驗(yàn)板
● 紅色和黑色的線分別接到Arduino開發(fā)板的5V電源腳和接地腳上??刂凭€接到Arduino開發(fā)板的數(shù)字輸入/輸出腳9腳上。
● 用Arduino控制舵機(jī)也有不太給力的地方,就是Arduino程序把絕大部分時(shí)間都浪費(fèi)在等待延遲命令上,不過童鞋們暫時(shí)不要失望,Arduino中內(nèi)置有舵機(jī)函數(shù),你可以用它內(nèi)置的計(jì)數(shù)器來同時(shí)控制兩個(gè)舵機(jī)(分別在9腳和10腳),是不是又豁然開朗了,這樣我們不就能把節(jié)省下的編程代碼干別的事情了嗎。
這是一個(gè)調(diào)用了舵機(jī)函數(shù)的程序
6???舵機(jī)應(yīng)用:云臺(tái)網(wǎng)絡(luò)攝像頭
J.舵機(jī)控制的云臺(tái)網(wǎng)絡(luò)攝像頭
● 看了這么多內(nèi)容了,是不是有點(diǎn)迫不及待練練手的沖動(dòng),那就先來個(gè)簡單的,材料就是下面這些,兩個(gè)舵機(jī)、一個(gè)Arduino板、一個(gè)用來裝攝像頭的可轉(zhuǎn)動(dòng)基座。先用熱膠把第一個(gè)舵機(jī)的舵盤固定到攝像頭的底部,然后把第二個(gè)舵機(jī)固定到基座上,同時(shí)把它的舵盤固定到第一個(gè)舵機(jī)的一側(cè),最后把舵盤套到各自舵機(jī)上,哇塞,一個(gè)云臺(tái)網(wǎng)絡(luò)攝像頭就這樣誕生了。
● 圖中是一個(gè)純手工打造的云臺(tái)網(wǎng)絡(luò)攝像機(jī),它用的是OpenWrt Linux系統(tǒng)的華碩wi-fi路由器。
● 網(wǎng)絡(luò)攝像頭和Arduino控制板都是用USB集線器連接到路由器上的。
通過Arduino的USB口同時(shí)控制兩個(gè)舵機(jī)的程序
● 大致的流程是這樣滴,當(dāng)串口上有兩個(gè)字節(jié)到來時(shí),程序開始工作,賦給第一個(gè)字節(jié)0-180的值,讓它調(diào)節(jié)搖擺舵機(jī)(調(diào)左右),同樣賦給第二個(gè)字節(jié)0-180的值,讓它調(diào)節(jié)傾斜舵機(jī)(調(diào)上下)。
7???如何DIY連續(xù)旋轉(zhuǎn)的舵機(jī)
K.舵機(jī)的內(nèi)部“解剖”結(jié)構(gòu)
● 任何舵機(jī)都能變成一個(gè)雙向、可調(diào)速的降速齒輪電機(jī)。通常情況下,需要驅(qū)動(dòng)芯片和其他一些零件才能控制電機(jī)的轉(zhuǎn)速和方向,這些部件舵機(jī)中都會(huì)附帶,所以要想得到一個(gè)用到機(jī)器人上的數(shù)控連續(xù)旋轉(zhuǎn)舵機(jī),最簡單也最便宜的的方法就是自己動(dòng)手改造一個(gè),哈哈,考驗(yàn)動(dòng)手能力的時(shí)候又來了。
L.拿掉金屬擋板
● 需要改動(dòng)的是部分的電路模塊和機(jī)械模塊,電路模塊中,我們要找兩個(gè)阻值相同的電阻來充當(dāng)電位計(jì),機(jī)械模塊中,則要去掉防止電機(jī)過速的擋板。
M.卸下塑料擋板
● 下面我們就開始吧,首先,卸開舵機(jī)外殼,HTX500舵機(jī)的外殼由3個(gè)塑料部分扣在一起。你可以用個(gè)小一字改錐或是類似的片狀工具把他撬開,然后從軸上取下齒輪組,(記得標(biāo)記好各個(gè)小齒輪的位置哦),再從下面小心的取出舵機(jī)的電路板。
● 舵機(jī)上有兩個(gè)機(jī)械制動(dòng)擋板,用尖嘴鉗卸下驅(qū)動(dòng)軸基座上的金屬擋板(圖L),用斜嘴鉗卸下外殼頂部的塑料擋板(圖M)。
N.焊上電阻
O.纏上膠帶
● 用兩個(gè)阻值相加約5 kΩ的電阻來替代5 kΩ的電位計(jì),實(shí)際制作中,選一對(duì)2.2kΩ的電阻就能滿足要求了。把電位計(jì)上的3根線焊下來,像圖N那樣焊到電阻上。再把這個(gè)重新組裝成的家伙用絕緣膠帶或是絕緣管纏好(圖O),最后再和電路板一起重新塞進(jìn)舵機(jī)外殼中,扣好外殼,一個(gè)改造好的舵機(jī)就呈現(xiàn)在我們面前了。
● 手工制作階段到此就結(jié)束了,但是現(xiàn)在還能高興的太早,因?yàn)橹挥姓业交鶞?zhǔn)點(diǎn)才能算是大功告成。在理想條件下,如果兩個(gè)電阻完全相同,舵機(jī)就能精確的停到90度的位置上。不過呢,理想和現(xiàn)實(shí)總是會(huì)差那么一點(diǎn)點(diǎn),因此舵機(jī)就沒像理想中那樣么精確。為了使舵機(jī)控制更精確,我們要找到一個(gè)基準(zhǔn)點(diǎn),方法是把上面編的程序灌進(jìn)電路中,通過實(shí)驗(yàn)來看舵機(jī)究竟停在哪個(gè)角度,這個(gè)角度每個(gè)舵機(jī)都不相同,所以得出結(jié)果后要記錄下來。
● 我們業(yè)余愛好者常用的舵機(jī)一般是用電位計(jì)來檢測驅(qū)動(dòng)軸轉(zhuǎn)動(dòng)到的角度,而用在工業(yè)機(jī)器人、電腦數(shù)控機(jī)床等大型系統(tǒng)中的舵機(jī)一般則要用旋轉(zhuǎn)編碼器來確定位置。光學(xué)旋轉(zhuǎn)編碼器的原理是這樣的,把一個(gè)帶有窄縫的圓盤固定在轉(zhuǎn)軸上,然后用一個(gè)LED燈和一個(gè)光敏元件來記錄光通過窄縫照到光敏器件上的次數(shù)來計(jì)算當(dāng)前旋轉(zhuǎn)到的位置。其實(shí)生活中這種技術(shù)也很常見,我們每天都要用的光電鼠標(biāo)就是用的這個(gè)原理制作成的。
注:如果你不想撬開你心愛的舵機(jī),Parallax公司(BASIC Stamp微處理器的制造商)有一款即用型,標(biāo)準(zhǔn)尺寸的連續(xù)轉(zhuǎn)動(dòng)舵機(jī)可供你使用。
8???連續(xù)旋轉(zhuǎn)舵機(jī)的應(yīng)用:5分鐘的繪圖機(jī)器人
P.安裝好的繪圖機(jī)器人*
● 想做個(gè)會(huì)畫畫的的機(jī)器人嗎,那就去找兩個(gè)連續(xù)旋轉(zhuǎn)舵機(jī)來吧,我們這就開始。圖O這個(gè)繪圖機(jī)器人中包含了舵機(jī)兩個(gè), 9V電池,面包板, Arduino電路板,三福記號(hào)筆各一個(gè),外加一對(duì)塑料輪子。
● 它的電路和云臺(tái)攝像頭一樣,我們直接拿來用,而且它的部件都可以用熱膠粘到一起。關(guān)于輪子的選擇,更是簡單,只要是直徑在1到3英寸的圓東西都能用,比如塑料瓶蓋之類的。為了減小摩擦,增大牽引力,我們在車輪上纏上塑料膠帶。
● 這樣組裝階段就完成了。接下來就是程序了,它的程序用一個(gè)包含基準(zhǔn)點(diǎn)的變量來制動(dòng)舵機(jī),這個(gè)基準(zhǔn)點(diǎn)我們上面已經(jīng)通過實(shí)驗(yàn)測出(你的基準(zhǔn)點(diǎn)可能不同)。程序的控制流程為,先讓一個(gè)舵機(jī)朝一個(gè)方向運(yùn)動(dòng)一段時(shí)間,然后換成另一個(gè)舵機(jī)轉(zhuǎn)動(dòng),這樣就能得到一個(gè)螺線形的圖畫了。
● 代碼在此:
#include
Servo servoL;
Servo servoR;
int servoLZero = 83; // experimentally found to stop L motor
int servoRZero = 91; // experimentally found to stop R motor
boolean turnleft = false;
void setup() {
servoL.attach(9);
servoR.attach(10);
servoL.write(servoLZero); // start out not moving
servoR.write(servoRZero); // start out not moving
}
void loop() {
turnleft = !turnleft;
if( turnleft ) {
servoL.write( servoLZero - 10 );
servoR.write( servoRZero );
delay(1000);
} else {
servoL.write( servoLZero );
servoR.write( servoRZero + 10 );
delay(4000); // turn more one way than the other
}
}
Q.運(yùn)動(dòng)中的繪圖機(jī)器人
● 注意:永久記號(hào)筆畫的痕跡不好清除,童鞋們千萬小心哈,最好讓繪圖機(jī)器人在硬紙板或其他不透水的紙的畫畫,或者索性換成支水溶性的記號(hào)筆。
?
評(píng)論
查看更多