2

我正在尝试为Arduino的一个项目制作手臂肌肉系统的模型,但要做到这一点,我需要二头肌三头肌向相反方向移动。

我目前正在尝试使用电位计并试图使两个伺服器朝相反的方向移动,但不知何故,代码似乎并没有像我预期的那样工作,因为它们一直朝同一个方向移动。

我的电源是我的笔记本电脑,我还没有使用电池组。至于具体问题,舵机没有响应电位器,它们只是抖动

#include <Servo.h>

Servo Bicep;
Servo Tricep;
Servo Extensor;
Servo Flexor;

int pos = 0;
int biceppin = 3;
const int triceppin = 4;
const int extensorpin = 5;
const int flexorpin = 6;
int potpin = 8;
int potval = 0;
int potval2;

void setup() {
  Bicep.attach(biceppin);
  Tricep.attach(triceppin);
  Extensor.attach(extensorpin);
  Flexor.attach(flexorpin);
 }

void loop() {
 potval = analogRead(potpin);
 potval = map(potval, 0, 1023, 0, 180);
 potval2 = 180 - potval;
 Bicep.write(potval);  
 Tricep.write(potval2);
 delay(15);
}
  • 你能告诉我代码有什么问题吗?
  • 有没有更有效的方法来完成同样的任务?
4

2 回答 2

2

您设置potpin = 8,但analogRead()仅适用于模拟输入 A0-A5和大多数板上,包括标记的Arduino Uno板,pin8数字 pin

相关报价:

[...] 您不能使用 analogRead() 来读取数字引脚。数字引脚不能像模拟一样工作,因为它没有连接到 ADC(模数转换器)。

您可以使用https://www.arduino.cc/en/Reference/AnalogRead的示例对此进行测试

于 2017-02-22T12:49:47.620 回答
1

我认为那里的问题不止一个。

假设程序是正确的(可能并非如此,因为正如@BOC 的回答中所解释的那样,您在 Arduino Uno 板上使用引脚 8 作为模拟输入,该引脚只是数字的),如果伺服器抖动,一个好的作为问题根源的候选人是您的电源:

  1. 您说(在评论中,但我编辑了您的问题以指定这一点,因为这很重要)您的电源是您的笔记本电脑。大多数 USB 端口限制为 500 mA。

  2. 尽管您没有解释任何有关您的特定伺服器及其规格的信息,但它们中的大多数使用至少 250 mA(例如,Futaba S3003)。但是低成本/低质量的舵机通常需要更多的时间,以及更大的舵机。但即使您的伺服系统每个使用 250 mA(最佳情况),您也在为您的 Arduino Uno 板本身供电(其线性调节器效率不高),因此您已达到 USB 端口的限制。以我自己的经验,大多数(非迷你)伺服系统的电流确实超过了 250 mA。

可能的解决方案

作为一项快速测试,如果您缺乏良好的电源,我会执行以下操作,这通常是您在项目中混合代码和电子设备时的一个好习惯:

  1. 只连接一个伺服(比如说二头肌),加上电位器。
  2. 运行您的程序并测试伺服的运动。
  3. 如果可行,请断开该伺服并连接另一个。
  4. 运行和测试,特别是方向。
  5. 如果它们仍然抖动,请尝试使用具有更好电源的配置伺服。注意:大多数舵机需要 4.8V 作为输入电压,所以不要超过这个电压,因为你可能会损坏它们或显着缩短它们的使用寿命
  6. 如果您对电位器本身有疑问,您也可以尝试一种完全没有电位器的伺服配置,只需在servo.write()方法中硬编码值即可;像这样的东西:

    void loop() {
     delay(500);
     Bicep.write(50);  
     delay(500);
     Bicep.write(100);  
    }
    

这会将任何潜在问题减少为纯软件问题,因为现在,根据您的描述,尚不清楚您面临的是电子配置问题还是软件错误。

于 2017-02-22T14:44:14.047 回答