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