0

我正在做一个需要改变伺服电机速度的项目。我使用的硬件是 Arduino Mega 2560 板,我使用 Servo.h 库来控制伺服系统。伺服从 o 旋转到 180 度。我在项目中使用了 12 个伺服电机,并且必须同时控制它们。有办法吗?

4

5 回答 5

1

您可以delay()在 while 或 for 循环中使用函数

例子:

Servo s;
s.attach(9);
for(int i=0 ; i<180 ; i++)
{
    s.write(i);
    delay(10); //10 milisecond
}
于 2013-03-22T13:40:29.773 回答
0

也许您可以在伺服电机之前在伺服电机的 VCC 引脚上串联一些电阻以降低电压;从而减慢它。但是,这将导致您的伺服系统保持“恒定”速度。

另一种方法是在伺服 VCC 连接之间放置一个晶体管,并在基本引脚上设置 PWM 以调节电流(以调节速度),但如果您之间不使用多路复用器,那么每个伺服将花费一个额外的引脚;并且可以使您的设计更复杂一些。

于 2013-12-01T19:47:26.857 回答
0

如果它们的度数相同,请尝试下面的代码。

在最顶部(不在任何“{}”之间)

#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 度startDegreevoid ClearServos

要转动它们,请使用TurnServos(90);. 90 是您希望它转向的程度。


没有测试过这个,因为我没有 Mega 或 12 伺服系统。如果您发现任何错误,请发表评论,因为这是巨大的。我花了很多时间在这上面,所以我希望能帮上忙。:)

于 2013-03-25T23:38:33.513 回答
0

delayMicroseconds(value) 最接近 90-null 是最慢的 360 伺服器,在我的延时摄影装置上,平移和托架,拍摄移动拍摄,及时与机械快门点击器(迷你标准伺服)。

于 2016-03-12T08:44:47.723 回答
-1

在伺服库 WriteMicroseconds(...) 函数中设置伺服速度。

更多信息请点击

于 2013-03-22T13:49:32.930 回答