我正在尝试使用 Arduino 为项目制作一个肌肉系统模型,但为了实现这一点,我需要 bicep 和三头肌< / em>向相反方向移动。
我目前正在尝试使用电位计并试图让两个servos向相反的方向移动,但不知怎的,代码似乎没有像我预期的那样工作,因为它们继续向同一个方向移动
我的电源是我的笔记本电脑,我还没有使用过电池组。至于具体问题,舵机没有响应电位器而只是抖动
#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);
}
答案 0 :(得分:2)
您设置了potpin = 8
,但analogRead()
仅适用于模拟输入 A0-A5
,并且在大多数主板上都包含已标记的 Arduino Uno 板,引脚8
是数字引脚。
的示例对此进行测试[...]你不能使用analogRead()来读取数字引脚。数字引脚不能表现为模拟,因为它没有连接到ADC(模数转换器)。
答案 1 :(得分:1)
我认为那里存在不止一个问题。
假设程序是正确的(可能不是这种情况,因为正如在@BOC的回答中所解释的那样,在Arduino Uno板中使用引脚8作为模拟输入时,该引脚只是数字的),如果伺服器抖动,作为问题根源的好候选者是你的电源:
您说(在评论中,但我编辑了您的问题以指明这一点,因为它很重要)您的电源是您的笔记本电脑。大多数USB端口限制为500 mA。
虽然您没有解释有关您的特定伺服系统及其规格的任何信息,但大多数都使用至少250 mA(例如,Futaba S3003)。但是低成本/低质量的伺服系统通常需要更多,以及更大的伺服系统。但即使你的伺服电机每个都使用250 mA(最好的情况),你也在为你的Arduino Uno电路板供电(他的线性稳压器效率不高),因此你达到USB的极限港口。根据我自己的经验,大多数(非迷你型)舵机的确不会超过250毫安。
可能的解决方案
作为一项快速测试,如果您缺乏良好的电源,我会做以下工作,当您在项目中混合代码和电子设备时,这通常是一个很好的做法:
如果您对电位器本身有疑问,您也可以尝试不带电位器的一个伺服配置,只需在servo.write()
方法中硬编码值;像这样的东西:
void loop() {
delay(500);
Bicep.write(50);
delay(500);
Bicep.write(100);
}
这样可以将任何潜在的问题减少到仅限软件的问题,因为根据您的描述,现在还不清楚您是否面临电子配置问题或软件错误。