[問題] 紅外線遙控伺服馬達的問題(Arduino)
我利用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://www.ptt.cc/bbs/ASM/M.1415867873.A.127.html
→
11/13 17:15, , 1F
11/13 17:15, 1F
→
11/13 17:15, , 2F
11/13 17:15, 2F
可是這個軟體一樣是可以控制SG90,無法控制MG996R耶...
※ 編輯: QCmmm (163.24.85.126), 11/13/2014 18:26:57
→
11/13 20:17, , 3F
11/13 20:17, 3F
我一直都是接筆電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
→
11/13 22:57, , 4F
11/13 22:57, 4F
→
11/13 22:58, , 5F
11/13 22:58, 5F
→
11/13 22:58, , 6F
11/13 22:58, 6F
→
11/13 22:59, , 7F
11/13 22:59, 7F
→
11/13 23:08, , 8F
11/13 23:08, 8F
→
11/13 23:10, , 9F
11/13 23:10, 9F
→
11/13 23:11, , 10F
11/13 23:11, 10F
→
11/13 23:11, , 11F
11/13 23:11, 11F
→
11/13 23:12, , 12F
11/13 23:12, 12F
如果我在arduino板子上接上電流為2A以上的變壓器呢?
官網上寫說arduino UNO 的I/O pin輸出的直流電流為40mA
我這樣接電能解決我的問題,給予6顆MG996R足夠的電流嗎?
或是只能獨立給每一個伺服馬達都接上外部電源......?
※ 編輯: QCmmm (163.24.85.126), 11/14/2014 14:26:36
→
11/14 21:26, , 13F
11/14 21:26, 13F
ASM 近期熱門文章
PTT數位生活區 即時熱門文章