看板 ASM 關於我們 聯絡資訊
我利用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
alibuda174: 什麼是 脫韁的野馬 ? 11/13 17:15
alibuda174: 不需要這一行吧 digitalWrite(irReceiverPin,HIGH); 11/13 17:15
可是這個軟體一樣是可以控制SG90,無法控制MG996R耶... ※ 編輯: QCmmm (163.24.85.126), 11/13/2014 18:26:57
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
alibuda174: UNO的電源插頭可輸入7~12V 11/13 22:57
alibuda174: 怕的是電流不夠吧 馬達屬於大電流的裝置 11/13 22:58
alibuda174: 我不知道問題在哪 只是建議你可試試的方向 11/13 22:58
alibuda174: 6顆MG996R 肯定要提供獨立電源給馬達吧 11/13 22:59
ROGERTP6LA: 9V變壓器接在UNO版上 一樣不行哦 11/13 23:08
ROGERTP6LA: 因為UNO的5V輸出電流有限 11/13 23:10
ROGERTP6LA: 比較好的方式應該是將SERVO額外提供電源 11/13 23:11
ROGERTP6LA: 這個電源要記得跟UNO共地 11/13 23:11
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
alibuda174: 但arduino板子上的穩壓器不一定能輸出/承受2A以上 11/14 21:26