MicroPython 如此簡單: 伺服馬達(Servo)

Yungger
4 min readNov 21, 2023

以下介紹的函式庫可以提供創客們最常用須控制的零件 — Servo 舵機, 用簡單直覺的方式, 用同樣的方式來控制各種 180度與 360度的舵機.

主要功能介紹:

  1. 轉至指定角度
  2. 機械性齒輪定位的矯正角度
  3. 設計專案上機構的限制角度

基本控制概念

  • 控制值範圍: 0~ 180, 對180 度型舵機而言是角度值,而360 度型舵機則是速度。
  • 180 度型舵機: 90 為中間值, 通常可設為 HOME 位置。小於 90 若為正轉角度值, 反之, 大於 90 為反轉角度值。
  • 360 度型舵機: 90 為中間值, 速度為 0, 馬達停止轉動。小於 90 若為正轉, 反之, 大於 90 為反轉。數值離中間值越大速度越快, 反之速度越慢。

安裝函式庫

首先, 必須先上傳函式庫到 MCU 板子上 !

應用範例

將以下程式碼先加入測試程式, 假設名為 test.py 中, 對於控制舵機的訊號線是連到 GPIO 4 腳位, 並引用 myServo 的元件類別:

config = {'pin':4} 

from MyKit_Servo import myServo
servo = myServo()

❤️‍🔥 範例一: 轉至指定角度, 然後定位在中間 90 度

  • go(角度, 維持時間): 轉至指定角度, 維持時間預設可略
  • attach(腳位): 掛載
  • detach(): 卸載舵機, 避免鎖死
def test():
servo.go(60, 1000)
servo.go(120, 1000)
servo.go(90, 1000)

servo.attach(config['pin'])
test()
servo.detach()

❤️‍🔥 範例二: 修正機械性齒輪定位的矯正角度

因舵機是由電磁的線圈來控制角度, 可能因各廠商出廠的機械性齒輪定位上可能有些許誤差, 而須修正, 例如雖定位至中間 90度, 但實際上卻有偏差。

  • diff: 微調的矯正角度
  • 在 test.py 中置換為下面的程式碼片段, 試試. 會發現舵機的轉角所在位置會隨 diff 的值而被微調.
config = {'pin':4, 'diff':8}
servo = myServo(diff=config['diff'])
servo.attach(config['pin'])

❤️‍🔥 範例三: 設計專案上機構的限制角度

雖理論上 180 度的舵機可在 0 ~ 180 度自由轉動, BUT … 例如便宜的塑膠齒輪SG90 舵機。

  • 有極限角度的限制: SG90 容易齒輪咬死而燒毀. 建議限制只在 15 ~ 165 度
  • 實際轉角的限制: 因專案機構的設計各有不同, 因此大多未轉到極限角度前, 就與其他機構碰撞到, 因此需要事先避免.
config = {'pin':4, 'diff':-3, 'limit':(40, 140)} 
servo = myServo(diff=config['diff'], limit=config['limit'])

...

servo.attach(config['pin'])
test()
servo.detach() # 卸載舵機, 避免鎖死
  • 以上設定, 舵機將掛載於腳位 GPIO 4, 自動矯正齒輪偏差值為 -3度, 並限制 Servo 只能在 40 ~ 130 度間轉動。

😎 有了 MyKit_Servo 控制舵機, 是不是直覺又簡單, 變得不再困難呢 ?

若覺得此文真對您有幫助, 點點左上方的拍手圖示, 鼓勵一下。若還想 請喝杯咖啡 鼓勵一下勇哥的繼續創作, 也感謝 😘 😘 !!

Yungger 勇哥

Maker & Freelancer

--

--