关于Arduino控制舵机在以往的文章中已有介绍,如何通过Arduino使用语音命令控制伺服电机、利用Nodemcu控制SG90舵机、利用MPU6050来控制舵机等等,但是这些文章都是基于单一舵机的控制,也就是说我们控制一个舵机是很容易实现的,那假如我们需要同时控制两个、三个甚至更多的舵机时该怎么办呢?
在本文中,我们将向您展示如何使用Arduino来控制多个舵机。用Arduino连接单个舵电机是很容易,但是如果我们把所有的舵机都连接到Arduino的电源引脚上,它们就不能正常工作了,因为Arduino的电流不足以驱动所有舵机。因此,使用Arduino来控制多个舵机,你必须使用单独的电源。如,5v-2A的独立电源或9v的电池。
Arduino同时控制多个舵机的电路图
什么是舵机?
有的朋友对舵机还很陌生,舵机是通俗的叫法,它的正式名字叫伺服电机。建议查看以前的几篇文章深入了解下:
伺服电机的分类及应用
伺服电机是如何工作的?
什么是PWM:脉冲宽度调制
秒懂舵机角度控制原理
Arduino控制多个舵机代码解析
Arduino有单独的舵机支持库,这个库可以处理所有与PWM控制相关的工作,也可以用来控制舵机,使用这个库,我们只需要在servo1.write(angle); 函数中输入想要旋转的角度,就可以将舵机旋转到所需角度了。
因此,开始我们需要引入舵机的库文件。
#include <Servo.h>
在下面的代码中,我们将初始化四个舵机,它们分别是Servo1、Servo2、Servo3和Servo4。
Servo servo1; Servo servo2; Servo servo3; Servo servo4;
接下来,设置舵机的输入引脚。如下面的代码所示,Servo1连接到Arduino的第三个引脚。你也可以根据自己的需要更改引脚序号,但请记住引脚必须支持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控制多个舵机的完整代码如下:
#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); } }
需要注意的是,当使用外部电源对舵机供电时,需要将外部电源的GND与Arduino的GND连接起来,形成电路的等电位连接,否则会造成运行不稳定或存在干扰。