之前以既小且便宜的伺服馬達Tower Pro SG90為例,這次將練習使用可連續旋轉的伺服馬達,GWS(廣營)的S35。
雖然有很多文章討論如何改造一般的伺服馬達,變成可以連續旋轉,不過我還沒試過。
我是到某拍賣網站購買GWS S35,大約兩百多元。
呃,背面。
附了一張滿詳細的規格說明書,滿不錯的。
螺絲、金屬扣、橡膠減震墊、旋臂。
馬達主體。
一般伺服馬達有三條線,電源(紅色)、接地(黑或棕色)、訊號線(白、黃、橘、藍,甚至是黑色)。
S35三條線的顏色是白、紅、黑,對應訊號、電源、接地。
電路圖如下,訊號線接Arduino數位腳位9。
底下這支程式很簡單,從序列埠接收0~180的值,控制S35的旋轉速度。
#include <Servo.h>
Servo myservo;
void setup()
{
Serial.begin(115200);
myservo.attach(9);
}
void loop()
{
int d;
if(Serial.available()){
d = Serial.parseInt();
Serial.println(d);
if(0 <= d && d <= 180){
myservo.write(d);
}
}
}
請開啟序列埠監控視窗,輸入0~180的值,便會看見伺服馬達以不同轉速、不同方向進行旋轉。
一般傳入0~180給Servo.write時,會控制伺服馬達旋轉到哪個角度,停在那裡,但S35是連續轉動的伺服馬達,0~180代表不同的旋轉速度,0是往某個方向的最快轉速,90代表不動,180則是往另一個方向的最快轉速。
This comment has been removed by the author.
ReplyDelete你好:
ReplyDelete請問可以控制它旋轉的時間嗎?
例如說我要它150的轉速然後旋轉三秒就停
謝謝!
下達myservo.write(150);時,呼叫millis()記錄當時的時間,
Delete然後不斷地呼叫millis()與之前作比較,若超過三秒就
呼叫myservo.write(90);停下馬達。
不過,有時候呼叫write(90)時,馬達仍有可能以非常緩慢的速度轉動,此時可呼叫detach斷開連結(咳咳),也就是不再輸出訊號,那麼馬達就會完全靜止;之後想要再轉動時,就要再呼叫attach才行。
要怎麼改成連續旋轉伺服
ReplyDeleteGWS(廣營)的S35已經是連續旋轉伺服馬達
Delete請問如何控制確切轉速?如我要恰20RPM要如何做呢?
ReplyDelete嗯,我不清楚。
Delete如果是連續旋轉伺服馬達,傳給它不同頻率,就會有不同轉速。
Delete至於如何確切控制,嗯,要自己量吧。
Serial.begin(115200);?
ReplyDeletewhy not 9600
why not.
Delete序列埠監控視窗 輸入 180,60,90...
ReplyDelete會稍做停頓,或反轉,但不久又會跳回0
這怎麼解決,煩請解答 : )
跳回0?什麼意思?
DeleteGWS S35 是 連續旋轉伺服馬達
GWS S35 是 連續旋轉伺服馬達,這點明白
Delete在馬達運轉中 0跟180分別是反向對吧
用上述程式(完全沒有改的情形)
一開始馬達是停止,等待輸入序列埠監控視窗
但奇怪的是
無論我輸入0~180任何數字,程式都會跳回(輸入序列埠監控視窗)顯示為零
如果將程式改成不要用輸入,例如 d=180 或 d=0 可以達到正反轉的要求
懇請解答
嗯,在序列埠監控視窗底下有個控制換行字元的設定,請改成「No line editing」,這樣應該就可以了。
Deletethanks a lot : )
Delete請問一下,我給他輸入0~180的值,他都只會轉同一個方向,請問該如何改成一個值,轉動
ReplyDelete在一個值停止的簡單操作呢?? 語法? 謝謝您
GWS S35是連續旋轉的伺服馬達,照理說輸入0應該會正轉,那麼180應該會逆轉。
Delete而輸入90應該會停止,不過需要測試微調,可能會是93才停止。
官方說不能控制角度,如果想控制停在某角度,很勉強,
要自己算時間,而且不精確,
如果真的要將這個馬達調整到固定的角度時就要去算時間差,不容易。
您好,我試過了,不會反轉,也不會停止耶! @@"
Delete是不是語法可以改成給個指定的數字指令,讓他直接停止或反轉呢?
如果我外加藍芽的話,會有影響嗎 ^^"?
你用的是GWS S35?
Delete正確的話,輸入0~180的值,便會看見伺服馬達以不同轉速、不同方向進行旋轉。而其中某值應會停止。
藍牙會有什麼影響?
您好,請問一下
ReplyDelete我有想要利用2顆GWS S35做成自走車的車輪馬達
但是我發現若利用servo.write()去控制的話
2顆馬達的轉速不會相同
請問一下應該要怎麼做才可以使得2顆馬達轉速相同呢?
我有想到使用writeMicrosecond()去控制
但是又不知道GWS S35的脈衝寬度範圍
請問您有比較好的建議嗎?
嗯,沒有相關經驗,恐怕無法給予建議。
Delete轉速不相同,嗯,確認給予相同的電力(電壓、電流)嗎?
轉速相差很大嗎?
脈衝寬度範圍,上網找可找到。
使用writeMicrosecond時,先從1000~2000嘗試,然後逐步加大範圍,若馬達出現怪聲停止,若加大範圍時轉速並未提昇,也應該代表抵達上下限了。
我是利用同一片UNO板,2個數位腳位各接1顆GWS S35
Delete然後看2顆馬達的轉速是不一樣的
轉速是不會相差太大,可是用在自走車上怕會有問題
嗯,不清楚。
Delete調整writeMicrosecond參數值,直到你覺得雙方的轉速相同。大概吧。
請問一下如果要用按鈕控制的話可以嗎??
ReplyDelete大概就是用三個按鈕來控制GWS S35的0 90 180
ReplyDelete不知道行不行得通 懇請解惑感恩
可以啊。有什麼問題嗎?
Delete你說的是需求,不是問題。
那使用用程式的話要如何控制呢?
Delete不知道要如呵將90 0 180 變成可以用按鈕控制的程式
謝謝
用digitalRead讀取按鈕狀態
Delete根據按下哪個按鈕
以analogWrite輸出對應的PWM訊號控制伺服馬達
請問如果要同時供應給,兩個 S35 需要如何供電
ReplyDeleteArduino 本身電力不夠 =>
1.可以改接兩個18650嗎?
2.兩個18650為7.2V 需不需要穩壓到5V
3.若四個 S35 又要如何供電呢?
謝謝您
1. 可以
Delete2. 當然要
3. 計算所有馬達需要的電流上限,挑選能夠輸出那麼大電流的穩壓器
如果是306的伺服馬達 我想讓它轉2圈停下來要怎麼控制??
ReplyDelete沒用過。
Delete請問一下 如果想讓光敏電阻所接受到的數值來控制伺服馬達轉動角度 該怎麼做
ReplyDelete參考這篇 http://yehnan.blogspot.tw/2012/02/arduino_23.html 讀取光敏電阻的值,
ReplyDelete然後使用map,把值的範圍轉成伺服馬達的角度,
然後用Servo的write寫入。
請問一下能夠用PWM去控制伺服馬達所轉的角度嗎!?
ReplyDelete這是連續旋轉的伺服馬達,很難吧,我不知道怎麼做。
Delete請問可以控制它旋轉的時間嗎?
ReplyDelete例如說我要它150的轉速然後旋轉三秒就停 再反轉旋轉三秒
有完整的code 碼
用來收窗簾用
請問,我加入了millis()
ReplyDelete仍無法再指定的轉速下執行3秒
還是得再輸入90才會停止
請問程式碼的部分哪裡該修正呢?
謝謝
#include
Servo myservo;
long previousTime = 0;
long interval = 3000;
void setup()
{
Serial.begin(9600);
myservo.attach(9);
}
void loop()
{
int d;
unsigned long currentTime= millis();
if(Serial.available()){
d = Serial.parseInt();
Serial.println(d);
if(0 <= d && d <= 180){
myservo.write(d);
if(currentTime - previousTime > interval){
myservo.write(90);
}
}
}
previousTime = currentTime;
}