以下介紹的函式庫可以提供創客們最常用須控制的零件 — Servo 舵機, 用簡單直覺的方式, 用同樣的方式來控制各種 180度與 360度的舵機.
主要功能介紹:
- 轉至指定角度
- 機械性齒輪定位的矯正角度
- 設計專案上機構的限制角度
基本控制概念
- 控制值範圍: 0~ 180, 對180 度型舵機而言是角度值,而360 度型舵機則是速度。
- 180 度型舵機: 90 為中間值, 通常可設為 HOME 位置。小於 90 若為正轉角度值, 反之, 大於 90 為反轉角度值。
- 360 度型舵機: 90 為中間值, 速度為 0, 馬達停止轉動。小於 90 若為正轉, 反之, 大於 90 為反轉。數值離中間值越大速度越快, 反之速度越慢。
安裝函式庫
首先, 必須先上傳函式庫到 MCU 板子上 !
應用範例
將以下程式碼先加入測試程式, 假設名為 test.py 中, 對於控制舵機的訊號線是連到 GPIO 4 腳位, 並引用 myServo 的元件類別:
config = {'pin':4}
import time
from MyKit_Servo import myServo
servo = myServo()
❤️🔥 範例一: 轉至指定角度, 然後定位在中間 90 度
- go(角度, 維持時間): 轉至指定角度, 維持時間預設可略
- attach(腳位): 掛載
- detach(): 卸載舵機, 避免鎖死
def test():
servo.go(30)
time.sleep_ms(1000)
servo.go(150)
time.sleep_ms(1000)
servo.go(90)
time.sleep_ms(1000)
servo.attach(config['pin'])
test()
servo.detach()
❤️🔥 範例二: 修正機械性齒輪定位的矯正角度
因舵機是由電磁的線圈來控制角度, 可能因各廠商出廠的機械性齒輪定位上可能有些許誤差, 而須修正, 例如雖定位至中間 90度, 但實際上卻有偏差。
- diff: 微調的矯正角度
- 在 test.py 中置換為下面的程式碼片段, 試試. 會發現舵機的轉角所在位置會隨 diff 的值而被微調.
config = {'pin':4, 'diff':8}
...
servo.attach(config['pin'])
servo.diff = config['diff']
❤️🔥 範例三: 設計專案上機構的限制角度
雖理論上 180 度的舵機可在 0 ~ 180 度自由轉動, BUT … 例如便宜的塑膠齒輪SG90 舵機可能有下面情形:
- 有極限角度的限制: SG90 容易齒輪咬死而燒毀. 建議限制只在 15 ~ 165 度
- 實際轉角的限制: 因專案機構的設計各有不同, 因此大多未轉到極限角度前, 就與其他機構碰撞到, 因此需要事先避免.
config = {'pin':4, 'diff':-3, 'limit':(40, 140)}
...
servo.attach(config['pin'])
servo.diff = config['diff']
servo.limit = config['limit']
...
- 以上設定, 舵機將掛載於腳位 GPIO 4, 自動矯正齒輪偏差值為 -3度, 並限制 Servo 只能在 40 ~ 140 度間轉動。