找回密码
 立即注册

QQ登录

舵机旋转不到程序设定的位置

来源: 已解决 sosoorange 2015-4-9 19:37 显示全部楼层 |阅读模式
新购置一套《百变之星创意拼装套件专业版》
按照手册对一些零部件做了测试:
发现问题如下,希望得到答复:
1.在《百变之星创意拼装套件电控用户手册中》第17页:按键与LED的实验
程序本身没有什么问题,可是实验结果却是,按下按钮,灯灭,松开按钮,灯亮。与手册中描述的结果正好相反。正常的逻辑也应该是按下按钮,灯亮才对。
程序如下:
int buttonPin = A0; // 定义按键为 pin A0
int ledPin = 13; // 定义 LED 为 pin 13
int buttonState = 0; //定义并初始化按键状态
void setup()
{
pinMode(ledPin, OUTPUT); // 设置数字端口 13 为输出模式
pinMode(buttonPin, INPUT); // 设置数字端口 14 为输入模式
}
void loop()
{
buttonState = digitalRead(buttonPin); //读取 Pin 14 的状态
if(buttonState == HIGH) //判断是否为高
{
digitalWrite(ledPin, HIGH); //如果是高,设置 L 灯亮
}
else
{
digitalWrite(ledPin, LOW); //如果是低,设置 LED 灯灭
}
}
2.舵机旋转角度不到位,有卡滞的感觉。舵机是否存在质量问题。
现象:按照程序,舵机应该旋转180°后换向,实际上没能转到位,比较明显。目测至少在少转了5°以上。
           为了看得更清楚一点,我在转向的程序语句前加了delay(3000);让舵机旋转停止后延迟3s再转向。发现顺时针旋转停止后,有“兹兹”的声音,发出声音约1s,似乎是被卡滞住。这应该是导致舵机旋转不到位的原因。
           顺时针转动正常,也无异音。
          几个舵机都有这样的情况。
          (另:有一个舵机不转干脆不转,但能听到电流声)
程序如下:
#include <Servo.h> // 声明调用 Servo.h 库
Servo myservo; // 创建一个舵机对象
int pos = 0; // 变量 pos 用来存储舵机位置
void setup()
{
myservo.attach(10); // 将引脚 10 上的舵机与声明的舵机对象连接起来
}
void loop()
{
for(pos = 0; pos< 180; pos += 1) // 舵机从 0°转到 180°,每次增加 1°
{
myservo.write(pos); // 给舵机写入角度
delay(15); // 延时 15ms 让舵机转到指定位置
}
delay (3000);
for(pos = 180; pos>=1; pos-=1) // 舵机从 180°回到 0°,每次减小 1°
{
myservo.write(pos); // 写角度到舵机
delay(15); // 延时 15ms 让舵机转到指定位置
}
delay (3000);
}





回复

使用道具 举报

大神点评1

问题1:大按钮模块按下时S引脚输出低电平,所以如果您需要在摁下时灯亮的话,只需要修改程序中的if语句
if(buttonState == HIGH) //判断是否为高
{
digitalWrite(ledPin, LOW); //如果是高,设置 L 灯亮
}
else
{
digitalWrite(ledPin, HIGH); //如果是低,设置 LED 灯灭
}
问题2:针对这个角度不够的问题我也做了实验,舵机PWM信号的周期是20ms,它PWM的脉宽是标准的500到2500us,才能确定的达到0度到180度的转角,而控制器输出的脉宽没有那么准确,所以会产生一点角度的不足。
舵机声音是塑料齿轮摩擦产生的声音,左右声音不同是因为内部齿轮间隙的问题。
至于您说有不转的舵机,我们的舵机在出货之前都是一个一个测试好用后才发货的,所以如果您没有使用上的失误,且舵机外观没有破损,您认为确实为舵机本身的问题可以返货给我们检测一下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关注0

粉丝2

帖子1

发布主题