本文非常適合初學(xué)者,因?yàn)樗苋菀咨鲜郑⑶覟樗麄兘⒂腥さ捻?xiàng)目(例如通常使用伺服器的機(jī)器人)奠定了基礎(chǔ)。伺服電機(jī)(Servo Motor)是高轉(zhuǎn)矩電機(jī),由于其在機(jī)器人和其他一些應(yīng)用中的通用性,輕松控制其旋轉(zhuǎn)。伺服電機(jī)也稱為舵機(jī),它帶有齒輪輸出軸,該齒輪輸出軸可以通過電氣控制,每次旋轉(zhuǎn)一度。為了控制起見,與普通的直流電動(dòng)機(jī)不同,伺服電機(jī)通常在兩個(gè)電源引腳(VCC和GND)的旁邊有一個(gè)引腳,即信號(hào)引腳。信號(hào)引腳用于控制伺服電機(jī),將其軸旋轉(zhuǎn)至任何所需角度。
在本篇文章中,我們將使用非常流行的SG90伺服電機(jī),我們的目標(biāo)是將伺服電機(jī)從一個(gè)角度旋轉(zhuǎn)到另一個(gè)角度。伺服電機(jī)的電流要求很高,因此當(dāng)在Arduino上使用多個(gè)伺服電機(jī)時(shí),需要將其電源連接到外部電源,因?yàn)锳rduino可能無法提供伺服電機(jī)所需的電流,這一點(diǎn)很重要。由于在本文中我們將僅使用一個(gè)伺服電機(jī),因此可以通過Arduino為它供電。
所需的組件
● SG90伺服電機(jī)
● Arduino Uno開發(fā)板
● 連接導(dǎo)線
● 面包板
原理圖
該項(xiàng)目的原理圖非常簡(jiǎn)單,因?yàn)槲覀冎恍鑼⑺欧姍C(jī)連接到Arduino,伺服電機(jī)通常具有三個(gè)引腳,其中包括VCC、GND和Signal引腳。Signal引腳是用于將控制信號(hào)從微控制器饋送到伺服電機(jī),以使伺服電機(jī)旋轉(zhuǎn)到特定角度。如下圖所示,將伺服器連接至Arduino。
Signal引腳連接到Arduino的數(shù)字引腳8,因?yàn)樗荘WM引腳。伺服方向以PWM脈沖方式從微控制器發(fā)送到伺服電機(jī)。完成所有連接后,我們現(xiàn)在就可以編寫項(xiàng)目代碼了。
代碼
本篇文章的代碼非常容易,這要?dú)w功于Arduino團(tuán)隊(duì)開發(fā)的非常全面而簡(jiǎn)潔的Serve.h庫(kù),該庫(kù)便于在Arduino項(xiàng)目中使用伺服電機(jī)。該庫(kù)使使用單個(gè)命令輕松地將伺服電機(jī)旋轉(zhuǎn)到不同的角度。
該庫(kù)是預(yù)先安裝在Arduino IDE中的,無需我們下載和安裝。首先,我們?cè)诖a中包含將要使用的庫(kù)(在本例中為Serve.h庫(kù))。
#include
接下來,我們創(chuàng)建該庫(kù)的一個(gè)對(duì)象,以在整個(gè)代碼中用作控制伺服電機(jī)的參考。
Servo servo;
完成此操作后,我們開始void setup()函數(shù)。首先,將創(chuàng)建的伺服對(duì)象附加到微控制器的引腳D8,然后將伺服電機(jī)旋轉(zhuǎn)至零度。
void setup() {
servo.attach(8);
servo.write(angle);
}
完成此操作后,我們就可以按照所需的任何方向移動(dòng)伺服電機(jī)了,我們將在void loop()函數(shù)中執(zhí)行此操作。通過使用Servo.h庫(kù),要將伺服電機(jī)旋轉(zhuǎn)到所需的角度,我們要做的只是將所需角度作為參數(shù)傳遞給Servo.write()函數(shù)。為了證明這一點(diǎn),使用了一個(gè)for循環(huán)將伺服電機(jī)沿一個(gè)方向旋轉(zhuǎn)幾個(gè)角度,并使用另一個(gè)循環(huán)將伺服器旋轉(zhuǎn)回其起點(diǎn)。
void loop()
{
// scan from 0 to 180 degrees
for(angle = 10; angle < 180; angle++)??
{
servo.write(angle);
delay(15);
}
// now scan back from 180 to 0 degrees
for(angle = 180; angle > 10; angle--)
{
servo.write(angle);
delay(15);
}
}
以下是本文的完整代碼:
#include
Servo servo;
int angle = 10;
void setup() {
servo.attach(8);
servo.write(angle);
}
void loop()
{
// scan from 0 to 180 degrees
for(angle = 10; angle < 180; angle++)??
{
servo.write(angle);
delay(15);
}
// now scan back from 180 to 0 degrees
for(angle = 180; angle > 10; angle--)
{
servo.write(angle);
delay(15);
}
}
效果演示
復(fù)制上面的代碼,然后上傳到Arduino開發(fā)板,對(duì)伺服電機(jī)進(jìn)行設(shè)置,一段時(shí)間后,您應(yīng)該看到伺服電機(jī)開始轉(zhuǎn)動(dòng)。
以上就是本文的所有內(nèi)容,上面的代碼可以通過多種方式擴(kuò)展,以用于涉及伺服電機(jī)的不同項(xiàng)目中,您將使用伺服電機(jī)制造出什么很棒的東西?
-
伺服電機(jī)
+關(guān)注
關(guān)注
85文章
2049瀏覽量
57962 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5080瀏覽量
97680 -
Arduino
+關(guān)注
關(guān)注
188文章
6471瀏覽量
187308 -
SG90
+關(guān)注
關(guān)注
0文章
9瀏覽量
11517
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論