[問題] 紅外線遙控伺服馬達的問題(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