概述
在本課程中,您將學(xué)習(xí)如何使用Arduino控制伺服電機(jī)。
首先,您將使伺服器回掃并
零件
要構(gòu)建本課中描述的項(xiàng)目,您將需要以下零件。
零件 數(shù)量
伺服電機(jī) 1
10kΩ可變電阻器(pot)
1
半尺寸面包板
1
Arduino Uno R3
1
跳線包
1
100 μF電容器
可選
“掃描”的面包板布局
對(duì)于本實(shí)驗(yàn),唯一與Arduino連接的是伺服電機(jī)。
伺服電機(jī)有三根引線。引線的顏色在伺服電機(jī)之間有所不同,但是紅色引線始終為5V,而GND將為黑色或棕色。另一個(gè)引線是控制引線,通常為橙色或黃色。該控制導(dǎo)線連接到數(shù)字引腳9。
伺服器方便地端接到一個(gè)插座中,我們可以在其中插入跳線,將其鏈接到面包板,然后再連接到Arduino。
如果伺服器不正常
您的伺服器可能行為異常,您可能會(huì)發(fā)現(xiàn)只有在將Arduino插入某些USB端口時(shí)才會(huì)發(fā)生這種情況。這是因?yàn)樗欧飨牧舜罅抗β?,尤其是在電?dòng)機(jī)啟動(dòng)時(shí),這種突然的高需求足以降低Arduino板上的電壓,從而使其自身復(fù)位。
如果這發(fā)生這種情況,那么通??梢酝ㄟ^(guò)在面包板上的GND和5V之間添加一個(gè)高值電容器(470uF或更大)來(lái)治愈它。
電容器充當(dāng)電動(dòng)機(jī)的蓄電庫(kù),因此在啟動(dòng)時(shí),它會(huì)從電動(dòng)機(jī)電容器和Arduino電源。
電容器的較長(zhǎng)引線為正極引線,應(yīng)將其連接到5V。負(fù)極引線也經(jīng)常標(biāo)有“-”符號(hào)。
Arduino的‘Sweep’代碼
將以下草圖加載到Arduino上,您應(yīng)該發(fā)現(xiàn)舵機(jī)立即開(kāi)始首先向一個(gè)方向旋轉(zhuǎn),然后又向另一個(gè)方向旋轉(zhuǎn)
該草圖基于標(biāo)準(zhǔn)的“掃描”草圖,您可以在Arduino示例中的“ servo”文件夾下找到該草圖。如果愿意,可以運(yùn)行該草圖。
下載:文件
復(fù)制代碼
/*
Adafruit Arduino - Lesson 14. Sweep
*/
#include
int servoPin = 9;
Servo servo;
int angle = 0; // servo position in degrees
void setup()
{
servo.attach(servoPin);
}
void loop()
{
// scan from 0 to 180 degrees
for(angle = 0; angle 《 180; angle++)
{
servo.write(angle);
delay(15);
}
// now scan back from 180 to 0 degrees
for(angle = 180; angle 》 0; angle--)
{
servo.write(angle);
delay(15);
}
} /*
Adafruit Arduino - Lesson 14. Sweep
*/
#include
int servoPin = 9;
Servo servo;
int angle = 0; // servo position in degrees
void setup()
{
servo.attach(servoPin);
}
void loop()
{
// scan from 0 to 180 degrees
for(angle = 0; angle 《 180; angle++)
{
servo.write(angle);
delay(15);
}
// now scan back from 180 to 0 degrees
for(angle = 180; angle 》 0; angle--)
{
servo.write(angle);
delay(15);
}
}
伺服電機(jī)由一系列脈沖控制,為了使其易于使用,已創(chuàng)建了一個(gè)Arduino庫(kù),以便您可以指示伺服電機(jī)轉(zhuǎn)至特定角度。
使用伺服的命令類(lèi)似于內(nèi)置的Arduino命令,但是由于您始終不會(huì)在項(xiàng)目中使用伺服,因此將它們保存在一個(gè)稱(chēng)為庫(kù)的東西中。如果要使用servo庫(kù)中的命令,則需要通過(guò)以下命令告訴Arduino IDE您正在使用該庫(kù):
下載:文件
復(fù)制代碼
#include #include
變量“ servoPin”來(lái)定義用于控制伺服器的引腳。
此行:
下載:文件
復(fù)制代碼
Servo servo; Servo servo;
定義了一個(gè)新的變量“ servo”輸入“伺服”。該庫(kù)為我們提供了一種新類(lèi)型,例如表示伺服的“ int”或“ float”。您實(shí)際上可以通過(guò)這種方式最多定義八個(gè)伺服器,因此,如果我們有兩個(gè)伺服器,則可以編寫(xiě)如下內(nèi)容:
下載:文件
復(fù)制代碼
Servo servo1;
Servo servo2; Servo servo1;
Servo servo2;
在“設(shè)置”功能中,我們需要使用以下命令將“ servo”變量鏈接到將控制伺服器的引腳:
下載:file
復(fù)制代碼
servo.attach(servoPin); servo.attach(servoPin);
變量‘a(chǎn)ngle’用于包含當(dāng)前伺服角度度。在“循環(huán)”功能中,我們使用兩個(gè)“ for”循環(huán)首先在一個(gè)方向上增加角度,然后在達(dá)到180度時(shí)又在另一個(gè)方向上增加角度。
命令:
下載:文件
復(fù)制代碼
servo.write(angle); servo.write(angle);
告訴伺服器將其位置更新為參數(shù)提供的角度。
“旋鈕”的面包板布局
下一步是添加一個(gè)鍋,以便我們可以通過(guò)旋轉(zhuǎn)旋鈕來(lái)控制伺服器的位置。
您只需要在Arduino上將鍋和導(dǎo)線從其滑塊添加到A0。
Arduino的“旋鈕”代碼
使伺服跟隨旋鈕位置的代碼比使其掃掠更簡(jiǎn)單。
下載:文件
復(fù)制代碼
/*
Adafruit Arduino - Lesson 14. Knob
*/
#include
int potPin = 0;
int servoPin = 9;
Servo servo;
void setup()
{
servo.attach(servoPin);
}
void loop()
{
int reading = analogRead(potPin); // 0 to 1023
int angle = reading / 6; // 0 to 180-ish
servo.write(angle);
} /*
Adafruit Arduino - Lesson 14. Knob
*/
#include
int potPin = 0;
int servoPin = 9;
Servo servo;
void setup()
{
servo.attach(servoPin);
}
void loop()
{
int reading = analogRead(potPin); // 0 to 1023
int angle = reading / 6; // 0 to 180-ish
servo.write(angle);
}
現(xiàn)在有一個(gè)名為“ potPin”的第二個(gè)變量。
要設(shè)置伺服器的位置,我們從A0讀取一個(gè)模擬讀數(shù)。這樣我們得到的值在0到1023之間。由于伺服器只能旋轉(zhuǎn)180度,因此我們需要按比例縮小該值。將其除以6將得到一個(gè)介于0到170之間的角度,就可以了。
伺服電機(jī)
伺服電機(jī)的位置由脈沖長(zhǎng)度設(shè)置。伺服器預(yù)計(jì)大約每20毫秒接收一次脈沖。如果該脈沖在1毫秒內(nèi)為高電平,則伺服角度將為零;如果為1.5毫秒,則它將達(dá)到其中心位置;如果為2毫秒,則將處于180度。
伺服器的端點(diǎn)可能會(huì)有所不同許多伺服系統(tǒng)只能轉(zhuǎn)大約170度您還可以購(gòu)買(mǎi)可以連續(xù)旋轉(zhuǎn)360度的“連續(xù)”伺服器。
在伺服器內(nèi)部
下面的簡(jiǎn)短視頻向您展示了伺服器內(nèi)部正在發(fā)生的情況。
但是請(qǐng)注意,如果像這樣拆除伺服器,很有可能不會(huì)正確返回。
其他要做的事情
打開(kāi)“掃描”草圖,然后嘗試將延遲從15毫秒減少到5毫秒。請(qǐng)注意伺服旋轉(zhuǎn)的速度。
嘗試修改“旋鈕”草圖,以使它不再?gòu)男o的位置獲取伺服角度,而是從串行監(jiān)視器獲取該角度,以便可以從計(jì)算機(jī)控制伺服。
》提示:要使草圖從串行監(jiān)視器讀取度數(shù),可以使用functionSerial.parseInt()。這將從串行監(jiān)視器中讀取一個(gè)數(shù)字。
責(zé)任編輯:wv
-
伺服電機(jī)
+關(guān)注
關(guān)注
85文章
2020瀏覽量
57628 -
Arduino
+關(guān)注
關(guān)注
187文章
6457瀏覽量
186501
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論