[問題] 紅外線遙控伺服馬達的問題(Arduino)

看板ASM (組合語言)作者 (帥虫虫)時間10年前 (2014/11/13 16:37), 10年前編輯推噓0(0013)
留言13則, 2人參與, 最新討論串1/1
我利用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
不需要這一行吧 digitalWrite(irReceiverPin,HIGH);
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
UNO的電源插頭可輸入7~12V
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
6顆MG996R 肯定要提供獨立電源給馬達吧
11/13 22:59, 7F

11/13 23:08, , 8F
9V變壓器接在UNO版上 一樣不行哦
11/13 23:08, 8F

11/13 23:10, , 9F
因為UNO的5V輸出電流有限
11/13 23:10, 9F

11/13 23:11, , 10F
比較好的方式應該是將SERVO額外提供電源
11/13 23:11, 10F

11/13 23:11, , 11F
這個電源要記得跟UNO共地
11/13 23:11, 11F

11/13 23:12, , 12F
剩下的就一樣用PWM接腳控制SERVO
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
但arduino板子上的穩壓器不一定能輸出/承受2A以上
11/14 21:26, 13F
文章代碼(AID): #1KP6tX4d (ASM)
文章代碼(AID): #1KP6tX4d (ASM)