如何用Arduino同时控制多个舵机

  • 内容
  • 评论
  • 相关

关于Arduino控制舵机在以往的文章中已有介绍,如何通过Arduino使用语音命令控制伺服电机利用Nodemcu控制SG90舵机利用MPU6050来控制舵机等等,但是这些文章都是基于单一舵机的控制,也就是说我们控制一个舵机是很容易实现的,那假如我们需要同时控制两个、三个甚至更多的舵机时该怎么办呢?

Arduino同时控制多个舵机

在本文中,我们将向您展示如何使用Arduino来控制多个舵机。用Arduino连接单个舵电机是很容易,但是如果我们把所有的舵机都连接到Arduino的电源引脚上,它们就不能正常工作了,因为Arduino的电流不足以驱动所有舵机。因此,使用Arduino来控制多个舵机,你必须使用单独的电源。如,5v-2A的独立电源或9v的电池。

Arduino同时控制多个舵机的电路图

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连接起来,形成电路的等电位连接,否则会造成运行不稳定或存在干扰。