使用一個或兩個帶有Arduino的伺服很容易,但是如果我們想使用多個伺服電機怎么辦?
在這里,我們將向您展示如何使用Arduino控制多個伺服電機。將多個伺服電機與Arduino連接似乎很容易,但是如果我們將所有伺服連接到Arduino電源引腳,那么由于沒有足夠的電流來驅動所有電機,它們將無法正常工作。因此,您必須為電機使用單獨的電源,無論是來自某些適配器(5v 2A)還是來自優質 9v 電池。
所需材料
Arduino UNO
伺服電機
電源
面包板
連接線
電路圖
什么是伺服電機?
在詳細介紹之前,首先我們應該了解伺服電機。
伺服電機有不同的形狀和尺寸。伺服電機將主要有電線,一個用于正電壓,另一個用于接地,最后一個用于位置設置。紅線連接到電源,黑線接地,黃線連接到信號。
伺服電機是直流電機、位置控制系統、齒輪的組合。直流電機軸的位置由伺服中的控制電子設備根據PWM信號的占空比SIGNAL引腳進行調整。
簡單地說,控制電子設備通過控制直流電機來調整軸位置。有關軸位置的數據通過SIGNAL引腳發送。控制器的位置數據應通過伺服電機的信號引腳以PWM信號的形式發送。
PWM(脈寬調制)信號的頻率可能因伺服電機的類型而異。這里重要的是PWM信號的占空比。根據此負載配給,控制電子設備調整軸。
如下圖所示,要使軸移動到 9 點鐘,打開口糧必須為 1/18.ie。在 18ms 信號中,1ms 的導通時間和 17ms 的關閉時間。
對于要移動到 12 點時鐘的軸,信號的導通時間必須為 1.5ms,關閉時間應為 16.5ms。該比率由控制系統在伺服中解碼,并據此調整位置。這里的PWM是使用ARDUINO UNO生成的。
Arduino代碼解釋
最后給出了用于多伺服控制的完整Arduino代碼。
Arduino具有伺服電機庫,它處理所有與PWM相關的東西來旋轉伺服器,您只需要輸入要旋轉的角度,并且有功能servo1.write(angle); 它將伺服器旋轉到所需的角度。
因此,這里我們從定義伺服電機的庫開始。
#include
在下面的代碼中,我們將所有四個伺服器初始化為 Servo1、Servo2、Servo3 和 Servo4。
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
然后,我們使用Arduino設置所有伺服器的輸入引腳。如下面的代碼所示,Servo1連接到Arduino的第3個引腳。您可以根據自己更改引腳,但請記住,它應該是PWM引腳。使用帶有Arduino數字引腳的伺服是不可靠的。
void setup() {
servo1.attach(3);
servo2.attach(5);
servo3.attach(6);
servo4.attach(9);
}
現在,在 void loop() 函數中,我們只是將所有伺服從 0 度旋轉到 180 度,然后旋轉180 度到 0 度。以下代碼中使用的延遲用于增加或降低伺服的速度,因為它會影響變量“i”的速度增加或減少。
void loop() {
for (int i = 0; i < 180; i++) {
servo1.write(i);
servo2.write(i);
servo3.write(i);
servo4.write(i);
delay(10);
}
for (i = 180; i > 0; i--) {
servo1.write(i);
servo2.write(i);
servo3.write(i);
servo4.write(i);
delay(10);
}
}
使用 Arduino 控制多個伺服系統工作:
在將兩個以上的伺服系統與一個Arduino一起使用時,我們都面臨著當前的問題。唯一的解決方案是連接具有適當額定電流的外部電源(在此項目中,我使用2A和9v電源)。對于外部電源,您可以使用適配器,RPS(穩壓電源儀表)或優質的9v伏電池,您可以使用筆記本電腦USB端口為小型伺服供電。要使用外部電源,您只需將 Arduino 接地短接至外部電源接地。
使用下面給出的Arduino代碼對Arduino進行編程,并將電路圖中所示的所有伺服電機連接到電機,并為電機提供適當的電源。因此,所有伺服器將不間斷地協同工作。
#include
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
int i = 0;
void setup() {
servo1.attach(3);
servo2.attach(5);
servo3.attach(6);
servo4.attach(9);
}
void loop() {
for (i = 0; i < 180; i++) {?
servo1.write(i);
servo2.write(i);
servo3.write(i);
servo4.write(i);
delay(10);
}
for (i = 180; i > 0; i--) {
servo1.write(i);
servo2.write(i);
servo3.write(i);
servo4.write(i);
delay(10);
}
}
-
電機
+關注
關注
142文章
9078瀏覽量
146142 -
伺服電機
+關注
關注
85文章
2057瀏覽量
58076 -
Arduino
+關注
關注
188文章
6477瀏覽量
187571
發布評論請先 登錄
相關推薦
評論