MBC EXP6 六路馬達擴充器(適用 SPIKE™) × SPIKE × 樂高官方 App

互動教學SPIKE

第一次用?先跟著互動教學在網頁上做一遍,再照下面的步驟接主機。

這一頁只講 樂高官方 App(SPIKE 3、Robot Inventor):在 SPIKE Prime/Robot Inventor 上用它讀MBC EXP6 六路馬達擴充器(適用 SPIKE™)的安裝步驟、每個值怎麼讀與範例。要換產品、主機或軟體,用上方的切換列。

安裝與設定

你需要

  • 感應器:MBC EXP6 六路馬達擴充器(適用 SPIKE™)(SPIKE 版)。每個平台是不同的出廠版本,EV3 版插在 SPIKE 上不會被認出來。
  • 主機:SPIKE Prime(教育版,黃色主機)或 Robot Inventor(家用版,藍綠色主機)。
  • 連接線:產品內附的標準連接線,或樂高原廠線。
  • 軟體:教育版用 LEGO Education SPIKE App(本站範例是 SPIKE 3);家用版用 LEGO MINDSTORMS Robot Inventor App。
  • 主機韌體:樂高原廠韌體就好,不用換 Pybricks。

安裝軟體

  1. 教育版:到 LEGO Education 下載頁 安裝 SPIKE App。
  2. 家用版:安裝 LEGO MINDSTORMS Robot Inventor App。
  3. 主機如果刷過 Pybricks,先用 SPIKE App 換回樂高原廠韌體,官方 App 才連得上。

注意

教育版和家用版的讀法不一樣:家用版 App 有些積木的數值被限制在 0 ~ 126,「顏色」最大只到 10。下面的讀值以你用的那一版為準。

讓軟體認得感應器

不用裝擴充、不用裝驅動程式。感應器插上主機,官方 App 會把它當成樂高原廠感應器(多數產品是 SPIKE 顏色感應器),直接拉那個感應器的積木就能讀。

  • 官方積木一次只拿一個數,產品的資料被編碼塞在「顏色」「反射光」「原始紅/綠/藍」這幾格裡,每一格代表什麼看下面的讀值。
  • 打開範例檔:下載 .llsp3(家用版是 .lms)→ 打開 App → 左上「檔案」→「開啟」→ 選檔案。

接線

  1. 用連接線把感應器插在主機的 A 孔(A~F 任一孔都可以,程式裡選同一個孔)。
  2. 接頭有方向性,卡榫朝上,輕輕推進去就好,不要用力硬插。
  3. 主機開機後,感應器上的燈會亮起來。

接線與供電

  1. 主機通訊線:把擴充器的 Host 通訊線插進 SPIKE 主機任一孔(Port A~F)。
  2. 獨立電源:擴充器一定要接 2S 鋰電池(7.4 V,充飽 8.4 V,XT30 接頭),馬達和樂高感應器都靠它供電;馬達電流不會從主機抽,主機訊號線也經過隔離晶片。不要接 3S 以上:超過 9 V 時,EXP6 會停止供電給樂高顏色/超音波感應器。
  3. 接裝置:樂高感應器(顏色、超音波、力量)與馬達,任意接在擴充器的 1~6 號孔。

警告

EXP6 支援 SPIKE Prime,也支援 Robot Inventor(51515)的 Robot Inventor App Python(見本頁最後的「Robot Inventor(玩具版 51515)」);不支援 EV3。換另一種寫法之前,先讓 EXP6 斷電一次(關主機或拔掉 Host 線):EXP6 一旦跑過 Pybricks 程式,就會一直用 Pybricks 的方式溝通,直到重新開機,這時候官方 App 會連不上。

安裝 EXP6 函式庫(只要做一次)

第一次裝、想看一步一步的版本:教育版安裝教學

官方 App 沒有 EXP6 的積木,只能用 Python 文字模式(SPIKE 3;函式庫標示適用 3.4.3 版)。函式庫用純 Python 寫,不支援多工(async),所有指令都是同步(Sync)執行。

  1. 下載 官方 App 函式庫+範例(.zip)。EXP6 韌體要 2026-11-03 以後。函式說明在包裡的 EXP6_Library_Manual.pdf。
  2. 把下載包 SPIKE_Education 資料夾裡的安裝腳本(Install_MBC_exp6_Lib.py)內容貼進 SPIKE App 的 Python 專案,執行一次。腳本會把核心函式庫寫進主機。
  3. 安裝成功後,任何新專案都能直接 from MBC_exp6_SPIKE_App_Lib import MBC_EXP6,不用再貼一長串原始碼。
  4. 不再需要時,執行下載包裡的解除安裝腳本(Uninstall_MBC_exp6_Lib.py),就能把函式庫從主機乾淨移除。

在 SPIKE App 執行安裝腳本

建立連線物件

假設 EXP6 接在主機的 Port F:

from hub import port
import time
from MBC_exp6_SPIKE_App_Lib import MBC_EXP6

exp6 = MBC_EXP6(port.F)   # 擴充器接在主機的 Port F
time.sleep(1)             # 等 1 秒讓擴充器就緒

exp6.motor_power(1, 50)
time.sleep(3)
exp6.stop_all(1)          # 程式結束前一定要讓所有馬達停止(1 = 滑行)

重要

官方 App 沒有看門狗:程式當掉或主機斷線時,馬達會一直維持最後一道指令。程式最後一定要寫 exp6.stop_all(1);等待直接用 time.sleep(),不需要心跳指令。

MBC 感應器插在 EXP6 上、對感應器下命令

MBC 感應器(循行者、測距者、掌控者、神攝手)直接插在 EXP6 的 1~6 號孔就能用,函式庫裡已經有:

line8 = exp6.line8(2)            # 8 路循行者插在 EXP6 的 2 號孔
print(line8.pos100())            # -100 ~ +100
seq = line8.cmd(0xE4, 60)        # 下命令:命令碼 0xE0~0xEE+參數最多 5 個(-9999~9999),回傳序號
ok = line8.wait_done()           # True 完成;False 失敗/拒絕/逾時(預設 10 秒)
state = line8.cmd_state()        # 0 完成、1 執行中、2 失敗(參數不對)、3 拒絕(這款沒有這個命令)
line8.busy()                     # 還沒做完 = True
line8.cmd(0xE4, 60, again=True)  # 同命令同參數預設不重送;要重做加 again=True
  • 可用:line8 line16 laser2 laser8 ps2 ps4 unicam(孔, mode)(神攝手 mode 要跟相機選單一樣)。
  • 命令碼跟感應器直接插主機時一樣(循行者 8 路見 指令參考);每個命令送出到收到結果約 0.1~0.2 秒。目前只有 8 路循行者實測過下命令(2026-11-05 教育版、Robot Inventor 都通過)。
  • 黑白校準 E2/E3、5 秒校準 E7 會寫進感應器,練習時不要亂送;E4(門檻)、E9 重開機就回到預設。
  • 完整示範是下載包裡的範例 10(examples/10_MBC_Commands.py:門檻改 60 → 參數錯誤「失敗」→ 沒有的命令「拒絕」→ 改回 50);EXP6 插 F 孔、循行者插 EXP6 的 2 號孔。
  • 安裝程式 11-05 瘦身成 46.5 KB(貼上更快,用法不變);函式庫常駐約 38 KB,主機還有約 130 KB 給你的程式。

Robot Inventor(玩具版 51515)

EXP6 也可以接 LEGO MINDSTORMS Robot Inventor(51515)主機,用 Robot Inventor App 10.x 的 Python 控制 6 顆樂高馬達、樂高顏色/距離/力量感應器和 MBC 感應器;函式名稱、用法跟上面的教育版完全一樣(Hub OS 3.4.0 上機測過)。Robot Inventor App 的積木不能用這個函式庫。

先在網頁上點一遍:Robot Inventor App 互動教學

安裝函式庫(只做一次) 👉 一步一步的版本:玩具版安裝教學

  1. 下載 Robot Inventor 函式庫+範例(.zip)(安裝程式、移除程式、10 支範例、函式庫原始碼)。EXP6 韌體要 2026-11-03 以後。
  2. 主機開機,在 Robot Inventor App 連上主機:USB 線或藍牙都可以(建議 USB 線,比較穩)。
  3. 新開一個 Python 專案,把 Install_MBC_exp6_Lib.py 整份貼上,按執行。約 6 秒後主控台印出 安裝成功! (Installed OK)(前面會列出 3 個檔都 OK)。
  4. 函式庫裝在主機的 /projects/mbc_exp6/,關機不會不見;主機韌體更新後要再裝一次。不要了就執行 Uninstall_MBC_exp6_Lib.py(印出「移除完成!」)。

寫程式:只有匯入那一行跟教育版不同

from hub import port
import time
from projects.mbc_exp6.MBC_exp6_SPIKE_App_Lib import MBC_EXP6   # 教育版是 from MBC_exp6_SPIKE_App_Lib import MBC_EXP6

exp = MBC_EXP6(port.F)      # EXP6 插在主機的 F 孔(也可以寫 'F')
exp.motor_run(1, 50)        # 1 號孔馬達以 50% 速度轉
time.sleep(2)
exp.motor_stop(1, "brake")  # 停止:coast 滑行、brake 煞車、hold 鎖住、continue 不動作

MBC 感應器的寫法也一樣:line8 = exp.line8(2)(8 路循行者插 EXP6 的 2 號孔)、print(line8.pos100());可用 line8 line16 laser2 laser8 ps2 ps4 unicam(孔, mode)。感應器直接插上就能用;第一次用某一類感應器時主機會多花約 1 秒載入。下命令(cmd()、wait_done()、cmd_state())也跟上面教育版一樣。

重要

跟教育版不一樣的 3 件事

  1. EXP6 會鎖在 Robot Inventor 的通訊方式,直到拔掉 EXP6 電池:程式第一次建立 MBC_EXP6 之後,App 的裝置頁就看不到 EXP6;要換回 SPIKE Prime 主機或讓 App 認得它,先拔電池重開 EXP6。
  2. 不用寫心跳:函式庫在背景自動處理。
  3. 程式結束後馬達會自己停:程式結束時馬達還在轉,約 10 秒內會自動停。要讓馬達轉超過 10 秒、中間又不呼叫任何函式,用 exp.keep_alive_wait(毫秒) 等,例如 exp.keep_alive_wait(15000)。

10 支範例(都在主機上跑過;EXP6 插主機 F 孔、馬達接 EXP6 的 1/2 號孔)

範例 內容
01_Motor_Basic 馬達轉速、正反轉、停止
02_Motor_Advanced 編碼器角度、走角度、絕對角度
03_Drive_Base 雙馬達底盤(前進、轉彎)
04_Sensor_Distance_Force 樂高距離、力量感應器
05_Sensor_Color_Pro 樂高顏色感應器:顏色碼、反射、RGB、HSV
06_System_Misc 電壓、裝置碼、底層原始值
07_Motor_Inverted 馬達正裝/反裝
08_Stop_Modes 4 種停止方式比較
09_MBC_Sensors 循行者、測距者 2 路、PS4 手把、神攝手(感應器插 EXP6 的 2 號孔)
10_MBC_Commands 對 8 路循行者下命令:改門檻、失敗、拒絕、還原

常見問題

狀況 原因 怎麼辦
ImportError: no module named 'projects.mbc_exp6…' 還沒安裝,或主機韌體更新後被清掉 再跑一次安裝程式
ImportError,匯入那行是 from MBC_exp6_SPIKE_App_Lib import … 用了教育版的寫法 改成 from projects.mbc_exp6.MBC_exp6_SPIKE_App_Lib import …
印出「讀不到擴充板資料(請確認 EXP6 接在這個孔且已開電)」 孔位寫錯、EXP6 沒電 檢查 MBC_EXP6(port.X) 跟實際插的孔、EXP6 電池
App 裝置頁看不到 EXP6 EXP6 已在 Robot Inventor 的通訊方式 拔 EXP6 電池再插回
馬達跑一陣子自己停了 超過 10 秒沒呼叫函式庫 用 exp.keep_alive_wait(毫秒) 等
安裝時主機自己關機 傳輸中斷 改用 USB 線再裝一次
MemoryError 程式太大,又用了很多種 MBC 感應器(核心約 26 KB,MBC 感應器最多再 19 KB;App 可用約 98 KB,全部載入後約剩 37 KB) 把程式拆小、重開主機
MBC 感應器讀到亂碼(例如手把一直「按下」很多鍵) 宣告的型號跟實際插的不一樣 宣告要跟實際插的感應器一樣

SPIKE Prime 舊版 App 2.x 還沒測過,請用教育版 SPIKE 3 或 Robot Inventor App。

第一次測試

  1. 主機用 USB 或藍牙連上 App。
  2. 打開本頁的範例 1,按執行。
  3. 用手或場地移動感應器前方的東西,數字跟著變就是接好了。

常見問題

  • 插上去沒反應? 依序檢查:連接線兩端插緊 → 換主機的另一個孔 → 換一條線 → 換另一台主機測試。
  • 不同 App 讀到的數值不一樣? 教育版(黃色主機)和家用版(藍綠色主機)的回傳格式不同,請確認你用的是哪一版,再看對應的讀值。
  • 需要轉接板或驅動程式嗎? 不需要。接頭和通訊協議跟樂高主機孔位相同,插上就會自動辨識。
  • 範例 6 在官方 App 打不開? 標「只有 Pybricks 版」的範例,用的是 2026-10 以後韌體的新模式,官方 App 的積木讀不到。

範例

範例 1:一顆馬達轉一圈

這個範例會做什麼:擴充孔 1 的馬達轉一圈(360 度),螢幕顯示角度;再反方向轉一圈回到原位,螢幕顯示 0 左右。

要準備什麼

  • SPIKE 主機 1 台、EXP6 1 片(接好電池)
  • 樂高馬達 1 顆

怎麼接:EXP6 Host 線 → 主機 C 孔;馬達 → EXP6 擴充孔 1。

下載程式

樂高官方 App
ex01_one_turn.llsp3
🟨 樂高官方 App 的程式(Python)
# EXP6 範例 1:一顆馬達轉一圈再轉回來(官方 SPIKE App・Python)
# 接線:EXP6 的 Host 線 → 主機 C 孔;馬達 → EXP6 擴充孔 1;EXP6 接上電池
# 第一次用:先執行一次 install_exp6_lib.llsp3,把函式庫裝進主機
from hub import port, light_matrix
import time
from MBC_exp6_SPIKE_App_Lib import MBC_EXP6

exp6 = MBC_EXP6(port.C)      # EXP6 接在主機 C 孔
time.sleep(2)                # 等 2 秒,讓擴充孔上的馬達準備好(太早下指令會被忽略)

exp6.motor_run_degrees(1, 50, 360, 2)    # 擴充孔 1:速度 50%,轉 360 度(一圈),到了就煞車(2)
time.sleep(1.5)                          # 等它轉完(還沒轉完就送下一個轉角度指令,會被丟掉)
light_matrix.write(str(exp6.get_motor_angle(1)))   # 螢幕顯示現在的角度(大約 360)
time.sleep(2)

exp6.motor_run_degrees(1, 50, -360, 2)   # 角度寫負的 = 反方向轉一圈,回到原來的位置
time.sleep(1.5)
light_matrix.write(str(exp6.get_motor_angle(1)))   # 大約 0
time.sleep(2)

exp6.stop_all(1)             # 最後一定要全部停止(1 = 滑行)

一步一步看懂程式

  1. 連上 EXP6:告訴主機 EXP6 接在 C 孔。官方 App 寫 port.C;Pybricks 寫 3(1=A、2=B、3=C…);MBC 積木網站是「C 接 MBC EXP6六路馬達擴充」積木。
  2. 等馬達準備好(規則 ①)。
  3. 轉 360 度:「擴充孔 1,速度 50,轉 360 度,到位後煞車」。
  4. 等 1.5 秒讓它轉完(規則 ②),再把角度顯示在螢幕上。
  5. 轉 -360 度:角度寫負的=反方向,回到原來的位置。
  6. 全部停止(規則 ③)。

跑起來應該看到什麼:馬達轉一圈停住,螢幕顯示 360 左右;過 2 秒反轉一圈回來,螢幕顯示 0 左右(差幾度是正常的)。

常見問題

  • 馬達完全不動? → ① 電池有沒有接、有沒有電;② 馬達是不是插在 1 號孔;③ Host 線是不是插主機 C 孔。
  • 只轉了第一圈,第二圈沒轉? → 中間等待太短,第一圈還沒轉完。把「等 1.5 秒」改長一點。
  • 想反方向轉? → 把角度改成負的。官方 App 的函式庫只看角度的正負,速度寫負的沒有用;為了三種寫法結果一樣,這頁的速度一律寫正的。

範例 2:三顆馬達一起轉

這個範例會做什麼:3 顆馬達同時用不同速度轉 3 秒(慢、中、快),再一起反轉 3 秒,最後全部煞車、嗶一聲。

要準備什麼:範例 1 的東西,馬達改成 3 顆。

怎麼接:EXP6 Host 線 → 主機 C 孔;馬達 → EXP6 擴充孔 1、2、3。

下載程式

樂高官方 App
ex02_three_motors.llsp3
🟨 樂高官方 App 的程式(Python)
# EXP6 範例 2:三顆馬達一起轉(官方 SPIKE App・Python)
# 接線:EXP6 的 Host 線 → 主機 C 孔;馬達 → EXP6 擴充孔 1、2、3;EXP6 接上電池
from hub import port, sound
import time
from MBC_exp6_SPIKE_App_Lib import MBC_EXP6

exp6 = MBC_EXP6(port.C)
time.sleep(2)                # 等馬達準備好

exp6.motor_run(1, 30)        # 擴充孔 1:速度 30%(慢)
exp6.motor_run(2, 50)        # 擴充孔 2:速度 50%
exp6.motor_run(3, 70)        # 擴充孔 3:速度 70%(快)
time.sleep(3)                # 一起轉 3 秒

exp6.motor_run(1, -30)       # 速度寫負的 = 反轉
exp6.motor_run(2, -50)
exp6.motor_run(3, -70)
time.sleep(3)

exp6.stop_all(2)             # 全部停止(2 = 煞車,馬上停)
sound.beep(880, 200)

一步一步看懂程式

  1. 等 3 顆馬達都準備好:MBC 積木網站和 Pybricks 一顆一顆檢查「裝置代碼 = 5」。
  2. 持續轉:「擴充孔 1 速度 30」「擴充孔 2 速度 50」「擴充孔 3 速度 70」。持續轉的指令送出後馬達會一直轉,程式直接往下做,所以 3 顆幾乎同時開始。
  3. 等 3 秒。
  4. 速度改成負的 → 3 顆一起反轉,再等 3 秒。
  5. 全部停止,2 = 煞車,最後嗶一聲。

跑起來應該看到什麼:3 顆馬達一慢、一中、一快一起轉,3 秒後一起反過來轉,再 3 秒全部停住、主機嗶一聲。

常見問題

  • 有一顆不會轉? → 那一顆的號碼插錯孔,或沒插緊。把它換到別的孔試試,就知道是馬達還是孔的問題。
  • 速度 100 很快、很用力? → EXP6 直接用電池的電推馬達,速度太快、裝在機構上容易撞壞,先用 50 以下。

範例 3:光控開關(顏色感應器控制馬達)

這個範例會做什麼:顏色感應器前面放一張白紙(亮)→ 馬達轉、主機燈變綠;拿開(暗)→ 馬達停、燈變紅。左右鍵一起按住就結束。

要準備什麼

  • 範例 1 的東西,再加上
  • SPIKE 顏色感應器 1 個、白紙 1 張

怎麼接:EXP6 Host 線 → 主機 C 孔;馬達 → 擴充孔 1;顏色感應器 → 擴充孔 4。

下載程式

樂高官方 App
ex03_light_switch.llsp3
🟨 樂高官方 App 的程式(Python)
# EXP6 範例 3:光控開關(官方 SPIKE App・Python)
# 感應器前面亮(放一張白紙)→ 馬達轉、主機燈變綠;暗 → 馬達停、燈變紅
# 接線:EXP6 的 Host 線 → 主機 C 孔;馬達 → 擴充孔 1;顏色感應器 → 擴充孔 4;EXP6 接上電池
from hub import port, button, light
import color
import time
from MBC_exp6_SPIKE_App_Lib import MBC_EXP6

exp6 = MBC_EXP6(port.C)
time.sleep(2)

while not (button.pressed(button.LEFT) and button.pressed(button.RIGHT)):   # 左右鍵一起按住 → 結束
    bright = exp6.get_color_reflection(4)    # 擴充孔 4 的顏色感應器:反射光 0~100(越亮越大)
    print(bright)                            # 在電腦畫面印出來,方便看數字
    if bright > 50:                          # 亮 → 馬達轉
        exp6.motor_run(1, 50)
        light.color(light.POWER, color.GREEN)
    else:                                    # 暗 → 馬達停
        exp6.motor_stop(1, 2)
        light.color(light.POWER, color.RED)
    time.sleep(0.1)

exp6.stop_all(1)             # 結束前一定要全部停止

一步一步看懂程式

  1. 重複,直到左右鍵一起按住:裡面的事情會一直做;兩個鍵一起按下去就跳出來。
  2. 讀反射光:擴充孔 4 的顏色感應器有多亮(0~100,越亮越大),存進「亮度」這個變數(變數=有名字的盒子,可以放一個數字),也印在電腦畫面上。
  3. 如果 亮度 > 50 → 馬達轉、燈變綠。
  4. 否則 → 馬達停(煞車)、燈變紅。
  5. 等 0.1 秒再檢查一次。
  6. 跳出來之後 → 全部停止。

跑起來應該看到什麼:感應器前面什麼都沒有:紅燈、馬達不動。把白紙靠近感應器(1~2 公分):綠燈、馬達轉。拿開又停。左右鍵一起按住:程式結束、馬達停。

常見問題

  • 一直是紅燈 / 一直是綠燈? → 看電腦畫面印出來的數字:放白紙和拿開時各是多少,把「50」改成兩個數字中間的值。
  • 官方 App 的數字跟另外兩種不一樣? → 正常。官方 App 的函式庫是用感應器的紅、綠、藍三個顏色估算亮度,Pybricks 和 MBC 積木網站讀的是感應器真正的反射光,所以同一張紙讀到的數字會差一點。
  • 讀到的一直是 0? → 顏色感應器有沒有插在 4 號孔;EXP6 只認得樂高 SPIKE 顏色感應器。

範例 4:用主機按鈕控制馬達

這個範例會做什麼:按住左鍵 → 馬達正轉;按住右鍵 → 反轉;放開 → 停。左右鍵一起按住就結束。

要準備什麼:同範例 1。

怎麼接:EXP6 Host 線 → 主機 C 孔;馬達 → 擴充孔 1。

下載程式

樂高官方 App
ex04_button_motor.llsp3
🟨 樂高官方 App 的程式(Python)
# EXP6 範例 4:用主機按鈕控制馬達(官方 SPIKE App・Python)
# 按住左鍵 → 正轉;按住右鍵 → 反轉;放開 → 停;左右鍵一起按 → 結束
# 接線:EXP6 的 Host 線 → 主機 C 孔;馬達 → EXP6 擴充孔 1;EXP6 接上電池
from hub import port, button
import time
from MBC_exp6_SPIKE_App_Lib import MBC_EXP6

exp6 = MBC_EXP6(port.C)
time.sleep(2)

while not (button.pressed(button.LEFT) and button.pressed(button.RIGHT)):   # 左右鍵一起按住 → 結束
    if button.pressed(button.LEFT):          # 按住左鍵
        exp6.motor_run(1, 50)                # 正轉,速度 50%
    elif button.pressed(button.RIGHT):       # 按住右鍵
        exp6.motor_run(1, -50)               # 反轉
    else:                                    # 都沒按
        exp6.motor_stop(1, 2)                # 停止(2 = 煞車)
    time.sleep(0.05)

exp6.stop_all(1)             # 結束前一定要全部停止

一步一步看懂程式

  1. 重複,直到左右鍵一起按住(跟範例 3 一樣)。
  2. 如果 左鍵被按住 → 擴充孔 1 速度 50(正轉)。
  3. 否則,如果 右鍵被按住 → 速度 -50(反轉)。
  4. 都沒按 → 停止(煞車)。
  5. 等 0.05 秒再檢查一次按鈕。
  6. 跳出來之後 → 全部停止。

跑起來應該看到什麼:按住左鍵馬達轉、放開就停;按住右鍵往另一邊轉。兩個一起按住,程式結束。

常見問題

  • 為什麼不用中間的按鈕? → 中間的按鈕是主機的開關,也是停止程式的按鈕,這頁的範例不拿它來控制馬達。
  • 按了要等一下才轉? → 程式每 0.05 秒檢查一次按鈕,官方 App 送指令也要一點時間,慢一點點是正常的。
  • 官方 App 按停止鍵,馬達還在轉? → 規則 ③:官方 App 沒有自動保護。用「左右鍵一起按住」結束程式;真的停不下來就關主機。

範例 5:兩輪小車走正方形

這個範例會做什麼:兩輪小車直走約 35 公分 → 原地右轉 90 度,重複 4 次,走出一個正方形回到起點。

要準備什麼

  • 範例 1 的東西,再加上
  • 兩輪小車(兩顆馬達當輪子,輪子直徑 56 mm、兩輪距離 112 mm,就是樂高標準小車)
  • 一塊平坦的地面(大約 50 × 50 公分)

怎麼接:EXP6 Host 線 → 主機 C 孔;左輪馬達 → 擴充孔 1、右輪馬達 → 擴充孔 2。

下載程式

樂高官方 App
ex05_square.llsp3
🟨 樂高官方 App 的程式(Python)
# EXP6 範例 5:兩輪小車走正方形(官方 SPIKE App・Python)
# 接線:EXP6 的 Host 線 → 主機 C 孔;左輪馬達 → 擴充孔 1;右輪馬達 → 擴充孔 2;EXP6 接上電池
# 小車:輪子直徑 56 mm、兩輪距離 112 mm(樂高標準小車)
from hub import port
import time
from MBC_exp6_SPIKE_App_Lib import MBC_EXP6

exp6 = MBC_EXP6(port.C)
exp6.set_motor_inverted(1, True)   # 左輪是反過來裝的:設成「反裝」,速度正的才會往前
time.sleep(2)                      # 等馬達準備好

for side in range(4):              # 正方形有 4 個邊
    exp6.reset_angle(2)                        # 右輪角度歸零,用來量走了多遠
    exp6.drive(1, 2, 40, 40)                   # 左輪孔 1、右輪孔 2,兩輪都 40% → 直走
    while exp6.get_motor_angle(2) < 720:       # 右輪轉滿 720 度(2 圈,大約 35 公分)
        time.sleep(0.01)
    exp6.stop_all(2)                           # 煞車
    time.sleep(0.3)

    exp6.reset_angle(2)
    exp6.drive(1, 2, 30, -30)                  # 左輪往前、右輪往後 → 原地右轉
    while exp6.get_motor_angle(2) > -180:      # 右輪倒轉 180 度 ≈ 車子轉 90 度
        time.sleep(0.01)
    exp6.stop_all(2)
    time.sleep(0.3)

exp6.stop_all(1)                   # 結束前一定要全部停止

一步一步看懂程式

  1. 左輪設成「反裝」:小車的兩顆馬達是左右對稱裝的,左輪轉的方向跟右輪相反。設成反裝之後,兩輪都是「速度正的 = 往前」。
  2. 等兩顆馬達準備好。
  3. 重複 4 次(正方形 4 個邊):
    1. 右輪角度歸零:等一下用它來量走了多遠。
    2. 雙輪一起走:「左輪孔 1、右輪孔 2,左 40、右 40」→ 直走。EXP6 會讓兩輪同步,走得比較直。
    3. 等到右輪轉滿 720 度(2 圈 ≈ 35 公分)→ 全部停止(煞車),停 0.3 秒。
    4. 右輪角度再歸零,「左 30、右 -30」→ 左輪往前、右輪往後 → 原地右轉。
    5. 等到右輪倒轉 180 度 → 車子剛好轉 90 度(輪子轉 180 度 × 輪徑 56 ÷ 輪距 112 = 90 度)→ 停止。
  4. 全部停止(滑行)。

跑起來應該看到什麼:小車走一段、右轉、走一段、右轉…走完 4 個邊,大約回到出發的位置。

常見問題

  • 小車原地打轉,不會往前? → 左輪沒有設成反裝,或兩顆馬達插反了(左輪要在 1 號孔)。
  • 小車往後退? → 馬達的裝法跟樂高標準小車相反:改成「擴充孔 2」設反裝(官方 App/Pybricks 把 set_motor_inverted(1, True) 的 1 改成 2;MBC 積木網站把「安裝方向」積木的擴充孔改成 2),接線不用動。
  • 轉不到 90 度 / 轉超過? → 地面打滑或輪子大小不一樣。把 180 改大一點(轉不夠)或改小一點(轉太多),一次改 5~10。
  • 邊長不一樣長? → 把 720 改大或改小。720 度 ≈ 35 公分,每 100 度大約 5 公分。

其他問題

  • 主機認不到感應器? 拔掉重插一次,等 2 秒;換一個孔試試。官方 App 會把它顯示成「顏色感應器」,這是正常的。
  • 可以同時用官方 App 和 Pybricks 嗎? 一次只能裝一種韌體:Pybricks 與 MBC 積木網站用 Pybricks 韌體,官方 App 用樂高原廠韌體;隨時可以用 SPIKE App 換回原廠韌體。

還有問題?到 聯絡我們 附上你用的軟體和程式截圖。

下載

本頁依據

  • 主機與軟體清單:_build/guides.json
  • 安裝與設定:_build/guides/software/spike-official.zh.md、_build/guides/product/exp6/spike-official.zh.md
  • 範例:sensors/exp6/spike-examples.md
LINE 詢價選購指南