我正在做一个需要改变伺服电机速度的项目。我使用的硬件是 Arduino Mega 2560 板,我使用 Servo.h 库来控制伺服系统。伺服从 o 旋转到 180 度。我在项目中使用了 12 个伺服电机,并且必须同时控制它们。有办法吗?
5 回答
您可以delay()
在 while 或 for 循环中使用函数
例子:
Servo s;
s.attach(9);
for(int i=0 ; i<180 ; i++)
{
s.write(i);
delay(10); //10 milisecond
}
也许您可以在伺服电机之前在伺服电机的 VCC 引脚上串联一些电阻以降低电压;从而减慢它。但是,这将导致您的伺服系统保持“恒定”速度。
另一种方法是在伺服 VCC 连接之间放置一个晶体管,并在基本引脚上设置 PWM 以调节电流(以调节速度),但如果您之间不使用多路复用器,那么每个伺服将花费一个额外的引脚;并且可以使您的设计更复杂一些。
如果它们的度数相同,请尝试下面的代码。
在最顶部(不在任何“{}”之间):
#include <Servo.h>
Servo S1;
Servo S2;
Servo S3;
Servo S4;
Servo S5;
Servo S6;
Servo S7;
Servo S8;
Servo S9;
Servo S10;
Servo S11;
Servo S12;
把这个放在 Setup
:
S1.attach(1);
S2.attach(2);
S3.attach(3);
S4.attach(4);
S5.attach(5);
S6.attach(6);
S7.attach(7);
S8.attach(8);
S9.attach(9);
S10.attach(10);
S11.attach(11);
S12.attach(12);
您需要更改密码。
把它放在任何地方(不在任何“{}”之间):
void TurnServos(int toDegree){
servosAt = S1.read;
if(servosAt == toDegree){
}
if(servosAt > toDegree){
while(S1.read > toDegree){
int currentToDegree = S1.read - 1;
S1.write(currentToDegree);
S2.write(currentToDegree);
S3.write(currentToDegree);
S4.write(currentToDegree);
S5.write(currentToDegree);
S6.write(currentToDegree);
S7.write(currentToDegree);
S8.write(currentToDegree);
S9.write(currentToDegree);
S10.write(currentToDegree);
S11.write(currentToDegree);
S12.write(currentToDegree);
delay(10); //Adjust this to make it faster or slower.
}
}
if(servosAt < toDegree){
while(S1.read < toDegree){
int currentToDegree = S1.read + 1;
S1.write(currentToDegree);
S2.write(currentToDegree);
S3.write(currentToDegree);
S4.write(currentToDegree);
S5.write(currentToDegree);
S6.write(currentToDegree);
S7.write(currentToDegree);
S8.write(currentToDegree);
S9.write(currentToDegree);
S10.write(currentToDegree);
S11.write(currentToDegree);
S12.write(currentToDegree);
delay(10); //Adjust this to make it faster or slower.
}
}
}
void ClearServos(){
int startDegree = 90; //Change this number to anything you want.
S1.write(startDegree);
S2.write(startDegree);
S3.write(startDegree);
S4.write(startDegree);
S5.write(startDegree);
S6.write(startDegree);
S7.write(startDegree);
S8.write(startDegree);
S9.write(startDegree);
S10.write(startDegree);
S11.write(startDegree);
S12.write(startDegree);
}
如何使用这个:
在setup
你对舵机做任何事情之前,但在我告诉你安装的部分之后,ClearServos();
用来准备要使用的舵机。(这个可能不一定,但是我不知道你在S1.read
不改变它的情况下使用会发生什么,如果舵机在不同的位置,它会解决问题。如果它不会引起问题,可以避免,但我如果可以的话,认为你应该使用它。)所有这些都会变成 90 度。(可以用 中的变量改变 90 度startDegree
。void ClearServos
)
要转动它们,请使用TurnServos(90);
. 90 是您希望它转向的程度。
没有测试过这个,因为我没有 Mega 或 12 伺服系统。如果您发现任何错误,请发表评论,因为这是巨大的。我花了很多时间在这上面,所以我希望能帮上忙。:)
delayMicroseconds(value) 最接近 90-null 是最慢的 360 伺服器,在我的延时摄影装置上,平移和托架,拍摄移动拍摄,及时与机械快门点击器(迷你标准伺服)。
在伺服库 WriteMicroseconds(...) 函数中设置伺服速度。
更多信息请点击