使用一个或两个带有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);
}
}
全部0条评论
快来发表一下你的评论吧 !