樹莓派有一組40pin的輸出入接腳可以用來控制外部的電路,當然對於伺服器的控制也不成問題,只不過,它使用的是模擬PWM的方式進行輸出,所以在控制上比較沒那麼精準,但是就一般的使用上,還算是可用啦。這篇文章就讓我們來看看如何簡單地控制SG-90這個輕巧的伺服馬達。
由於樹莓派在輸出PWM控制伺服馬達時並沒有直接使用角度作為參數的函式可用,所以要把PWM的頻率直接換算成旋轉角度時有一些需要計算的地方,這部份已有其他熱心的老師提供了詳細的說明,有興趣的同學們可以直接前往以下這篇文章參考:
我們在這裡的程式碼的主要換算函式即是出自上述部落格的內容,在此特別聲明。繼續練習以下的程式,請依照前文的說明,把SG-90的3條線(中間的VCC、棕色的GND、橘黃色的信號線)分別接到樹莓派上的5V、GND、以及第11支接腳上。此外,如果還沒有安裝過RPi.GPIO模組的話,也請利用以下的指令安裝:
$ pip install RPi.GPIO
安裝完畢之後,即可編輯以下的程式進行伺服馬達的驅動測試:
import time
CONTROL_PIN = 17
PWM_FREQ = 50
STEP=15
GPIO.setmode(GPIO.BCM)
GPIO.setup(CONTROL_PIN, GPIO.OUT)
pwm = GPIO.PWM(CONTROL_PIN, PWM_FREQ)
pwm.start(0)
def angle_to_duty_cycle(angle=0):
duty_cycle = (0.05 * PWM_FREQ) + (0.19 * PWM_FREQ * angle / 180)
return duty_cycle
def switch2deg(deg):
dc = angle_to_duty_cycle(deg)
pwm.ChangeDutyCycle(dc)
degrees = [45, 90, 135, 90]
for i in range(5):
for deg in degrees:
switch2deg(deg)
time.sleep(0.5)
pwm.stop()
GPIO.cleanup()
本程式執行時,伺服馬達會在45、90、135之間來回轉動,5遍之後隨即結束程式的執行。