關(guān)于Arduino控制舵機(jī)在以往的文章中已有介紹,如何通過(guò)Arduino使用語(yǔ)音命令控制伺服電機(jī)、利用Nodemcu控制SG90舵機(jī)、利用MPU6050來(lái)控制舵機(jī)等等,但是這些文章都是基于單一舵機(jī)的控制,也就是說(shuō)我們控制一個(gè)舵機(jī)是很容易實(shí)現(xiàn)的,那假如我們需要同時(shí)控制兩個(gè)、三個(gè)甚至更多的舵機(jī)時(shí)該怎么辦呢?
在本文中,我們將向您展示如何使用Arduino來(lái)控制多個(gè)舵機(jī)。用Arduino連接單個(gè)舵電機(jī)是很容易,但是如果我們把所有的舵機(jī)都連接到Arduino的電源引腳上,它們就不能正常工作了,因?yàn)锳rduino的電流不足以驅(qū)動(dòng)所有舵機(jī)。因此,使用Arduino來(lái)控制多個(gè)舵機(jī),你必須使用單獨(dú)的電源。如,5v-2A的獨(dú)立電源或9v的電池。
Arduino同時(shí)控制多個(gè)舵機(jī)的電路圖
什么是舵機(jī)?
有的朋友對(duì)舵機(jī)還很陌生,舵機(jī)是通俗的叫法,它的正式名字叫伺服電機(jī)。建議查看以前的幾篇文章深入了解下:
伺服電機(jī)的分類(lèi)及應(yīng)用
伺服電機(jī)是如何工作的?
什么是PWM:脈沖寬度調(diào)制
秒懂舵機(jī)角度控制原理
Arduino控制多個(gè)舵機(jī)代碼解析
Arduino有單獨(dú)的舵機(jī)支持庫(kù),這個(gè)庫(kù)可以處理所有與PWM控制相關(guān)的工作,也可以用來(lái)控制舵機(jī),使用這個(gè)庫(kù),我們只需要在servo1.write(angle); 函數(shù)中輸入想要旋轉(zhuǎn)的角度,就可以將舵機(jī)旋轉(zhuǎn)到所需角度了。
因此,開(kāi)始我們需要引入舵機(jī)的庫(kù)文件。
#include <Servo.h>
在下面的代碼中,我們將初始化四個(gè)舵機(jī),它們分別是Servo1、Servo2、Servo3和Servo4。
Servo servo1; Servo servo2; Servo servo3; Servo servo4;
接下來(lái),設(shè)置舵機(jī)的輸入引腳。如下面的代碼所示,Servo1連接到Arduino的第三個(gè)引腳。你也可以根據(jù)自己的需要更改引腳序號(hào),但請(qǐng)記住引腳必須支持PWM,使用的Arduino數(shù)字引腳會(huì)導(dǎo)致工作不穩(wěn)定。
void setup() {
servo1.attach(3);
servo2.attach(5);
servo3.attach(6);
servo4.attach(9);
}
現(xiàn)在,在void loop()函數(shù)中,將所有的舵機(jī)從0度旋轉(zhuǎn)到180度,然后從180度旋轉(zhuǎn)到0度。下列代碼中使用的延遲時(shí)間是用來(lái)增加或減少舵機(jī)的響應(yīng)速度的,因?yàn)檠舆t時(shí)間直接影響到變量 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控制多個(gè)舵機(jī)的完整代碼如下:
#include <Servo.h>
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);
}
}
需要注意的是,當(dāng)使用外部電源對(duì)舵機(jī)供電時(shí),需要將外部電源的GND與Arduino的GND連接起來(lái),形成電路的等電位連接,否則會(huì)造成運(yùn)行不穩(wěn)定或存在干擾。


返回頂部
刷新頁(yè)面
下到頁(yè)底