【雕爺學(xué)編程】Arduino動(dòng)手做(167)---MG996R金屬齒輪舵機(jī)

37款傳感器與模塊的提法,在網(wǎng)絡(luò)上廣泛流傳悍抑,其實(shí)Arduino能夠兼容的傳感器模塊肯定是不止37種的鳄炉。鑒于本人手頭積累了一些傳感器和執(zhí)行器模塊,依照實(shí)踐出真知(一定要?jiǎng)邮肿觯┑睦砟钏崖猓詫W(xué)習(xí)和交流為目的拂盯,這里準(zhǔn)備逐一動(dòng)手試試多做實(shí)驗(yàn),不管成功與否记靡,都會(huì)記錄下來(lái)——小小的進(jìn)步或是搞不掂的問(wèn)題谈竿,希望能夠拋磚引玉。

【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(資料代碼+仿真編程+圖形編程)
實(shí)驗(yàn)一百六十七:180度單軸舵機(jī) MG996R伺服電機(jī) 13KG智能小車(chē)機(jī)器人機(jī)械手臂DIY云臺(tái)配件

00-.jpg
00--.jpg

知識(shí)點(diǎn):舵機(jī)是什么摸吠?
伺服電機(jī)通常被稱(chēng)為舵機(jī)空凸,它是一種帶有輸出軸的小裝置。當(dāng)我們向伺服器發(fā)送一個(gè)控制信號(hào)時(shí)寸痢,輸出軸就可以轉(zhuǎn)到特定的位置呀洲。只要控制信號(hào)持續(xù)不變,伺服機(jī)構(gòu)就會(huì)保持軸的角度位置不改變啼止。如果控制信號(hào)發(fā)生變化道逗,輸出軸的位置也會(huì)相應(yīng)發(fā)生變化。

舵機(jī)是一種位置伺服的驅(qū)動(dòng)器献烦,主要是由外殼滓窍、電路板、無(wú)核心馬達(dá)巩那、齒輪與位置檢測(cè)器所構(gòu)成吏夯。其工作原理是由接收機(jī)或者單片機(jī)發(fā)出信號(hào)給舵機(jī),其內(nèi)部有一個(gè)基準(zhǔn)電路拢操,產(chǎn)生周期為20ms锦亦,寬度為1.5ms 的基準(zhǔn)信號(hào),將獲得的直流偏置電壓與電位器的電壓比較令境,獲得電壓差輸出杠园。經(jīng)由電路板上的IC 判斷轉(zhuǎn)動(dòng)方向,再驅(qū)動(dòng)無(wú)核心馬達(dá)開(kāi)始轉(zhuǎn)動(dòng)舔庶,透過(guò)減速齒輪將動(dòng)力傳至擺臂抛蚁,同時(shí)由位置檢測(cè)器送回信號(hào),判斷是否已經(jīng)到達(dá)定位惕橙。適用于那些需要角度不斷變化并可以保持的控制系統(tǒng)瞧甩。當(dāng)電機(jī)轉(zhuǎn)速一定時(shí),通過(guò)級(jí)聯(lián)減速齒輪帶動(dòng)電位器旋轉(zhuǎn)弥鹦,使得電壓差為0肚逸,電機(jī)停止轉(zhuǎn)動(dòng)爷辙。一般舵機(jī)旋轉(zhuǎn)的角度范圍是0 度到180 度。

日常生活中朦促,舵機(jī)常被用于遙控飛機(jī)膝晾、遙控汽車(chē)、機(jī)器人等領(lǐng)域务冕。舵機(jī)在機(jī)器人領(lǐng)域非常有用血当。因?yàn)槎鏅C(jī)有內(nèi)置的控制電路,它們的尺寸雖然很小禀忆,但輸出力夠大臊旭。像Futaba S-148這樣的標(biāo)準(zhǔn)舵機(jī)能提供 0.3牛/米的扭矩,相對(duì)于它的外形大小來(lái)說(shuō)這已經(jīng)足夠強(qiáng)大了箩退。同時(shí)离熏,舵機(jī)消耗的能量與機(jī)械負(fù)荷成正比。因此乏德,一個(gè)輕載的舵機(jī)系統(tǒng)不會(huì)消耗太多的能量撤奸。

00-.jpg

工作原理
舵機(jī)安裝了一個(gè)電位器(或其它角度傳感器)檢測(cè)輸出軸轉(zhuǎn)動(dòng)角度,控制板根據(jù)電位器的信息能比較精確的控制和保持輸出軸的角度喊括。這樣的直流電機(jī)控制方式叫閉環(huán)控制胧瓜,所以舵機(jī)更準(zhǔn)確的說(shuō)是伺服馬達(dá),英文 servo.舵機(jī)組成: 舵盤(pán)郑什、 減速齒輪府喳、 位置反饋電位計(jì)跨琳、直流電機(jī)箕宙、 控制電路板等务甥÷羊龋控制電路板接受來(lái)自信號(hào)線的控制信號(hào),控制電機(jī)轉(zhuǎn)動(dòng)髓介,電機(jī)帶動(dòng)一系列齒輪組榕暇,減速后傳動(dòng)至輸出舵盤(pán)蛆封。舵機(jī)的輸出軸和位置反饋電位計(jì)是相連的剃法,舵盤(pán) 轉(zhuǎn)動(dòng)的同時(shí)碎捺,帶動(dòng)位置反饋電位計(jì),電位計(jì)將輸出一個(gè)電壓信號(hào)到控制電路板贷洲,進(jìn)行反饋收厨,然后控制電路板根據(jù)所在位置決定電機(jī)轉(zhuǎn)動(dòng)的方向和速度,從而達(dá)到目標(biāo)停止优构。其工作流程為:控制信號(hào)→控制電路板→電機(jī)轉(zhuǎn)動(dòng)→齒輪組減速→舵盤(pán)轉(zhuǎn)動(dòng)→位置反饋電位計(jì)→控制電路板反饋诵叁。

00-3.gif

機(jī)的閉環(huán)檢測(cè)機(jī)制
關(guān)于舵機(jī)的精準(zhǔn)位置控制,存在以下如下圖的閉環(huán)控制機(jī)制钦椭。即:位置檢測(cè)器(角度傳感器)是它的輸入傳感器拧额,舵機(jī)轉(zhuǎn)動(dòng)的位置變化碑诉,位置檢測(cè)器的電阻值就會(huì)跟著變化。通過(guò)控制電路讀取該電阻值的大小势腮,就能根據(jù)阻值適當(dāng)調(diào)整電機(jī)的速度和方向联贩,使電機(jī)向指定角度旋轉(zhuǎn)漫仆。從而實(shí)現(xiàn)了舵機(jī)的精確轉(zhuǎn)動(dòng)的控制捎拯。

33.jpeg

舵機(jī)的控制信號(hào)
為周期是20ms的脈寬調(diào)制(PWM)信號(hào),其中脈沖寬度從0.5ms-2.5ms盲厌,相對(duì)應(yīng)舵盤(pán)的位置為0-180度署照,呈線性變化。也就是說(shuō)吗浩,給它提供一定的脈寬建芙,它的輸出軸就會(huì)保持在一個(gè)相對(duì)應(yīng)的角度上,無(wú)論外界轉(zhuǎn)矩怎樣改變懂扼,直到給它提供一個(gè)另外寬度的脈沖信號(hào)禁荸,它才會(huì)改變輸出角度到新的對(duì)應(yīng)的位置上。舵機(jī)內(nèi)部有一個(gè)基準(zhǔn)電路阀湿,產(chǎn)生周期20ms赶熟,寬度1.5ms的基準(zhǔn)信號(hào),有一個(gè)比較器陷嘴,將外加信號(hào)與基準(zhǔn)信號(hào)相比較映砖,判斷出方向和大小,從而產(chǎn)生電機(jī)的轉(zhuǎn)動(dòng)信號(hào)灾挨。由此可見(jiàn)邑退,舵機(jī)是一種位置伺服的驅(qū)動(dòng)器,轉(zhuǎn)動(dòng)范圍不能超過(guò)180度劳澄,適用于那些需要角度不斷變化并可以保持的驅(qū)動(dòng)當(dāng)中地技。比方說(shuō)機(jī)器人的關(guān)節(jié)、飛機(jī)的舵面等秒拔。

0-1.jpg
0.jpg
0-.jpg
01.jpg
02.jpg
03.jpg
04.jpg
05.jpg
06.jpg
07.jpg
08.jpg
09.jpg
10.jpg
11.jpg
12.jpg
13.jpg

Arduino實(shí)驗(yàn)接線示意圖

14.jpg

【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(資料代碼+仿真編程+圖形編程)

實(shí)驗(yàn)一百六十七:180度單軸舵機(jī) MG996R伺服電機(jī) 13KG智能小車(chē)機(jī)器人機(jī)械手臂DIY云臺(tái)配件

項(xiàng)目:簡(jiǎn)單控制舵機(jī)MG966R

Arduino實(shí)驗(yàn)開(kāi)源代碼

/*

 【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(資料代碼+仿真編程+圖形編程)

  項(xiàng)目:簡(jiǎn)單控制舵機(jī)MG966R

*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

void setup() {

  myservo.attach(9, 600, 2300);  // (pin, min, max)

}

void loop() {

  myservo.write(0);  // tell servo to go to a particular angle

  delay(500);

  myservo.write(90);

  delay(500);

  myservo.write(180);

  delay(500);

  myservo.write(90);

  delay(500);

}

Arduino實(shí)驗(yàn)場(chǎng)景圖

15.gif

代碼的工作原理
第一步是包含所需的Arduino庫(kù)莫矗。您還可以在“文件>示例>Servo”下找到此庫(kù)。

16.jpg

// Include the servo library:

include <Servo.h>

接下來(lái)溯警,您需要?jiǎng)?chuàng)建 Servo 類(lèi)的新對(duì)象趣苏。在這種情況下,稱(chēng)舵機(jī)為“myservo”梯轻,但您也可以使用其他名稱(chēng)食磕。請(qǐng)注意,您還必須在代碼的其余部分中更改伺服器的名稱(chēng)喳挑。

// Create a new servo object:
Servo myservo;
之后彬伦,定義了伺服電機(jī)連接到哪個(gè) Arduino 引腳滔悉。

// Define the servo pin:

define servoPin 9

該語(yǔ)句用于為常量值命名。編譯器將在編譯程序時(shí)將用定義的值替換對(duì)此常量的任何引用单绑。所以在你提到的任何地方回官,編譯器都會(huì)在編譯程序時(shí)用值 9 替換它。

define

servoPin

該變量用于存儲(chǔ)伺服器的當(dāng)前位置(以度為單位)搂橙。
angle

// Create a variable to store the servo position:
int angle = 0;

在代碼的設(shè)置部分歉提,我們將創(chuàng)建的伺服對(duì)象鏈接到將控制舵機(jī)的引腳。該函數(shù)還具有兩個(gè)可選參數(shù)区转,

attach()

void setup() {
// Attach the Servo variable to a pin:
myservo.attach(servoPin);
}

控制角度/位置:

在循環(huán)的第一部分中苔巨,我們只需告訴伺服電機(jī)使用該功能移動(dòng)到特定角度废离。請(qǐng)注意,命令之間需要延遲蜻韭,以便伺服電機(jī)有時(shí)間移動(dòng)到設(shè)定位置。

write()

// Tell the servo to go to a particular angle:
myservo.write(90);
delay(1000);
myservo.write(180);
delay(1000);
myservo.write(0);
delay(1000);

控制速度:

在代碼的最后一部分肖方,我使用了兩個(gè)[for循環(huán)]來(lái)回掃動(dòng)伺服電機(jī)闺魏。如果要控制伺服電機(jī)的速度窥妇,這段代碼也很有用舷胜。通過(guò)更改 for 循環(huán)末尾的延遲值活翩,可以調(diào)整伺服臂的速度烹骨。

// Sweep from 0 to 180 degrees:
for (angle = 0; angle <= 180; angle += 1) {
myservo.write(angle);
delay(15);
}
// And back from 180 to 0 degrees:
for (angle = 180; angle >= 0; angle -= 1) {
myservo.write(angle);
delay(30);
}

Arduino 伺服庫(kù)通過(guò)在函數(shù)中指定兩個(gè)可選參數(shù),可以非常輕松地調(diào)整伺服電機(jī)的最小和最大角度材泄。在此函數(shù)中,第一個(gè)參數(shù)是伺服器所連接的引腳編號(hào)拉宗。第二個(gè)參數(shù)是脈沖寬度,以微秒 (μs) 為單位魁巩,對(duì)應(yīng)于伺服電機(jī)的最薪愀 (0 度)角度。第三個(gè)參數(shù)是脈沖寬度卖鲤,以微秒為單位畴嘶,對(duì)應(yīng)于伺服電機(jī)的最大(180 度)角度集晚。

attach()

默認(rèn)情況下,最小和最大脈沖寬度設(shè)置為 544 和 2400 微秒偷拔。這些值適用于最常見(jiàn)的舵機(jī),但有時(shí)您必須稍微調(diào)整這些值悦污。

我建議以小增量(10-20微秒)調(diào)整最小值和最大值钉蒲,以避免損壞伺服器彻坛。如果伺服臂達(dá)到電機(jī)的物理極限,請(qǐng)?jiān)黾幼钚≈挡耄p小最大值。

define servoPin 9

int min = 480;
int max = 2500;
Servo myservo;

void setup() {
myservo.attach(servoPin, min, max);
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末躬厌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子竞帽,更是在濱河造成了極大的恐慌扛施,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疙渣,死亡現(xiàn)場(chǎng)離奇詭異妄荔,居然都是意外死亡谍肤,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)篷角,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)乳附,“玉大人,你說(shuō)我怎么就攤上這事阱缓。” “怎么了敞嗡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵喉悴,是天一觀的道長(zhǎng)玖媚。 經(jīng)常有香客問(wèn)我,道長(zhǎng)勺像,這世上最難降的妖魔是什么错森? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任涩维,我火速辦了婚禮,結(jié)果婚禮上瓦阐,老公的妹妹穿的比我還像新娘垄分。我一直安慰自己,他們只是感情好薄湿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布豺瘤。 她就那樣靜靜地躺著,像睡著了一般坐求。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上须妻,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音敛惊,去河邊找鬼绰更。 笑死,一個(gè)胖子當(dāng)著我的面吹牛特恬,可吹牛的內(nèi)容都是我干的徐钠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼妒穴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼摊崭!你這毒婦竟也來(lái)了杰赛?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤根时,失蹤者是張志新(化名)和其女友劉穎辰晕,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體替裆,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡窘问,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年惠赫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片儿咱。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖怠缸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情概耻,我是刑警寧澤罐呼,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站厌杜,受9級(jí)特大地震影響计螺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜登馒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一陈轿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧麦射,春花似錦、人聲如沸蛔琅。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)莽囤。三九已至切距,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背北秽。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工贺氓, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人辙培。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓邢锯,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親尾抑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蒂培,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容