MBC Servo6 多路舵機擴充器 × Pybricks 積木

三個步驟用 Pybricks 積木控制 6 顆舵機

積木跟 MicroPython 一樣照這個順序:先在「set up」下面匯入函式庫,再建立物件、幫擴充板取名字,最後在「program」下面用這個名字呼叫功能。左邊一步一步做,右邊的積木會跟著長出來;這些積木圖是直接從 Pybricks Code 拼好匯出的,跟你在畫面上看到的一樣。

先確認:Pybricks 的積木模式要授權碼或 Patreon 贊助才能用。沒有授權可以改寫 MicroPython,寫法一模一樣(右邊切到「對應的 MicroPython」就看得到)。這塊擴充板只能接 SPIKE Prime,主機的 Pybricks 韌體要 v4.0 以上。

1

匯入函式庫

積木程式的第一件事,是在黃色「set up」下面接一塊紅色的「from … import …」積木,告訴 Pybricks 要用 Servo6 的函式庫。

  1. 下載函式庫(存成檔案,檔名不要改):MBC_servo6_Lib.py;檔名是 MBC_servo6_Lib.py。
  2. 在 Pybricks Code 左邊檔案區按「Import a file」,把它匯入同一個專案,檔名不要改。
  3. 按「+」新增檔案,選用積木(blocks)寫。
  4. 從積木清單拖出紅色的「from … import …」,接在「set up」下面,選 MBC_servo6_Lib 和 MBC_SERVO6。
2

建立物件:幫擴充板取名字

再拖一塊紅色的「… is a …」積木接在匯入積木下面:最左邊是你幫擴充板取的名字,後面是主機的孔位和要不要多工。之後每次轉舵機、讀電流,都是選這個名字。

擴充板接在主機哪個孔?

幫它取名字(Pybricks 裡可以取任何英文名字,這裡用三個示範):

要不要開啟多工?(積木上綠色的 true/false)

孔位那格填的是編號:SPIKE 1~6 = A~F,3 就是 C 埠。

第一次執行時電腦畫面會問 Custom electronics may damage your LEGO hub ... Press Y to proceed.:按 Y(只要一次,主機會記住)。這是讓主機從孔位供電給舵機,按 N 舵機不會有電。

3

使用功能

在「program」下面放紅色的功能積木:第一格選名字 servo6,中間選 await,最後一格選功能,後面的數字格第一個是擴充板上的舵機孔 1 ~ 6(CN1 ~ CN6,不是主機的孔位)。點一個功能,積木和輸出會換成它的範例。

模擬擴充板(6 個舵機孔各接一顆舵機):看程式怎麼轉舵臂,也可以用滑鼠拖舵臂

模擬畫面是示意:轉動速度、電流大小都簡化過,實際數字看舵機型號。1 號、3 ~ 6 號是一般 180 度舵機,2 號是 360 度連續旋轉舵機。舵臂橘色 = 有出力、灰色 = 放鬆、紅色 = 判定卡住。有出力時拖它,舵機會頂住、電流變大,放開會轉回去;放鬆時拖到哪就停在哪。

每個功能的積木範例

15 個功能,每個都有一組可以照著拼的積木(名字 servo6、多工 true)。按「試試看」會切到第 3 步,右邊的積木和輸出會換成這個範例,模擬擴充板也會照著跑。

使用注意

  1. 函式庫檔要先匯入專案。沒有匯入 MBC_servo6_Lib.py,紅色積木裡選不到 MBC_SERVO6。
  2. await 和 call 要跟多工一致:多工 true 就選 await,多工 false 就選 call。混著用,程式會在主機上出錯。
  3. 積木背後就是 MicroPython。Pybricks Code 右邊的程式窗格就是積木產生的程式,跟這頁「對應的 MicroPython」一樣(多工版會多一行 await wait(0),是 Pybricks 自動加的)。
  4. 拔線不會讓程式停:擴充板讀不到時,讀值的功能回傳 0 或 False,轉舵機的指令會被略過,電腦畫面會印 [SERVO6] … 連線中斷、「未偵測到擴充板」;插回去自動重新連線。只送指令、不讀值的程式也會自動重新連線並重送設定;拔線時 servo_wait 約 0.4 秒就往下,不會卡住。
  5. 舵機卡住、被自動放鬆之後,迴圈一直送同一個角度不會重新出力(擴充板會略過跟上一包一模一樣的指令):要送一個不同的角度,或先 servo_release 再送。程式停下來時,積木版不會自動放鬆舵機(擴充板沒有看門狗,舵機停在最後的角度),要放鬆就在程式最後放一塊 stop_all。