概述
首先,您將使伺服器回掃并
零件
要構建本課中描述的項目,您將需要以下零件。
零件 數量
伺服電機 1
10kΩ可變電阻器(pot)
1
半尺寸面包板
1
Arduino Uno R3
1
跳線包
1
100 μF電容器
可選
“掃描”的面包板布局
對于本實驗,唯一與Arduino連接的是伺服電機。
伺服電機有三根引線。引線的顏色在伺服電機之間有所不同,但是紅色引線始終為5V,而GND將為黑色或棕色。另一個引線是控制引線,通常為橙色或黃色。該控制導線連接到數字引腳9。
伺服器方便地端接到一個插座中,我們可以在其中插入跳線,將其鏈接到面包板,然后再連接到Arduino。
如果伺服器不正常
您的伺服器可能行為異常,您可能會發現只有在將Arduino插入某些USB端口時才會發生這種情況。這是因為伺服器消耗了大量功率,尤其是在電動機啟動時,這種突然的高需求足以降低Arduino板上的電壓,從而使其自身復位。
如果這發生這種情況,那么通常可以通過在面包板上的GND和5V之間添加一個高值電容器(470uF或更大)來治愈它。
電容器充當電動機的蓄電庫,因此在啟動時,它會從電動機電容器和Arduino電源。
電容器的較長引線為正極引線,應將其連接到5V。負極引線也經常標有“-”符號。
Arduino的‘Sweep’代碼
將以下草圖加載到Arduino上,您應該發現舵機立即開始首先向一個方向旋轉,然后又向另一個方向旋轉
該草圖基于標準的“掃描”草圖,您可以在Arduino示例中的“ servo”文件夾下找到該草圖。如果愿意,可以運行該草圖。
下載:文件
復制代碼
/*
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);
}
}
伺服電機由一系列脈沖控制,為了使其易于使用,已創建了一個Arduino庫,以便您可以指示伺服電機轉至特定角度。
使用伺服的命令類似于內置的Arduino命令,但是由于您始終不會在項目中使用伺服,因此將它們保存在一個稱為庫的東西中。如果要使用servo庫中的命令,則需要通過以下命令告訴Arduino IDE您正在使用該庫:
下載:文件
復制代碼
#include #include
變量“ servoPin”來定義用于控制伺服器的引腳。
此行:
下載:文件
復制代碼
Servo servo; Servo servo;
定義了一個新的變量“ servo”輸入“伺服”。該庫為我們提供了一種新類型,例如表示伺服的“ int”或“ float”。您實際上可以通過這種方式最多定義八個伺服器,因此,如果我們有兩個伺服器,則可以編寫如下內容:
下載:文件
復制代碼
Servo servo1;
Servo servo2; Servo servo1;
Servo servo2;
在“設置”功能中,我們需要使用以下命令將“ servo”變量鏈接到將控制伺服器的引腳:
下載:file
復制代碼
servo.attach(servoPin); servo.attach(servoPin);
變量‘angle’用于包含當前伺服角度度。在“循環”功能中,我們使用兩個“ for”循環首先在一個方向上增加角度,然后在達到180度時又在另一個方向上增加角度。
命令:
下載:文件
復制代碼
servo.write(angle); servo.write(angle);
告訴伺服器將其位置更新為參數提供的角度。
“旋鈕”的面包板布局
下一步是添加一個鍋,以便我們可以通過旋轉旋鈕來控制伺服器的位置。
您只需要在Arduino上將鍋和導線從其滑塊添加到A0。
Arduino的“旋鈕”代碼
使伺服跟隨旋鈕位置的代碼比使其掃掠更簡單。
下載:文件
復制代碼
/*
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);
}
現在有一個名為“ potPin”的第二個變量。
要設置伺服器的位置,我們從A0讀取一個模擬讀數。這樣我們得到的值在0到1023之間。由于伺服器只能旋轉180度,因此我們需要按比例縮小該值。將其除以6將得到一個介于0到170之間的角度,就可以了。
伺服電機
伺服電機的位置由脈沖長度設置。伺服器預計大約每20毫秒接收一次脈沖。如果該脈沖在1毫秒內為高電平,則伺服角度將為零;如果為1.5毫秒,則它將達到其中心位置;如果為2毫秒,則將處于180度。
伺服器的端點可能會有所不同許多伺服系統只能轉大約170度您還可以購買可以連續旋轉360度的“連續”伺服器。
在伺服器內部
下面的簡短視頻向您展示了伺服器內部正在發生的情況。
但是請注意,如果像這樣拆除伺服器,很有可能不會正確返回。
其他要做的事情
打開“掃描”草圖,然后嘗試將延遲從15毫秒減少到5毫秒。請注意伺服旋轉的速度。
嘗試修改“旋鈕”草圖,以使它不再從旋鈕的位置獲取伺服角度,而是從串行監視器獲取該角度,以便可以從計算機控制伺服。
》提示:要使草圖從串行監視器讀取度數,可以使用functionSerial.parseInt()。這將從串行監視器中讀取一個數字。
責任編輯:wv
-
伺服電機
+關注
關注
85文章
2003瀏覽量
57298 -
Arduino
+關注
關注
187文章
6453瀏覽量
185915
發布評論請先 登錄
相關推薦
評論