想要透過伺服馬達來讓你的作品做一些動作,但又不曉得如何控制?
本篇會讓你了解伺服馬達如何跟Arduino連接,並且教你如何寫程式控制伺服馬達轉到指定的角度。
內容目錄
伺服馬達
本篇文章使用 輝盛 9g 小型伺服馬達(舵機) (S版)
材料來源為傑森創工,創客的好朋友👍
硬體介紹
“伺服馬達”或稱”伺服舵機”,其內部是由直流馬達、減速齒輪、位置感測器、電路板組合而成。
我們可以透過傳遞訊號的方式來控制伺服馬達轉到指定角度,並且hold住,跟一般直流馬達不太一樣。
光是可以控制特定角度這項特色,就可以滿足很多動作需求呢,可以用在機器人控制、遙控車方向控制、飛機模型等等。
參考資料: 舵機的內部結構及工作原理
規格注意
我個人在使用時比較會去注意幾個規格,工作電壓、扭力、轉動角度。
要根據你要應用的場合需要多少扭力、動作範圍,來選擇適合的伺服馬達。
以輝盛 9g 小型伺服馬達(舵機) (S版)這款來說,其工作電壓4.8V、扭矩1.6kg/cm、轉動角度0~180度,若是用在超過該扭矩的範圍,則會無法動作,甚至造成伺服馬達損壞。
電路連接
伺服馬達一般都會有三條線,信號線、電源線、地線。
這邊要注意,信號線接收的為PWM信號,因此要接到arduino pin腳旁有” ~ “這個符號的腳位上。
Arduino程式
控制一個伺服馬達
#include <Servo.h>
Servo myservo; //宣告伺服馬達物件
void setup() {
myservo.attach(9); //伺服馬達信號線腳位
}
void loop() {
myservo.write(0); //轉動角度(0~180度)
delay(3000);
myservo.write(180);
delay(3000);
}
控制多個伺服馬達
#include <Servo.h>
Servo myservo1; //宣告伺服馬達物件
Servo myservo2;
void setup() {
myservo1.attach(9); //伺服馬達信號線腳位
myservo2.attach(6);
}
void loop() {
myservo1.write(0); //轉動角度(0~180度)
myservo2.write(180);
delay(3000);
myservo1.write(180);
myservo2.write(0);
delay(3000);
}
伺服馬達創作
伺服馬達具有定位的特性,所以很常應用在像是機械手臂、雲台,方向控制等等的作品,下列影片中含有相關有趣的作品~
下列影片為無用盒,這個作品一直是我蠻有興趣的作品,而其中伺服馬達用來打開盒子的上蓋,還有猴子伸出手臂的動作,之後有機會來製作看看。
最後!! 如果你喜歡這篇文章,或是這篇文章對你有幫助的話,也歡迎分享出去給需要的人,訂閱免費電子報獲得最新資訊😄😄😄。
不好意思!請問一下我利用HC-06藍芽模組搭配MG995伺服馬達做一個無限操控的夾具,但在藍芽操控時夾具夾入物件(厚度不同)會因為馬達軸無法轉到程式設定的位置而導致BUG產生(夾子無法在開關、異常開開關關),有試過將夾子卸除,而只有伺服馬達進行時操控時就不會有問題,所以覺得程式可能是主要原因。
想懇求有什麼解決辦法,就是夾子夾物件時就是將物件夾住,放開就是放開,非常感謝!
以下是夾子的程式,單純靠角度進行夾合動作。
void Close()
{
myservo.write(160);
}
void Open()
{
myservo.write(20);
我覺得可能是因為單純靠角度來控制,而又有東西夾住,會讓伺服馬達一直想要到指定位置,導致異常。
我的建議是:
1.把馬達的5v額外節電源供應器,這樣比起接aduino,供應的電流可以更大,扭力就會越大,讓馬達更穩定。
2.把夾取的動作改成,調整式的,就是你可以微調夾取的寬度,這樣就不會因為夾大的物件時,伺服馬達跟設定的角度差異過大。
好的!了解!
感謝您的回覆!