MakeBlock(mBot)積木擴展

用 mBlock 5 就能在 mBot、mBot Ranger 等 Makeblock 主板上用積木讀取 MBC 循行者、測距者、掌控者、IMU 陀螺儀與神攝手:裝一個擴展,積木區就多出六個分類,每個數值一顆積木。

適用軟體:mBlock 5 電腦版(上傳模式,程式燒進主板執行)。


安裝擴展

v2.0.0(新版,2026-10 協定 v2 韌體)

MBC Pro Sensors 擴展 v2.0.0:循行者、測距者、掌控者、IMU 陀螺儀、神攝手共 95 個積木,搭配 2026-10 之後出貨(協定 v2)的 MakeBlock 版感應器。

開發中:新版擴展還沒在 Makeblock 擴展平台上架,正式上架後在 mBlock 5「擴展中心」搜尋「MBC」即可加入。v2.2.0 另加「神攝手」分類(37 顆積木:顏色追蹤、座標取色、照順序給色號、循線、物體偵測;搭配 神攝手,神攝手 mBlock 版尚未上機驗證),原本給學校版/WRO 版的分類改叫「神攝手舊版」(積木不變),匯入檔:mbc_pro_sensors_2.2.0_import.mext。

等不及的進階使用者:到 ext.mblock.cc 登入自己的 Makeblock 帳號 → 我的擴展 → 匯入資料,上傳 mbc_pro_sensors_2.0.0_import.mext(匯入約 1 分鐘),再按「下載」取得可拖進 mBlock 的 .mext。

v1.0.0(舊版)

舊版 v1.0.0(15 個積木:循行者、測距者、掌控者):搭配 2026-10 以前出貨的韌體。新韌體要用舊積木時,循行者 8/16 路請燒 MBC_MBLOCK_LEGACY=1 版本(其他產品沒有舊版)。

下載舊版 .mext

安裝步驟(拿到 .mext 之後)

  1. 打開 mBlock 5 電腦版,左下「設備」加入你的主板(例如 mBot)。
  2. 把 .mext 檔拖進 mBlock 視窗,積木區會多出「循行者」「測距者」「掌控者」「IMU 陀螺儀」「神攝手」「MBC 共用」六個分類(v2.2.0 匯入檔是七個:原本的「神攝手」改叫「神攝手舊版」,另多一個新版「神攝手」)。
  3. 右下「模式開關」切到 上傳,用主板的開機起始積木(例如「當 mBot 啟動時」)開始寫程式,按「上傳」燒進主板。

重要

感應器要用 MakeBlock 版(出廠韌體不同),並透過 mBot 插座片接到主板的 RJ25 連接埠。SPIKE、EV3、I2C 版不能直接接 Makeblock 主板。 新版擴展(v2)只能配新版韌體,舊版擴展只能配舊版韌體,兩者積木不相容;不確定手上感應器是哪一版,拖進 v2 擴展後用「MBC 共用 → 協議版本」積木讀:回 2 就是新韌體。


支援的主板與連接埠

積木上選的是連接埠號碼,擴展會依主板自動換成正確的腳位。請接在下表的連接埠:

主板 可用連接埠 說明
mBot(mCore) 1、2、3、4 四個埠都可以
mBot Ranger(Auriga) 6 ~ 10 1 ~ 4 是紅色馬達埠、5 是序列埠,不能接
Orion 3、4、6 1、2 是紅色馬達埠;7、8 只能接類比感應器
Ultimate 2.0(MegaPi) 6、7、8 需加裝 RJ25 擴充板;5 是序列埠
MegaPi Pro 7、8、9、10 需加裝 RJ25 擴充板

提示

選到不能用的連接埠、或感應器沒接好時,讀值積木會回傳 -32768(從來沒讀到)或上一次讀到的值,「MBC 共用 → 連線正常?」會是「否」。先用這顆布林積木確認接線,再看數值。

mBot2(CyberPi)沒有 RJ25 連接埠,不支援。


支援的產品

產品 積木分類 積木 舊版擴展
神攝手 學校版(舊版,停止支援) 神攝手舊版 色相、飽和度、明度、動態、色塊 X、色塊 Y、色塊寬、色塊高、色塊面積、有找到色塊? —
神攝手 WRO 版(HUE12)(舊版,停止支援) 神攝手舊版 WRO 色點 N 顏色碼、色點 N 鮮豔度 —
IMU 陀螺儀 IMU 陀螺儀 陀螺 3D 航向、融合航向、陀螺 1D 航向、磁力航向、轉向角速度、俯仰角、俯仰角速度、磁力信任度、磁場干擾度、朝上的面、角速度 [軸]、加速度 [軸]、磁力 [軸] —
循行者 16 路 循行者 線的位置、線的細位置、線寬、線段數、壓線位元圖、最後離線方向、門檻、校準次數、第 N 路光值、第 N 路在線上? v1.0.0 可用(2026-10 前韌體)
循行者 8 路 循行者 線的位置、線的細位置、線寬、線段數、壓線位元圖、最後離線方向、門檻、校準次數、第 N 路光值、第 N 路在線上? v1.0.0 可用(2026-10 前韌體)
掌控者 PS2 掌控者 十六鍵、方向鍵、形狀鍵、肩鍵、功能鍵、手把已連線?、電量、L2 類比、R2 類比、系統鍵、手把類型、搖桿 [LX/LY/RX/RY]、[按鈕] 被按下? —
掌控者 PS4/PS5 接收器 掌控者 十六鍵、方向鍵、形狀鍵、肩鍵、功能鍵、手把已連線?、電量、L2 類比、R2 類比、系統鍵、手把類型、搖桿 [軸]、[按鈕] 被按下? —
測距者 2 路 測距者 2 路 左距離 cm、右距離 cm、較近距離 cm、左距離 mm、右距離 mm、初始化位元圖、故障位元圖、左右平均 mm —
測距者 8 路 測距者 8 路 最近距離 cm、最近方向、最空曠距離 cm、最空曠方向、正前方距離 cm、最近距離 mm、初始化位元圖、故障位元圖、正前方距離 mm、第 N 顆距離 cm、第 N 顆距離 mm —

注意

IMU 陀螺儀的 MakeBlock 版是 2026 年 10 月新增,訂購前請先 LINE 詢問確認出貨版本。神攝手的 mBlock 版用 v2.2.0 的「神攝手」分類(含相機模式 5 物體偵測),mBlock 版尚未上機驗證;v2.2.0 裡的「神攝手舊版」分類(積木前綴「神攝手舊版」「神攝手舊版 WRO」,v2.0.0/v2.1.0 叫「神攝手」「神攝手 WRO」)是給舊版神攝手用的(停止支援)。


數值方向約定

  • 負 = 線在左:循行者「線的位置」「線的細位置」「最後離線方向」,站在車後往前看,線在左邊是負數、右邊是正數、正中間是 0。
  • 搖桿右/上為正:掌控者 LX、LY、RX、RY 都是 −100~+100,0 = 中間(放開)。
  • 距離:cm 積木 0120(120 = 前面沒東西),mm 積木 01200;測距者 8 路的方向 −8~+8(0 = 正前方、負 = 左、±8 = 沒目標)。
  • 色相 −1 = 黑白灰:神攝手「色相」沒有顏色時回 −1;WRO 版色點顏色碼 255 = 色點沒開。
  • 讀不到 = −32768:感應器沒接、線路掉 byte 或檢查碼錯時積木回 −32768,可用「連線正常?」判斷。

積木一覽

每個數值一顆積木,直接回傳使用者要的數字(int16);寫入命令會先回 ACK 再執行。下表由值表自動產生:

積木 傳回 產品 說明
神攝手舊版 連接埠 [埠] 色相 -1~100 神攝手 學校版(舊版) S1 取樣點色相 0100(色相環 0240 等比縮放);−1 = 黑白灰(飽和度 < 10);S1 沒設定 = 0
神攝手舊版 連接埠 [埠] 飽和度 0~100 神攝手 學校版(舊版) S1 取樣點飽和度 0~100
神攝手舊版 連接埠 [埠] 明度 0~100 神攝手 學校版(舊版) S1 取樣點明度 0~100
神攝手舊版 連接埠 [埠] 動態 0~100 神攝手 學校版(舊版) 全畫面動態量 0~100(畫面變化越多越大)
神攝手舊版 連接埠 [埠] 色塊 X 0~100 神攝手 學校版(舊版) 色塊中心 X 0~100,左 = 0;沒找到 = 0
神攝手舊版 連接埠 [埠] 色塊 Y 0~75 神攝手 學校版(舊版) 色塊中心 Y 0~75,下 = 0、上 = 75;沒找到 = 0
神攝手舊版 連接埠 [埠] 色塊寬 0~100 神攝手 學校版(舊版) 色塊寬 W 0~100;0 = 沒找到
神攝手舊版 連接埠 [埠] 色塊高 0~75 神攝手 學校版(舊版) 色塊高 H 0~75;沒找到 = 0
神攝手舊版 連接埠 [埠] 色塊面積 0~7500 神攝手 學校版(舊版) W×H(0~7500);沒找到 = 0
神攝手舊版 連接埠 [埠] 有找到色塊? 0~1 神攝手 學校版(舊版) 1 = 畫面裡有目標色的色塊(W > 0),0 = 沒有
神攝手舊版 連接埠 [埠] 更新全部數值 — 神攝手 學校版(舊版) 一次讀整張值表進快取(FD 整包);接下來 10 ms 內的讀值積木直接用快取,不再逐一詢問
神攝手舊版 WRO 連接埠 [埠] 色點 [1~12] 顏色碼 0~255 神攝手 WRO 版(HUE12)(舊版) 101B = S1S12 顏色碼:0239 彩色(色相 0255 等比縮成 0239)、240245 白(飽和度 < 30,越低越大)、246~250 黑(明度 < 30,越暗越大)、255 = 色點沒開
神攝手舊版 WRO 連接埠 [埠] 色點 [1~12] 鮮豔度 0~255 神攝手 WRO 版(HUE12)(舊版) 202B = S1S12 鮮豔度(飽和度)0~255:黑 = 1、白/彩色 = 實際飽和度;色點沒開 = 0
神攝手舊版 WRO 連接埠 [埠] 更新全部數值 — 神攝手 WRO 版(HUE12)(舊版) 一次讀整張值表進快取(FD 整包);接下來 10 ms 內的讀值積木直接用快取,不再逐一詢問
IMU 陀螺儀 連接埠 [埠] 陀螺 3D 航向 -32768~32767 ° IMU 陀螺儀 四元數算出的航向,度,開機/歸零 = 0,連續累積可超過 360(int16 到 ±32767 繞回,約 91 圈)
IMU 陀螺儀 連接埠 [埠] 融合航向 -32768~32767 ° IMU 陀螺儀 陀螺 3D 加磁力計慢修正的航向,度,減去相對零點;可超過 360
IMU 陀螺儀 連接埠 [埠] 陀螺 1D 航向 -32768~32767 ° IMU 陀螺儀 只繞轉向軸積分的航向,度,開機/歸零 = 0;可超過 360
IMU 陀螺儀 連接埠 [埠] 磁力航向 -32768~32767 ° IMU 陀螺儀 磁力計傾斜補償航向,度,減去相對零點
IMU 陀螺儀 連接埠 [埠] 轉向角速度 -32768~32767 0.1 dps IMU 陀螺儀 繞轉向軸(getYawAxis())的角速度,0.1 度/秒,正負跟航向同向
IMU 陀螺儀 連接埠 [埠] 俯仰角 -90~+90 ° IMU 陀螺儀 板子絲印 X 軸相對水平面的仰角:X 軸朝上 +90、朝下 −90、水平 0(用重力向量 atan2 算)
IMU 陀螺儀 連接埠 [埠] 俯仰角速度 -32768~32767 0.1 dps IMU 陀螺儀 繞板子絲印 X 軸的角速度,0.1 度/秒(右手定則,從 +X 端看逆時針為正);注意這是 gyro X,不是 06 的微分
IMU 陀螺儀 連接埠 [埠] 磁力信任度 0~255 IMU 陀螺儀 融合演算法對磁力計的信任度 0255(= 01 × 255)
IMU 陀螺儀 連接埠 [埠] 磁場干擾度 0~255 0.01° IMU 陀螺儀 磁場干擾程度 0~255(度 × 100,上限 255)
IMU 陀螺儀 連接埠 [埠] 朝上的面 0~5 IMU 陀螺儀 哪個軸朝上:0 +X、1 +Y、2 +Z、3 −X、4 −Y、5 −Z(實體軸)
IMU 陀螺儀 連接埠 [埠] 角速度 [軸] -32768~32767 0.1 dps IMU 陀螺儀 10 X、11 Y、12 Z 角速度,0.1 度/秒(實體軸,已套軸向號誌)
IMU 陀螺儀 連接埠 [埠] 加速度 [軸] -32768~32767 mg IMU 陀螺儀 13 X、14 Y、15 Z 加速度,mg(1000 = 1 g)
IMU 陀螺儀 連接埠 [埠] 磁力 [軸] -32768~32767 mG IMU 陀螺儀 16 X、17 Y、18 Z 磁場強度,mG(毫高斯)
IMU 陀螺儀 連接埠 [埠] 航向歸零 — IMU 陀螺儀 四個航向都歸零(zeroHeadings());EV3 另有原廠 WRITE 0x11 陀螺歸零
IMU 陀螺儀 連接埠 [埠] 加速度計校準開始 — IMU 陀螺儀 開始加速度計校準(= v1 的 0x20=0x01);期間 F3 b4 = 1;磁力計校準中 → 忽略(0B 狀態 3 拒絕)
IMU 陀螺儀 連接埠 [埠] 加速度計校準結束 — IMU 陀螺儀 結束加速度計校準並存 EEPROM(= v1 的 0x20=0x02);通過後重新擷取安裝軸,擺正靜置後才航向歸零(不是馬上歸零);沒在校準中 → 拒絕(0B 狀態 3);驗證沒過 → 0B 狀態 2 失敗
IMU 陀螺儀 連接埠 [埠] 磁力計校準開始 — IMU 陀螺儀 開始磁力計校準(= v1 的 0x20=0x03);期間 F3 b5 = 1;磁力計故障時 → 忽略(0B 狀態 3)
IMU 陀螺儀 連接埠 [埠] 磁力計校準結束 — IMU 陀螺儀 結束磁力計校準並存 EEPROM(= v1 的 0x20=0x04);成功後馬上航向歸零;沒在校準中 → 拒絕(0B 狀態 3);驗證沒過 → 0B 狀態 2 失敗
IMU 陀螺儀 連接埠 [埠] 更新全部數值 — IMU 陀螺儀 一次讀整張值表進快取(FD 整包);接下來 10 ms 內的讀值積木直接用快取,不再逐一詢問
循行者 連接埠 [埠] 線的位置 -16~+16 循行者 16 路 線在哪一路:−16(最左)~+16(最右),0 = 正中間;站在車後往前看,負 = 線在左(平常 ±15,±16 只在最外側掉線後 200 ms 內)
循行者 連接埠 [埠] 線的細位置 -100~+100 循行者 16 路 線位置的細分:−100 ~ +100,0 = 正中間,負 = 線在左(與線位置同號)
循行者 連接埠 [埠] 線寬 0~16 路 循行者 16 路 壓到線的路數 0~16,0 = 找不到線
循行者 連接埠 [埠] 線段數 0~8 循行者 16 路 看到幾段線:0 丟線、1 一條線、2 以上 = 分岔/十字
循行者 連接埠 [埠] 壓線位元圖 0~65535 bit 循行者 16 路 bit0 = 第 1 路(最左)… bit15 = 第 16 路,1 = 那一路在線上
循行者 連接埠 [埠] 最後離線方向 -16~+16 循行者 16 路 丟線前線最後在哪一側:−16 ~ +16(負 = 左),找回線後維持最後一次
循行者 連接埠 [埠] 門檻 1~99 循行者 16 路 判斷「在線上」的光值門檻 1~99,預設 40(2026-11-03 以前出貨的韌體是 50);用 E4 改
循行者 連接埠 [埠] 校準次數 0~255 次 循行者 16 路 開機後完成校準的次數(按鈕校準也算)
循行者 連接埠 [埠] 第 [1~16] 路光值 0~100 循行者 16 路 第 116 路校準後光值 0100(第 1 路最左);編號 10~1F
循行者 連接埠 [埠] 第 [1~16] 路在線上? 是/否 循行者 16 路 壓線位元圖 05 的第 N 個 bit(第 1 路 = bit0,最左):那一路壓到線 = 是
循行者 連接埠 [埠] 切黑線 — 循行者 16 路 追黑線(預設);存 RAM,重開機回預設
循行者 連接埠 [埠] 切白線 — 循行者 16 路 追白線(F3 b1 = 1);存 RAM,重開機回預設
循行者 連接埠 [埠] 黑色校準 — 循行者 16 路 把目前讀值記為黑(感應器壓在黑線上),約 50 ms;寫入 EEPROM
循行者 連接埠 [埠] 白色校準 — 循行者 16 路 把目前讀值記為白(感應器壓在白底上),約 50 ms;寫入 EEPROM
循行者 連接埠 [埠] 設定門檻 [門檻] — 循行者 16 路 二值化門檻 1~99(RAM,重開機回預設 40);SPIKE 參數超出範圍回失敗(狀態 2)
循行者 連接埠 [埠] 5 秒動態校準 — 循行者 16 路 5 秒內把感應器在黑線與白底上來回掃,取極值當黑白參考(共識 B-12,= v1 的 0x20=0x01);期間 F3 b2 = 1
循行者 連接埠 [埠] 更新全部數值 — 循行者 16 路 一次讀整張值表進快取(FD 整包);接下來 10 ms 內的讀值積木直接用快取,不再逐一詢問
循行者 連接埠 [埠] 線的位置 -8~+8 循行者 8 路 線在哪一路:−8(最左)~+8(最右),0 = 正中間;站在車後往前看,負 = 線在左
循行者 連接埠 [埠] 線的細位置 -100~+100 循行者 8 路 線位置的細分:−100 ~ +100,0 = 正中間,負 = 線在左(與線位置同號)
循行者 連接埠 [埠] 線寬 0~8 路 循行者 8 路 壓到線的路數 0~8,0 = 找不到線
循行者 連接埠 [埠] 線段數 0~4 循行者 8 路 看到幾段線:0 丟線、1 一條線、2 以上 = 分岔/十字
循行者 連接埠 [埠] 壓線位元圖 0~255 bit 循行者 8 路 bit0 = 第 1 路(最左)… bit7 = 第 8 路,1 = 那一路在線上
循行者 連接埠 [埠] 最後離線方向 -8~+8 循行者 8 路 丟線前線最後在哪一側:−8 ~ +8(負 = 左),找回線後維持最後一次
循行者 連接埠 [埠] 門檻 1~99 循行者 8 路 判斷「在線上」的光值門檻 1~99,預設 50;用 E4 改
循行者 連接埠 [埠] 校準次數 0~255 次 循行者 8 路 開機後完成校準的次數(按鈕校準也算)
循行者 連接埠 [埠] 第 [1~8] 路光值 0~100 循行者 8 路 第 18 路校準後光值 0100(第 1 路最左);編號 10~17
循行者 連接埠 [埠] 第 [1~8] 路在線上? 是/否 循行者 8 路 壓線位元圖 05 的第 N 個 bit(第 1 路 = bit0,最左):那一路壓到線 = 是
循行者 連接埠 [埠] 切黑線 — 循行者 8 路 追黑線(預設);存 RAM,重開機回預設
循行者 連接埠 [埠] 切白線 — 循行者 8 路 追白線(F3 b1 = 1);存 RAM,重開機回預設
循行者 連接埠 [埠] 黑色校準 — 循行者 8 路 把目前讀值記為黑(感應器壓在黑線上),約 50 ms;寫入 EEPROM
循行者 連接埠 [埠] 白色校準 — 循行者 8 路 把目前讀值記為白(感應器壓在白底上),約 50 ms;寫入 EEPROM
循行者 連接埠 [埠] 設定門檻 [門檻] — 循行者 8 路 二值化門檻 1~99(RAM,重開機回預設 50);SPIKE 參數超出範圍回失敗(狀態 2)
循行者 連接埠 [埠] 5 秒動態校準 — 循行者 8 路 5 秒內把感應器在黑線與白底上來回掃,取極值當黑白參考(共識 B-12,= v1 的 0x20=0x01);期間 F3 b2 = 1
循行者 連接埠 [埠] 更新全部數值 — 循行者 8 路 一次讀整張值表進快取(FD 整包);接下來 10 ms 內的讀值積木直接用快取,不再逐一詢問
掌控者 連接埠 [埠] 十六鍵 0~65535 bit 掌控者 PS2 16 個按鍵合成一個數(PSX 排列,1 = 按下):bit0 SELECT、1 L3、2 R3、3 START、4 上、5 右、6 下、7 左、8 L2、9 R2、10 L1、11 R1、12 ▲、13 ●、14 ✕、15 ■;未連線 = 0
掌控者 連接埠 [埠] 方向鍵 0~15 bit 掌控者 PS2 上 1、右 2、下 4、左 8(同時按相加),0~15;未連線 = 0
掌控者 連接埠 [埠] 形狀鍵 0~15 bit 掌控者 PS2 ▲ 1、● 2、✕ 4、■ 8(同時按相加),0~15;未連線 = 0;0x22 的 R 高 4 bit
掌控者 連接埠 [埠] 肩鍵 0~15 bit 掌控者 PS2 L2 1、R2 2、L1 4、R1 8(同時按相加),0~15;未連線 = 0
掌控者 連接埠 [埠] 功能鍵 0~15 bit 掌控者 PS2 SELECT 1、L3 2、R3 4、START 8(同時按相加),0~15;未連線 = 0;0x22 的 G 高 4 bit
掌控者 連接埠 [埠] 手把已連線? 0~1 掌控者 PS2 1 = 手把已連線(psx.read() 成功),0 = 沒有;未連線時所有按鍵 0、搖桿回中
掌控者 連接埠 [埠] 電量 0 % 掌控者 PS2 0~100;PS2 手把沒有電量 → 恆 0(PS4 才有)
掌控者 連接埠 [埠] L2 類比 0~255 掌控者 PS2 L2 壓力 0~255(DualShock 2 類比模式才有壓力值;手把沒有壓力值時按下 = 255、放開 = 0);未連線 = 0
掌控者 連接埠 [埠] R2 類比 0~255 掌控者 PS2 R2 壓力 0~255(同 08);未連線 = 0
掌控者 連接埠 [埠] 系統鍵 0 bit 掌控者 PS2 b0 PS 鍵、b1 擷取鍵;PS2 手把沒有 → 恆 0(PS4 才有)
掌控者 連接埠 [埠] 手把類型 0~2 掌控者 PS2 0 沒有手把、1 PS2 數位模式、2 PS2 類比模式(3 PS4、4 PS5 只有 PS4 接收器會出現)
掌控者 連接埠 [埠] 搖桿 [LX/LY/RX/RY] -100~+100 掌控者 PS2 10 LX、11 LY、12 RX、13 RY:−100 ~ +100,0 = 中間,右/上為正(原始 0255 死區 ±7 吸成中心);未連線 = 0。EV3/SPIKE/MATRIX 送的是 099(50 = 中間)或 1~9(5 = 中間),見各平台欄
掌控者 連接埠 [埠] [按鈕] 被按下? 是/否 掌控者 PS2 從十六鍵 01 拆出的單一按鈕(PSX 排列),選單:✕ ● ▲ ■ 上 下 左 右 L1 R1 L2 R2 L3 R3 SELECT START
掌控者 連接埠 [埠] 震動 [強度] — 掌控者 PS2 [強度 0~255],0 = 停;PS2 接收器收到後回 ACK 但忽略(250614 已關手把震動),PS4 才有作用
掌控者 連接埠 [埠] 燈條顏色 [紅] [綠] [藍] — 掌控者 PS2 [R][G][B] 各 0~255;PS2 手把沒有燈條,接收器收到後回 ACK 但忽略,PS4 才有作用
掌控者 連接埠 [埠] 更新全部數值 — 掌控者 PS2 一次讀整張值表進快取(FD 整包);接下來 10 ms 內的讀值積木直接用快取,不再逐一詢問
掌控者 連接埠 [埠] 十六鍵 0~65535 bit 掌控者 PS4/PS5 接收器 全部按鍵一個 16 bit(PSX 排列):bit0 SELECT(SHARE)、1 L3、2 R3、3 START(OPTIONS)、4 上、5 右、6 下、7 左、8 L2、9 R2、10 L1、11 R1、12 ▲、13 ●、14 ✕、15 ■;1 = 按下;未連線 = 0
掌控者 連接埠 [埠] 方向鍵 0~15 bit 掌控者 PS4/PS5 接收器 上 1、右 2、下 4、左 8,同時按相加(0~15)
掌控者 連接埠 [埠] 形狀鍵 0~15 bit 掌控者 PS4/PS5 接收器 ▲ 1、● 2、✕ 4、■ 8,同時按相加(0~15)
掌控者 連接埠 [埠] 肩鍵 0~15 bit 掌控者 PS4/PS5 接收器 L2 1、R2 2、L1 4、R1 8,同時按相加(0~15)
掌控者 連接埠 [埠] 功能鍵 0~15 bit 掌控者 PS4/PS5 接收器 SELECT(SHARE) 1、L3 2、R3 4、START(OPTIONS) 8,同時按相加(0~15)
掌控者 連接埠 [埠] 手把已連線? 0~1 掌控者 PS4/PS5 接收器 1 = 手把已連線且 300 ms 內有資料,0 = 未連線(斷線時按鍵 0、搖桿中間)
掌控者 連接埠 [埠] 電量 0~100 % 掌控者 PS4/PS5 接收器 手把電量 0~100(PS2 接收器恆 0)
掌控者 連接埠 [埠] L2 類比 0~255 掌控者 PS4/PS5 接收器 L2 扳機壓多深 0~255(未連線 0)
掌控者 連接埠 [埠] R2 類比 0~255 掌控者 PS4/PS5 接收器 R2 扳機壓多深 0~255(未連線 0)
掌控者 連接埠 [埠] 系統鍵 0~3 bit 掌控者 PS4/PS5 接收器 b0 PS 鍵、b1 擷取(PS5 靜音)鍵;未連線 0(PS2 恆 0)
掌控者 連接埠 [埠] 手把類型 0~4 掌控者 PS4/PS5 接收器 0 無、1 PS2 數位、2 PS2 類比、3 PS4、4 PS5(或其他)
掌控者 連接埠 [埠] 搖桿 [軸] -100~+100 掌控者 PS4/PS5 接收器 10 LX、11 LY、12 RX、13 RY:−100 ~ +100,0 = 中間,右/上為正;未連線 0
掌控者 連接埠 [埠] [按鈕] 被按下? 是/否 掌控者 PS4/PS5 接收器 從十六鍵 01 拆出的單一按鈕(PSX 排列),選單:✕ ● ▲ ■ 上 下 左 右 L1 R1 L2 R2 L3 R3 SELECT START
掌控者 連接埠 [埠] 震動 [強度] — 掌控者 PS4/PS5 接收器 [強度 0~255],0 = 停;每次 200 ms(PS2 收到忽略)
掌控者 連接埠 [埠] 燈條顏色 [紅] [綠] [藍] — 掌控者 PS4/PS5 接收器 [R][G][B] 各 0~255,要剛好 3 byte;未連線先記住,連上再套用;預設藍 (0,0,255)(PS2 收到忽略)
掌控者 連接埠 [埠] 更新全部數值 — 掌控者 PS4/PS5 接收器 一次讀整張值表進快取(FD 整包);接下來 10 ms 內的讀值積木直接用快取,不再逐一詢問
測距者 2 路 連接埠 [埠] 左距離 cm 0~120 cm 測距者 2 路 左邊那顆的距離 0~120 cm(站在車後往前看,左 = 第 0 顆),120 = 前面沒東西/那顆失效
測距者 2 路 連接埠 [埠] 右距離 cm 0~120 cm 測距者 2 路 右邊那顆的距離 0~120 cm(右 = 第 1 顆),120 = 前面沒東西/那顆失效
測距者 2 路 連接埠 [埠] 較近距離 cm 0~120 cm 測距者 2 路 左右兩顆取較近的 0~120 cm
測距者 2 路 連接埠 [埠] 左距離 mm 0~1200 mm 測距者 2 路 左邊那顆的距離 0~1200 mm,1200 = 前面沒東西/那顆失效
測距者 2 路 連接埠 [埠] 右距離 mm 0~1200 mm 測距者 2 路 右邊那顆的距離 0~1200 mm,1200 = 前面沒東西/那顆失效
測距者 2 路 連接埠 [埠] 初始化位元圖 0~3 bit 測距者 2 路 bit0 = 左、bit1 = 右,1 = 那顆開機初始化成功(失敗不重試);3 = 兩顆都好
測距者 2 路 連接埠 [埠] 故障位元圖 0~3 bit 測距者 2 路 bit0 = 左、bit1 = 右,1 = 那顆目前失效(I2C 讀失敗或 200 ms 沒更新);失效那顆距離回 120/1200
測距者 2 路 連接埠 [埠] 左右平均 mm 0~1200 mm 測距者 2 路 (左 mm + 右 mm) / 2,0~1200;跟 EV3 模式 3、SPIKE 模式 6 第 3 個值一致(共識 #8 補上)
測距者 2 路 連接埠 [埠] 更新全部數值 — 測距者 2 路 一次讀整張值表進快取(FD 整包);接下來 10 ms 內的讀值積木直接用快取,不再逐一詢問
測距者 8 路 連接埠 [埠] 最近距離 cm 0~120 cm 測距者 8 路 8 顆裡最小的距離 0~120 cm(失效那顆以 120 參與),120 = 四周沒東西
測距者 8 路 連接埠 [埠] 最近方向 -8~+8 測距者 8 路 最近目標在哪個方向:−7(正左)~ +7(正右),0 = 正前方,負 = 左;±8 = 四周沒東西(沿用上次偏向側)
測距者 8 路 連接埠 [埠] 最空曠距離 cm 0~120 cm 測距者 8 路 8 顆裡最大的距離 0~120 cm(壞掉那顆永遠 120,會被當成最空曠)
測距者 8 路 連接埠 [埠] 最空曠方向 -7~+7 測距者 8 路 最遠(最空曠)在哪個方向:−7 ~ +7,0 = 正前方,負 = 左;8 顆全 120 時 = 0
測距者 8 路 連接埠 [埠] 正前方距離 cm 0~120 cm 測距者 8 路 第 4、5 顆(兩顆平行朝前)平均 0~120 cm;EV3 模式 3、SPIKE 模式 6 給的是同一個值的 mm;0x22 的 C 是 min(第 4, 第 5 顆) 不是平均(見 10)
測距者 8 路 連接埠 [埠] 最近距離 mm 0~1200 mm 測距者 8 路 8 顆 mm 的最小值 0~1200(失效那顆以 1200 參與),1200 = 四周沒東西
測距者 8 路 連接埠 [埠] 初始化位元圖 0~255 bit 測距者 8 路 bit0 = 第 1 顆(最左)… bit7 = 第 8 顆,1 = 那顆開機初始化成功(8 顆約 2~4 秒,失敗不重試);255 = 全部好
測距者 8 路 連接埠 [埠] 故障位元圖 0~255 bit 測距者 8 路 bit0 = 第 1 顆 … bit7 = 第 8 顆,1 = 那顆目前失效(I2C 讀失敗或 200 ms 沒更新);失效那顆距離回 120/1200
測距者 8 路 連接埠 [埠] 正前方距離 mm 0~1200 mm 測距者 8 路 第 4、5 顆(正前方兩顆)平均,0~1200 mm;1200 = 前面沒東西。cm 版是 05
測距者 8 路 連接埠 [埠] 第 [1~8] 顆距離 cm 0~120 cm 測距者 8 路 第 18 顆各自的距離 0120 cm(第 1 顆正左、第 4、5 顆正前、第 8 顆正右,每顆隔 30°);120 = 那個方向沒東西/那顆失效;編號 10~17
測距者 8 路 連接埠 [埠] 第 [1~8] 顆距離 mm 0~1200 mm 測距者 8 路 第 18 顆各自的距離 01200 mm,1200 = 那個方向沒東西/那顆失效;編號 18~1F
測距者 8 路 連接埠 [埠] 更新全部數值 — 測距者 8 路 一次讀整張值表進快取(FD 整包);接下來 10 ms 內的讀值積木直接用快取,不再逐一詢問

提示

一個迴圈要讀很多顆積木時,先放一顆「更新全部數值」,接下來 10 ms 內的讀值積木都直接用快取,不會每顆各等一次串口往返(每次約 1 ms)。


📂 範例程式下載

先照上面安裝好 v2 擴展,再用 mBlock 5「檔案 → 從電腦打開」開啟範例(主板都是 mBot,換別的主板時把起始積木和連接埠改掉即可):

範例 產品與接法 內容
PD 循線 循行者 8 路(或 16 路)→ 連接埠 1 用「線的細位置」做 PD 控制,基本速度 40
避障 測距者 8 路 → 連接埠 3 前方 20 cm 內有東西就往空的那邊轉
手把遙控(坦克式) 掌控者 PS2/PS4/PS5 → 連接埠 4 左搖桿控左輪、右搖桿控右輪,手把斷線自動停車

注意

這三個檔案是從 v1 範例改成 v2 積木產生的,還沒在 mBlock 5 裡開啟驗證(等擴展上架後補驗)。開不起來或積木顯示空白,請先確認 v2 擴展已拖進 mBlock,或 LINE 告訴我們。

範例 1:mBot PD 循線(循行者)

循行者 8 路接在 mBot 連接埠 1:

  1. 「當 mBot 啟動時」→ 等待 1 秒(感應器開機)→ 循行者[連接埠 1]切黑線。
  2. 重複執行:
    • 誤差 = 循行者[連接埠 1]線的細位置(負 = 線在左)
    • 轉向 = 誤差 × 0.6 +(誤差 − 上次誤差)× 2
    • 左輪速度 = 基本速度 − 轉向,右輪速度 = 基本速度 + 轉向
    • 上次誤差 = 誤差

線在左(誤差為負)時轉向為負,左輪=基本速度−轉向、右輪=基本速度+轉向,左輪減速、右輪加速,車子往左修正回到線上。基本速度從 40 開始,車子左右搖擺就調小 0.6、反應太慢就調大。調參方法可參考 SPIKE 循線 PID 教學,原理相同。

範例 2:mBot 避障(測距者 8 路)

測距者 8 路接在 mBot 連接埠 3;開機後等 3 秒讓 8 顆雷射初始化:

  1. 如果 測距者 8 路[連接埠 3]最近距離 cm < 20:
    • 如果 最近方向 < 0(障礙在左)→ 左輪 40、右輪 −40(往右轉)
    • 否則 → 左輪 −40、右輪 40(往左轉)
  2. 否則 → 兩輪 40 直走。

想要更聰明,可以改用「最空曠方向」直接朝最空的方向轉。

範例 3:mBot 手把坦克遙控(掌控者)

掌控者接在 mBot 連接埠 4:

  1. 如果 掌控者[連接埠 4]手把已連線?:
    • 左輪 = 掌控者[連接埠 4]搖桿[左搖桿 y]× 0.7
    • 右輪 = 掌控者[連接埠 4]搖桿[右搖桿 y]× 0.7
  2. 否則 → 停車。

搖桿往上為正(最大 +100),乘 0.7 後最高速度 70;想更快就把 0.7 調大。


讀不到數值?

  1. 「MBC 共用 → 連線正常?」是否:連接埠選錯、感應器不是 MakeBlock 版、或韌體是舊版(舊韌體請用上面的 v1 擴展)。
  2. 讀到 -32768:從開機到現在一次都沒讀到,同上檢查接線;或這款產品沒有這個值(例如 8 路循行者讀第 9 路)。
  3. 數值一直不變:確認插座片插緊、感應器指示燈有亮;「協議版本」積木讀到 2 代表通訊正常。
  4. 還是不行:LINE 聯絡我們,告訴我們主板型號、連接埠和「裝置 ID」積木的讀值。

🔧 自己寫 Arduino 程式也能用

擴展裡的函式庫 MBC_Sensors(src/MBC_Sensors.h)可以單獨用在 Arduino 程式:MBCPort p(1); p.begin(); int16_t pos = p.read(0x01);。協定很簡單:主機送 1 byte 值編號,感應器回 3 byte(值低、值高、檢查碼 = 編號 ^ 值低 ^ 值高),詳細封包格式見各產品的指令參考頁。

LINE 詢價選購指南