學習目標 : 認識faya減速馬達模組的功能及使用方式
學習時間 : 50min
示範模組 : (1) faya brcickNano
(2) faya 減速馬達模組 x 2
工具 : (1) 樂高積木(相容)
====================功能介紹====================
faya減速馬達模組的控制方式和[faya直流馬達模組]的方式一模一樣,它的面板上同樣可以看到兩個輸入埠,SIG和DIR:
- 當SIG埠收到電壓訊號時,馬達旋轉,旋轉速度由電壓大小決定
- 當DIR埠收到HIGH訊號時,馬達逆時針轉;
- 當DIR收到LOW訊號時,馬達順時針轉;
因此控制此模組的順序是(1)透過DIR埠告知馬達旋轉方向 (2)透過SIG埠控制馬達速度

此模組和直流馬達模組不同的地方在於此模組的馬達和外部轉軸間多了減速齒輪組,使得輸出的轉速變小,但轉矩變大,適合拖重物,因此模組上多了一個輪子,可拿來當成組裝自走/遙控車的一部分。

眼尖的朋友會發現為什麼會有兩組SIG和DIR輸入埠呢? 原因是當我們使用這個模組當車子的附件時,會一面朝左,一面朝右,此時如果有兩組相通的輸入埠,模組的上方一定會有輸入埠可以連接單心線至主控制器(Arduino),如下圖畫圈圈的位置:
====================原理知識====================
以下解釋提供給有需要知道背後原理的人:
faya減速馬達的電路和直流馬達的完全相同,在模組上可看到以下IC,功能解釋如下:
L293D : 驅動IC,用來提供足夠的電流驅動此馬達
74HC00 : NAND邏輯閘,透過邏輯閘運算,讓SIG和DIR的邏輯狀態能夠個產生需要的訊號
(SIG決定馬達是否運轉 ; DIG控制運轉方向)
模組的電路圖如下,有興趣的人可以把 00, 01, 10, 11帶入SIG和DIR看輸出結果!

另外注意SIG埠也能夠接收PWM訊號,當輸入PWM訊號時,電流大小隨著脈衝寬度成正比,進而控制馬達的轉速!
===================範例實作(1)===================
了解模組功能(原理)後,我們用以下範例來展示模組的功能:
目標:
(1) 自走車自動前進3秒鐘
(2) 停頓1秒
(3) 自走車自動後退3秒鐘回到原來位置
組裝:
我們要用一個三輪車當範例,後面的兩輪用faya減速馬達,前面的輪子用樂高的輪子配件,這邊的組裝簡單用照片帶過,這個造型使用了最少/簡單的積木,但可達到最穩固的結構,之後在創意組合系列(待補連結)會有詳細的組裝說明。最重要的地方在於下圖中紅色的四個90度轉角積木(LEGO ID:87087),距離需要9x5個樂高單位,要裝減速馬達模組用。

接著把減速馬達模組的四個角落裝到兩邊!

最後在上面放上一個6x8的平板,並把brickNano放上去!

接線:
(1) 電源線連接
如下圖所示,連接的說明/原理請看這篇文章

(2) 訊號線連接
Arduino_D11 ===> 減速馬達_SIG (右輪)
Arduino_D12 ===> 減速馬達_DIR (右輪)
Arduino_D6 ===> 減速馬達_SIG (左輪)
Arduino_D7 ===> 減速馬達_DIR (左輪)
範例程式:
重要:下載程式時請用手握著車子,以免下載成功後車子立刻走動掉到地上
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 2017/6/20 | |
// Faya-Nugget 範例程式 (GearedMotor_1.ino) | |
// 單元: 模組介紹-faya減速馬達模組 | |
// 網址: http://fayalab.blogspot.com/2017/06/fayagearedmotor.html | |
// 目標: (1) 自走車自動前進3秒鐘 | |
// (2) 停頓1秒 | |
// (3) 自走車自動後退3秒鐘回到原來位置 | |
// 接線: Arduino ==> faya模組 | |
// D11 ==> SIG (減速馬達) | |
// D12 ==> DIR (減速馬達) | |
// D6 ==> SIG (減速馬達) | |
// D7 ==> DIR (減速馬達) | |
#define Wheel_R_DIR 12 | |
#define Wheel_R_SIG 11 | |
#define Wheel_L_DIR 7 | |
#define Wheel_L_SIG 6 | |
void setup() { | |
pinMode(Wheel_R_DIR,OUTPUT); //右輪方向腳位 | |
pinMode(Wheel_R_SIG,OUTPUT); //右輪速度腳位 | |
pinMode(Wheel_L_DIR, OUTPUT); //左輪方向腳位 | |
pinMode(Wheel_L_SIG, OUTPUT); //左輪速度腳位 | |
StopMove(); //停止走動 | |
} | |
void loop() | |
{ | |
Forward(); | |
delay(3000); | |
StopMove(); | |
delay(1000); | |
Backward(); | |
delay(3000); | |
StopMove(); | |
while(1); | |
} | |
void Forward() //前進 | |
{ | |
digitalWrite(Wheel_R_DIR,LOW); | |
analogWrite(Wheel_R_SIG,200); | |
digitalWrite(Wheel_L_DIR,HIGH); | |
analogWrite(Wheel_L_SIG,200); | |
} | |
void Backward() //後退 | |
{ | |
digitalWrite(Wheel_R_DIR,HIGH); | |
analogWrite(Wheel_R_SIG,200); | |
digitalWrite(Wheel_L_DIR,LOW); | |
analogWrite(Wheel_L_SIG,200); | |
} | |
void StopMove() //副程式 - 停止走動 | |
{ | |
digitalWrite(Wheel_R_DIR,LOW); | |
analogWrite(Wheel_R_SIG,0); | |
digitalWrite(Wheel_L_DIR,LOW); | |
analogWrite(Wheel_L_SIG,0); | |
} |
備註:
- L42/L44 : 由於兩顆馬達方翻了180度,當右輪要順時針轉,左輪要逆時針轉,也就是給的訊號分別為LOW和HIGH,車子才會前進。
- L50/L52 : 由於兩顆馬達方翻了180度,當右輪要逆時針轉,左輪要順時針轉,也就是給的訊號分別為HIGH和LOW,車子才會後退。
- L43/45 : 用來調整自走車前進的速度,可嘗試填入不同的速度,注意數值太低時,可能電壓太低,扭力不足,車子會無法走動,L51和L53也是同樣道理
- L37: 讓程式永遠停在此行,不再回到loop重複執行
- 下載成功後,手持車子,會看到以下影片同樣的結果 (前進3秒 + 暫停1秒 + 後退3秒)
範例結果:
完成測試後,我們準備上路了,在上路前,我們利用一些基礎積木簡單的製作一個可以放置行動電源的架子
將它組在車子後方
再裝上行動電源,然後把行動電源前方用幾個小積木墊高,如此一來行動電源才不會掉下去
終於完成囉,我們來看看這個範例結果吧
討論:
我們在這個範例介紹了如何透過兩個減速馬達模組,和積木結合後,能夠自動的前進後退,大家不妨試試看如何讓車子自動的轉彎或繞圈圈,我們在未來的創意組合系列會有更深入的介紹!
另外大家有沒有發現,雖然程式要求自走車走直線,但事實上車子還是走偏了一些,原因是因為這類創客型的小馬達,基於成本考量,精密度比不上商業用的馬達,雖然同樣給予analogWrite(200)的訊號,但是左右輪所輸出的速度/力矩還是會有所偏差,此時我們可以利用軟體校正,如果發現車子往右偏了,代表左邊輪子轉太快,就稍微把左輪的analogWrite(數值)調小一點點,可以試著校正看看! 往後我們如果加上感測器時,就能夠自動校正路徑囉!
也歡迎大家在底下留言或到我們的粉絲團留言喔!
====================================
fayalab 粉絲團
FB本篇留言版
沒有留言:
張貼留言