MBC EXP6 六路馬達擴充器 × LEGO MINDSTORMS Robot Inventor

三個步驟用 Robot Inventor App 的 Python 控制 EXP6

在 Robot Inventor App 寫 Python 一定照這個順序:先匯入函式庫,再建立物件、幫 EXP6 取名字,最後才用這個名字去呼叫功能(轉馬達、讀感應器)。左邊一步一步做,右邊的程式會跟著長出來;在模擬 EXP6 上選每個擴充孔接什麼,就能看到馬達怎麼轉、程式會印出什麼。

你的主機:LEGO MINDSTORMS Robot Inventor(51515,玩具版),用 Robot Inventor App 10.x 的 Python(App 的積木不能用這個函式庫)。EXP6 韌體要 2026-11-03 以後,要接上自己的電池,馬達才會動。用 SPIKE Prime 的請看官方 SPIKE App 版。
1

匯入函式庫

Robot Inventor App 不能像 Pybricks 那樣匯入檔案,所以要先把 EXP6 的函式庫裝進主機一次(裝在主機的 /projects/mbc_exp6/,關機不會不見),之後每個 Python 專案最上面寫三行匯入就能用。沒有匯入,後面寫的 MBC_EXP6 主機看不懂,會出現 ImportError 或 NameError。

  1. 下載 MBC_EXP6_Robot_Inventor_Lib.zip(安裝程式、移除程式、10 支範例)。安裝程式是裡面的 Install_MBC_exp6_Lib.py,裝進主機的函式庫叫 MBC_exp6_SPIKE_App_Lib。
  2. 主機開機,在 Robot Inventor App 連上主機:USB 線或藍牙都可以(建議 USB 線,比較穩)。
  3. 新開一個 Python 專案,把 Install_MBC_exp6_Lib.py 整份貼上,按執行。約 6 秒後主控台印出「安裝成功! (Installed OK)」(前面會列出 3 個檔都 OK)就裝好了。
  4. 只要裝一次;主機更新韌體之後函式庫會被清掉,要再裝一次。不要了就執行下載包裡的 Uninstall_MBC_exp6_Lib.py(印出「移除完成!」)。
  5. 新增一個 Python 專案,在最上面寫下面這三行(右邊程式標 ① 的地方)。

第一次裝?一步一步的版本:玩具版安裝教學。安裝用 USB 線或藍牙都可以,建議 USB 線。

跟官方 SPIKE App(教育版)只差匯入那一行:教育版寫 from MBC_exp6_SPIKE_App_Lib import MBC_EXP6,Robot Inventor 寫 from projects.mbc_exp6.MBC_exp6_SPIKE_App_Lib import MBC_EXP6。

2

建立物件:幫 EXP6 取名字

要「建立一個物件」:告訴程式 EXP6 的 Host 線插在主機哪個孔,並幫它取個名字。之後要轉馬達、讀感應器,都是叫這個名字。Robot Inventor 版沒有多工,程式一行一行往下跑,等待用 time.sleep();不用寫心跳,函式庫在背景自動處理。

EXP6 的 Host 線插在主機哪個孔?

程式裡的 port.C 是主機的孔:port.A~port.F(Robot Inventor App 寫字母,也可以寫成 'C';Pybricks 才寫數字 3)。後面功能括號裡的第一個數字,才是 EXP6 上的擴充孔 1~6,兩個不要搞混。

3

使用功能

寫法都是「exp6.功能名稱(擴充孔, …)」:名字+小數點+功能,括號裡第一個數字通常是 EXP6 上的擴充孔 1~6。點一個功能,程式和輸出會換成它的範例,模擬 EXP6 的馬達也會照著動。

模擬 EXP6(從上面看):選每個擴充孔接什麼,看馬達怎麼轉、右邊印出什麼

一開始孔 1、2 接馬達,孔 4 顏色、孔 5 超音波、孔 6 力量感應器,跟範例程式用的孔一樣。模擬畫面是示意:馬達速度 1% 當成每秒 10 度(實際要看馬達型號),感應器的數值也簡化過;紅色指針是轉軸的朝向,↻ = 順時針。程式結束後馬達會自己停:程式跑完(或按停止)時馬達還在轉,約 10 秒內會自動停(模擬器也照這樣);要馬上停就在最後寫 exp6.stop_all(1)。顏色照這個函式庫用紅綠藍換算(綠色是 5、看不到顏色是 0,跟 Pybricks 版不一樣);超音波看不到東西讀到 -1。

每個功能的範例

33 個功能(跟官方 SPIKE App 版一樣;Pybricks 版的 connected、run_task 這裡沒有),每個都有一段範例。轉馬達、停止這類動作多半放在迴圈外只做一次;讀值放進迴圈一直讀。按「試試看」會切到第 3 步,右邊的程式和輸出會換成這個範例。

完整範例

兩輪小車走正方形(左輪孔 1、右輪孔 2)

        

!只改最上面「要改的地方」就好。轉不到 90 度:把 TURN 改大一點;轉太多:改小。邊太長或太短:改 SIDE(720 度大約 35 公分)。車子往後退:把 set_motor_inverted(1, True) 的 1 改成 2。

已經寫好的 10 支 Robot Inventor 範例(.py,都在主機上跑過)
  1. 01_Motor_Basic.py:馬達轉速、正反轉、停止
  2. 02_Motor_Advanced.py:編碼器角度、走角度、絕對角度
  3. 03_Drive_Base.py:雙馬達底盤(前進、轉彎)
  4. 04_Sensor_Distance_Force.py:樂高距離、力量感應器
  5. 05_Sensor_Color_Pro.py:樂高顏色感應器:顏色碼、反射、RGB、HSV
  6. 06_System_Misc.py:電壓、裝置碼、底層原始值
  7. 07_Motor_Inverted.py:馬達正裝/反裝
  8. 08_Stop_Modes.py:4 種停止方式比較
  9. 09_MBC_Sensors.py:MBC 感應器:循行者、測距者 2 路、PS4 手把、神攝手
  10. 10_MBC_Commands.py:對 8 路循行者下命令:改門檻、失敗、拒絕、還原

!先裝好函式庫,再把範例整份貼進 Robot Inventor App 的 Python 專案執行。範例裡 EXP6 插主機 F 孔、馬達接 EXP6 的 1/2 號孔;09、10 的 MBC 感應器插 EXP6 的 2 號孔。範例的提示文字是中文。全部也在 MBC_EXP6_Robot_Inventor_Lib.zip。

MBC 感應器插在 EXP6(循行者、測距者、掌控者、神攝手)

主機的孔不夠用時,MBC 感應器可以直接插在 EXP6 的 1~6 號孔,跟插在主機上一樣,插上就能用、不用另外設定。EXP6 韌體要 2026-11-03 以後。Robot Inventor 版也一樣,裝好上面那一個函式庫就有 MBC 感應器,不用另外匯入產品檔;第一次用到某一類感應器時,主機會多花約 1 秒載入那部分的函式庫。跟上面一樣三步:選感應器、選它插在 EXP6 的幾號孔、選功能,右邊的程式會跟著換。

1

匯入

插在 EXP6 上的是哪一款?

Robot Inventor 版的函式庫 MBC_exp6_SPIKE_App_Lib 已經包含 MBC 感應器,裝進主機一次之後,每個專案寫上面三行就好(from hub import port、import time、from projects.mbc_exp6.MBC_exp6_SPIKE_App_Lib import MBC_EXP6)。

    2

    建立物件:先 EXP6,再感應器

    感應器插在 EXP6 的幾號孔?

    3

    使用功能:名稱跟直插主機一樣

    對 MBC 感應器下命令:cmd()、wait_done()、cmd_state()

    循行者 8 路:改二值化門檻(E4)

    除了讀值,也可以透過 EXP6 對 MBC 感應器下命令,命令碼和參數跟感應器直接插主機時一樣(循行者 8 路見指令參考)。cmd(命令碼, 參數…):命令碼 0xE0~0xEE、參數最多 5 個(-9999~9999),回傳序號;同一個命令、同樣參數預設不重送,要重做加 again=True。wait_done():等做完,True 完成,False 是失敗、拒絕或逾時(預設等 10 秒);cmd_state():0 完成、1 執行中、2 失敗(參數不對)、3 拒絕(這款沒有這個命令);busy():還沒做完是 True。每個命令從送出到收到結果約 0.1~0.2 秒。

    from hub import port
    import time
    from projects.mbc_exp6.MBC_exp6_SPIKE_App_Lib import MBC_EXP6
    
    exp6 = MBC_EXP6(port.C)
    line8 = exp6.line8(5)          # 循行者 8 路插在 EXP6 的 5 號孔
    
    seq = line8.cmd(0xE4, 60)      # 二值化門檻改成 60(1~99,重開機回到 50)
    if line8.wait_done():          # 等感應器做完:True 完成
        print("門檻改好了,序號", seq)
    else:
        print("沒成功,狀態", line8.cmd_state())   # 2 失敗、3 拒絕
    print("黑白:", line8.bin_raw())
    line8.cmd(0xE4, 50)            # 改回預設 50
    line8.wait_done()

    !黑白校準 E2/E3、5 秒校準 E7 會寫進感應器,練習時不要亂送;E4、E9 重開機就回到預設。目前只有 8 路循行者實測過下命令。改失敗、拒絕的例子在範例 10(10_MBC_Commands.py)。

    使用注意

    1. EXP6 會鎖在 Robot Inventor 的通訊方式,直到拔掉 EXP6 電池。程式第一次建立 MBC_EXP6 之後,EXP6 就一直用這個方式溝通,這段時間 App 的裝置頁看不到 EXP6。要換回 SPIKE Prime 主機用,或讓 App 認得它,先拔掉 EXP6 電池再插回。
    2. 不用寫心跳。函式庫在背景自動處理。
    3. 程式結束後約 10 秒,馬達會自己停。要讓馬達轉超過 10 秒、中間又不呼叫任何函式,用 exp6.keep_alive_wait(毫秒) 等,例如 exp6.keep_alive_wait(15000)。
    4. 一定要接 EXP6 的電池,兩種孔不要搞混。MBC_EXP6(port.C) 的 port.C 是主機的孔;exp6.motor_run(1, 50) 的 1 是 EXP6 上的擴充孔。轉角度送出就往下做,不會等轉完,後面要等一下或一直讀角度。
    5. 出問題時:ImportError → 還沒安裝(或更新韌體被清掉),或匯入那行寫成教育版的;印出「讀不到擴充板資料」→ MBC_EXP6(port.X) 的孔寫錯或 EXP6 沒電;安裝時主機自己關機 → 改用 USB 線再裝;MemoryError → 程式太大,拆小、重開主機(核心約 26 KB,MBC 感應器最多再 19 KB,App 可用約 98 KB,剩約 37 KB 給你的程式)。