[问题] 红外线遥控伺服马达的问题(Arduino)

楼主: QCmmm (MIT午夜饿狼)   2014-11-13 16:37:49
我利用arduino写了一个程式去控制伺服马达的转动
当接上伺服马达SG90时是可以控制的
但是如果接上伺服马达MG996R的时候
伺服马达并不会受到红外线遥控器的控制
自顾自地转动
红外线接收器上的还会微微地闪烁
在执行arduino软件内让伺服马达自转的范例程式时
两个型号的马达都可以顺利的照着程式要求而转动
但是只要一加上红外线控制的程式码
MG996R就会像脱缰的野马一样不理我
请问会造成这个问题的原因是什么呢?
以下是我的程式码
//******************************
#include <IRremote.h>
#include <Servo.h>
//***********************定义红外线接收器*************************
const int irReceiverPin = 2; //红外线接收器 OUTPUT 讯号接在 pin 2
//***********************设定所侦测到的IRcode*************************
long IRinitial = 0x00FF02FD; // 初始化(OK)
long IRtight = 0x00FF629D; // 夹爪夹紧(up)
long IRloose = 0x00FFA857; // 夹爪放松(down)
IRrecv irrecv(irReceiverPin); // 定义 IRrecv 物件来接收红外线讯号
Servo myservo1; // 设 myservo1
int angle;
decode_results results; // 解码结果将放在 decode_results 结构的
results 变量里
//********************************************************************(SETUP)
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // 启动红外线解码
digitalWrite(irReceiverPin,HIGH);
myservo1.attach(5,620,2200); // 定义MG996R伺服马达输出第5脚位(PWM)
}
//******************************************************************(Void)
void initialize(int a) //初始化
{
myservo1.write(0);
delay(a);
}
void tight(int b)
{
for(angle = 0; angle <= 180; angle += 1)
{
myservo1.write(angle);
delay(b);
}
}
void loose(int c)
{
for(angle = 180; angle >= 0; angle -= 1)
{
myservo1.write(angle);
delay(c);
}
}
//******************************************************************************(LOOP)
void loop()
{
//**************************************************************************
if (irrecv.decode(&results))
{ // 解码成功,收到一组红外线讯号
/***********************************************************************/
if (results.value == IRinitial) //初始化
{
initialize(15);
}
/***********************************************************************/
if (results.value == IRtight) //夹爪夹紧
{
tight(15);
}
/***********************************************************************/
if (results.value == IRloose) //夹爪放松
{
loose(15);
}
/***********************************************************************/
else
{
myservo1.write(myservo1.read());
}
irrecv.resume(); // 继续收下一组红外线讯号
}
}
作者: alibuda174 (阿哩不达)   2014-11-13 17:15:00
什么是 脱缰的野马 ?不需要这一行吧 digitalWrite(irReceiverPin,HIGH);嗯...试试让伺服马达由独立电源供电...UNO的电源插头可输入7~12V怕的是电流不够吧 马达属于大电流的装置我不知道问题在哪 只是建议你可试试的方向6颗MG996R 肯定要提供独立电源给马达吧
作者: ROGERTP6LA (EN)   2014-11-13 23:08:00
9V变压器接在UNO版上 一样不行哦因为UNO的5V输出电流有限比较好的方式应该是将SERVO额外提供电源这个电源要记得跟UNO共地剩下的就一样用PWM接脚控制SERVO
作者: alibuda174 (阿哩不达)   2014-11-14 21:26:00
但arduino板子上的稳压器不一定能输出/承受2A以上

Links booklink

Contact Us: admin [ a t ] ucptt.com