作者QCmmm (帅虫虫)
看板ASM
标题[问题] 红外线遥控伺服马达的问题(Arduino)
时间Thu Nov 13 16:37:49 2014
我利用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(); // 继续收下一组红外线讯号
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 163.24.85.126
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/ASM/M.1415867873.A.127.html
1F:→ alibuda174: 什麽是 脱缰的野马 ? 11/13 17:15
2F:→ alibuda174: 不需要这一行吧 digitalWrite(irReceiverPin,HIGH); 11/13 17:15
可是这个软体一样是可以控制SG90,无法控制MG996R耶...
※ 编辑: QCmmm (163.24.85.126), 11/13/2014 18:26:57
3F:→ alibuda174: 嗯...试试让伺服马达由独立电源供电... 11/13 20:17
我一直都是接笔电usb的接头供电
这样给的电压会不够吗?
SG90的工作电压为3.5~6V
MG996R的工作电压则是4.8~7.2V
电脑USB出的电压好像都是5V
网路上面有看到arduino专用的9V变压器
这样子接arduino UNO的面板会不会有问题啊?
而且我会接到6颗MG996R
这样的电压足够吗?
※ 编辑: QCmmm (163.24.85.126), 11/13/2014 21:57:11
4F:→ alibuda174: UNO的电源插头可输入7~12V 11/13 22:57
5F:→ alibuda174: 怕的是电流不够吧 马达属於大电流的装置 11/13 22:58
6F:→ alibuda174: 我不知道问题在哪 只是建议你可试试的方向 11/13 22:58
7F:→ alibuda174: 6颗MG996R 肯定要提供独立电源给马达吧 11/13 22:59
8F:→ ROGERTP6LA: 9V变压器接在UNO版上 一样不行哦 11/13 23:08
9F:→ ROGERTP6LA: 因为UNO的5V输出电流有限 11/13 23:10
10F:→ ROGERTP6LA: 比较好的方式应该是将SERVO额外提供电源 11/13 23:11
11F:→ ROGERTP6LA: 这个电源要记得跟UNO共地 11/13 23:11
12F:→ ROGERTP6LA: 剩下的就一样用PWM接脚控制SERVO 11/13 23:12
如果我在arduino板子上接上电流为2A以上的变压器呢?
官网上写说arduino UNO 的I/O pin输出的直流电流为40mA
我这样接电能解决我的问题,给予6颗MG996R足够的电流吗?
或是只能独立给每一个伺服马达都接上外部电源......?
※ 编辑: QCmmm (163.24.85.126), 11/14/2014 14:26:36
13F:→ alibuda174: 但arduino板子上的稳压器不一定能输出/承受2A以上 11/14 21:26