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 之後)
- 打開 mBlock 5 電腦版,左下「設備」加入你的主板(例如 mBot)。
- 把
.mext檔拖進 mBlock 視窗,積木區會多出「循行者」「測距者」「掌控者」「IMU 陀螺儀」「神攝手」「MBC 共用」六個分類(v2.2.0 匯入檔是七個:原本的「神攝手」改叫「神攝手舊版」,另多一個新版「神攝手」)。 - 右下「模式開關」切到 上傳,用主板的開機起始積木(例如「當 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 積木 0
120(120 = 前面沒東西),mm 積木 01200;測距者 8 路的方向 −8~+8(0 = 正前方、負 = 左、±8 = 沒目標)。 - 色相 −1 = 黑白灰:神攝手「色相」沒有顏色時回 −1;WRO 版色點顏色碼 255 = 色點沒開。
- 讀不到 = −32768:感應器沒接、線路掉 byte 或檢查碼錯時積木回 −32768,可用「連線正常?」判斷。
積木一覽
每個數值一顆積木,直接回傳使用者要的數字(int16);寫入命令會先回 ACK 再執行。下表由值表自動產生:
| 積木 | 傳回 | 產品 | 說明 |
|---|---|---|---|
| 神攝手舊版 連接埠 [埠] 色相 | -1~100 | 神攝手 學校版(舊版) | 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)(舊版) | 10 |
| 神攝手舊版 WRO 連接埠 [埠] 色點 [1~12] 鮮豔度 | 0~255 | 神攝手 WRO 版(HUE12)(舊版) | 20 |
| 神攝手舊版 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 陀螺儀 | 融合演算法對磁力計的信任度 0 |
| 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 路 | 第 1 |
| 循行者 連接埠 [埠] 第 [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 路 | 第 1 |
| 循行者 連接埠 [埠] 第 [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 = 中間,右/上為正(原始 0 |
| 掌控者 連接埠 [埠] [按鈕] 被按下? | 是/否 | 掌控者 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 路 | 第 1 |
| 測距者 8 路 連接埠 [埠] 第 [1~8] 顆距離 mm | 0~1200 mm | 測距者 8 路 | 第 1 |
| 測距者 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:
- 「當 mBot 啟動時」→ 等待 1 秒(感應器開機)→ 循行者[連接埠 1]切黑線。
- 重複執行:
- 誤差 = 循行者[連接埠 1]線的細位置(負 = 線在左)
- 轉向 = 誤差 × 0.6 +(誤差 − 上次誤差)× 2
- 左輪速度 = 基本速度 − 轉向,右輪速度 = 基本速度 + 轉向
- 上次誤差 = 誤差
線在左(誤差為負)時轉向為負,左輪=基本速度−轉向、右輪=基本速度+轉向,左輪減速、右輪加速,車子往左修正回到線上。基本速度從 40 開始,車子左右搖擺就調小 0.6、反應太慢就調大。調參方法可參考 SPIKE 循線 PID 教學,原理相同。
範例 2:mBot 避障(測距者 8 路)
測距者 8 路接在 mBot 連接埠 3;開機後等 3 秒讓 8 顆雷射初始化:
- 如果 測距者 8 路[連接埠 3]最近距離 cm < 20:
- 如果 最近方向 < 0(障礙在左)→ 左輪 40、右輪 −40(往右轉)
- 否則 → 左輪 −40、右輪 40(往左轉)
- 否則 → 兩輪 40 直走。
想要更聰明,可以改用「最空曠方向」直接朝最空的方向轉。
範例 3:mBot 手把坦克遙控(掌控者)
掌控者接在 mBot 連接埠 4:
- 如果 掌控者[連接埠 4]手把已連線?:
- 左輪 = 掌控者[連接埠 4]搖桿[左搖桿 y]× 0.7
- 右輪 = 掌控者[連接埠 4]搖桿[右搖桿 y]× 0.7
- 否則 → 停車。
搖桿往上為正(最大 +100),乘 0.7 後最高速度 70;想更快就把 0.7 調大。
讀不到數值?
- 「MBC 共用 → 連線正常?」是否:連接埠選錯、感應器不是 MakeBlock 版、或韌體是舊版(舊韌體請用上面的 v1 擴展)。
- 讀到 -32768:從開機到現在一次都沒讀到,同上檢查接線;或這款產品沒有這個值(例如 8 路循行者讀第 9 路)。
- 數值一直不變:確認插座片插緊、感應器指示燈有亮;「協議版本」積木讀到 2 代表通訊正常。
- 還是不行: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(值低、值高、檢查碼 = 編號 ^ 值低 ^ 值高),詳細封包格式見各產品的指令參考頁。