2009年5月11日 星期一

邁向互動達人的第四堂課. Motor

Motors


在我們生活的周遭,馬達的應用可說是無所不在:
震動:PS2手把. 手機. 按摩器.
轉動:鐵捲門. 歐拖拜. 電風扇
生電:發電機








#DC motor


DC馬達的接法其實很簡單,就是知道吃多少電,然後把電池接上去就會轉,而反接就反轉



然而,這樣的話我們就不用在這裡教了,當然要用Arduino去控制,還需要多做些什麼...
大家可以先試試看,直接用Arduino的Digital out去控制馬達,看看會發生什麼事?


程式檔:director_motor.pde


當然,我們使用小馬達時,這樣做是沒什麼問題(但有時馬達會把Arduino的電給吃了),但若我們開始要控制更大的馬達,例如9V或12V,甚至更大顆的,就不可能直接用arduino提供電力,因為Arduino最多也只能提供5V的電力,我們該怎麼做勒?










我們需要用電晶體來幫助我們做更多事情...

這裡使用NPN型TIP120這顆電晶體,電晶體的三隻腳分基極(base).集極(collector).射極(emitter),電晶體最常被拿來做電路控制的開關使用,可以看到電路是由集極->射極,平常是斷路的,而經由基極給的訊號來決定開關,LOW就斷路,HIGH就開通,就是這麼簡單。











這樣就可以應用在電路上作為使用
左邊的是小電流電路(即Arduino自我供電用),而右邊的則是大電流電路使用(即需外部供電的馬達所使用的電路)



然而,之前也講過,馬達是可以被當來做發電使用,將轉動的能量透過磁力轉化成電力,越大的馬達在轉動時,越有可能產生電能,會有電流逆流的問題產生,使得我們的控制電路會有短路的可能,所以我們得加上個二極體,讓有可能產生的電力回去給馬達使用。









# 中場練習

利用可變電阻,用Arduino讀取變動值,來控制馬達轉動



更進一步,可以用Serial port來控制
程式檔:SerialMotorSpeed.pde




來看看用馬達做的小東西:








#Sevor motor




伺服馬達跟DC馬達比較不同,DC馬達是供電就不停地轉動,而伺服馬達是透過PWM訊號供給的時間長短來決定,而伺服馬達有分兩種:
(1) 360度不停轉的,會依照PWM時間長短,決定轉動快慢與轉動方向
(2) 定角度的,會依照PWM時間長短,在0~180度角間,精準地控制要擺到那個角度


這裡我們用定角度的,來簡單說明原理:

可以看見,根據你送的時間就可以決定你要轉到那個地方,而這就是伺服馬達誘人的地方,不需太多額外的機構,可以輕鬆處理你想做的效果。

[接線]
喔,這裡得提一下,坊間買得到的伺服馬達會有兩種顏色配對的接線:
(紅.黑.白)~ 對應 V+. GND . 訊號pin
(紅.棕.橘)~ 對應 V+. GND . 訊號pin

理解了,我們就可以來運用一下,把V+.GND先接上,訊號pin接到Arduino pin 9
程式檔:File > Sketchbooks > Example > Library-Servo > Sweep

這個範例的控制細節,Servo.h這個Library都幫你把麻煩的部份處理好了,只需作事先呼叫Servo類別的變數,例如myservo,再attach(pin)指定用那個pin(注意,這個lib只供給9跟10兩個PWM輸出pin的使用),然後作myservo.write(角度),就可以控制啦。

然而,我們課堂使用的servo馬達,這顆GWServo S35/STD 的360度轉的,會有部分電流逆衝的問題,需要增加一顆二極體於pin9->訊號pin之間,讓電流只能由單向通過,來減少板子因逆衝而暫停的可能。




在學習完基本的馬達控制後,可以到flying-pig的網站裡(首頁右下角有個Mechanisms的連結,或直接點上面圖片link過去),裡面整理了各種機構設計的基本觀念,可以用在你的裝置實作上面。

沒有留言: