測距者 8 路 (TOF8) × mBlock × mBlock 5
這一頁只講 mBlock 5(MBC Pro Sensors 擴展):在 MakeBlock(mBot)+ mBlock 5 上用它讀測距者 8 路 (TOF8)的安裝步驟、每個值怎麼讀、能用的命令與範例。要換產品、主機或軟體,用上方的切換列。
要買哪個版本、怎麼接
買 MakeBlock 版(RJ25 接頭),插 mBot/Ranger/Orion/MegaPi 的 RJ25 連接埠;各主板可用哪幾個埠見 MakeBlock 積木擴展。
安裝與設定
你需要
- 感應器:測距者 8 路 (TOF8)(MakeBlock 版,出廠韌體跟其他版本不同),加上 mBot 插座片(接 RJ25 連接埠)。SPIKE、EV3、I2C 版不能直接接 Makeblock 主板。
- 主板:mBot(mCore)、mBot Ranger(Auriga)、Orion、Ultimate 2.0(MegaPi)、MegaPi Pro。mBot2(CyberPi)沒有 RJ25 連接埠,不支援。
- 軟體:mBlock 5 電腦版(上傳模式,程式燒進主板執行)。
- 擴展:MBC Pro Sensors v2.0.0(搭配 2026-10 之後出貨、協定 v2 的韌體)。
安裝軟體
- 到 mBlock 官網 安裝 mBlock 5 電腦版。
- 打開 mBlock 5,左下「設備」加入你的主板(例如 mBot)。
- 右下「模式開關」切到 上傳。
讓軟體認得感應器
要加一個擴展,積木區才會多出 MBC 的積木:
- 取得 v2.0.0 擴展:上架後在 mBlock 5「擴展中心」搜尋「MBC」就能加入。上架前(送審中),進階使用者可以到 ext.mblock.cc 登入自己的 Makeblock 帳號 → 我的擴展 → 匯入資料,上傳 mbc_pro_sensors_2.0.0_import.mext(約 1 分鐘),再按「下載」拿到
.mext。 - 把
.mext檔拖進 mBlock 視窗,積木區會多出「循行者」「測距者」「掌控者」「IMU 陀螺儀」「神攝手」「MBC 共用」六個分類。 - 用主板的開機起始積木(例如「當 mBot 啟動時」)開始寫程式,按「上傳」燒進主板。
- 打開範例:「檔案 → 從電腦打開」選
.mblock檔。
重要
新版擴展(v2)只能配新版韌體,舊版擴展(v1.0.0)只能配 2026-10 以前的韌體,兩者積木不相容。不確定手上感應器是哪一版:拖進 v2 擴展後用「MBC 共用 → 協議版本」積木讀,回 2 就是新韌體。舊版擴展在 下載專區。
接線
感應器 → mBot 插座片 → 主板的 RJ25 連接埠(UART 38400)。積木上選的是連接埠號碼,擴展會依主板自動換成正確的腳位。
| 主板 | 可用連接埠 | 說明 |
|---|---|---|
| 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 擴充板 |
本頁範例接 mBot 連接埠 1;換埠就把積木上的連接埠數字改掉。換別的主板時,把「當 mBot 啟動時」換成那塊主板的起始積木。
開機要等 2~4 秒
測距者 8 路不用校準,插上去就能用;開機後要等 2~4 秒讓 8 顆雷射準備好,這段時間全部讀到 120(公分)。程式開頭先等幾秒再讀距離。
| 第幾路 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| 朝哪裡 | 正左邊 | 左前 60° | 左前 30° | 正前方 | 正前方 | 右前 30° | 右前 60° | 正右邊 |
上表是感應器正面朝前、元件面朝上的裝法。手放在機器人左邊,範例 1 應該顯示負的方向;顯示正的代表裝反了,範例裡的「左轉」「右轉」也要對調。
第一次測試
- 程式開頭先「等待 1 秒」讓感應器開機,太早讀會讀到
-32768。 - 用「MBC 共用 → 連線正常?」積木確認接線,再看數值。
- 上傳本頁範例 1,數字跟著感應器變化,就是接好了。
常見問題
- 「連線正常?」是否? 連接埠選錯、感應器不是 MakeBlock 版、或韌體是舊版(舊韌體請用 v1 擴展)。
- 讀到
-32768? 從開機到現在一次都沒讀到:檢查接線;或這款產品沒有這個值。 - 數值一直不變? 確認插座片插緊、感應器指示燈有亮;「協議版本」積木讀到 2 代表通訊正常。
- 積木圖是英文? 控制與運算積木(forever、if…then…else、wait、set…to)在中文介面就是「重複無限次」「如果…那麼…否則」「等待…秒」「變數設為」。
- 還是不行? LINE 聯絡我們,告訴我們主板型號、連接埠和「裝置 ID」積木的讀值。
讀值
裝好 MBC Pro Sensors 擴展後,在「測距者 8 路」分類找積木,連接埠選感應器實際插的孔。
最近距離 cm nearCm
| 範圍 | 意思 |
|---|---|
0~120 cm |
8 顆裡最小的距離 0~120 cm(失效那顆以 120 參與),120 = 四周沒東西 |
(測距者 8 路 連接埠 [1 v] 最近距離 cm :: sensing)
積木傳回 最近距離 cm(0~120 cm)。主機送 [01] → 回 [值低][值高][01 ^ 值低 ^ 值高],值 = int16 小端。
最近方向 nearDir
| 範圍 | 意思 |
|---|---|
-8~+8 |
最近目標在哪個方向:−7(正左)~ +7(正右),0 = 正前方,負 = 左;±8 = 四周沒東西(沿用上次偏向側) |
(測距者 8 路 連接埠 [1 v] 最近方向 :: sensing)
積木傳回 最近方向(-8~+8)。主機送 [02] → 回 [值低][值高][02 ^ 值低 ^ 值高],值 = int16 小端。
最空曠距離 cm farCm
| 範圍 | 意思 |
|---|---|
0~120 cm |
8 顆裡最大的距離 0~120 cm(壞掉那顆永遠 120,會被當成最空曠) |
(測距者 8 路 連接埠 [1 v] 最空曠距離 cm :: sensing)
積木傳回 最空曠距離 cm(0~120 cm)。主機送 [03] → 回 [值低][值高][03 ^ 值低 ^ 值高],值 = int16 小端。
最空曠方向 farDir
| 範圍 | 意思 |
|---|---|
-7~+7 |
最遠(最空曠)在哪個方向:−7 ~ +7,0 = 正前方,負 = 左;8 顆全 120 時 = 0 |
(測距者 8 路 連接埠 [1 v] 最空曠方向 :: sensing)
積木傳回 最空曠方向(-7~+7)。主機送 [04] → 回 [值低][值高][04 ^ 值低 ^ 值高],值 = int16 小端。
正前方 cm frontCm
| 範圍 | 意思 |
|---|---|
0~120 cm |
第 4、5 顆(兩顆平行朝前)平均 0~120 cm;EV3 模式 3、SPIKE 模式 6 給的是同一個值的 mm;0x22 的 C 是 min(第 4, 第 5 顆) 不是平均(見 10) |
(測距者 8 路 連接埠 [1 v] 正前方距離 cm :: sensing)
積木傳回 正前方 cm(0~120 cm)。主機送 [05] → 回 [值低][值高][05 ^ 值低 ^ 值高],值 = int16 小端。
最近距離 mm nearMm
| 範圍 | 意思 |
|---|---|
0~1200 mm |
8 顆 mm 的最小值 0~1200(失效那顆以 1200 參與),1200 = 四周沒東西 |
(測距者 8 路 連接埠 [1 v] 最近距離 mm :: sensing)
積木傳回 最近距離 mm(0~1200 mm)。主機送 [06] → 回 [值低][值高][06 ^ 值低 ^ 值高],值 = int16 小端。
初始化位元圖 initOk
| 範圍 | 意思 |
|---|---|
0~255 bit |
bit0 = 第 1 顆(最左)… bit7 = 第 8 顆,1 = 那顆開機初始化成功(8 顆約 2~4 秒,失敗不重試);255 = 全部好 |
(測距者 8 路 連接埠 [1 v] 初始化位元圖 :: sensing)
積木傳回 初始化位元圖(0~255 bit)。主機送 [07] → 回 [值低][值高][07 ^ 值低 ^ 值高],值 = int16 小端。
故障位元圖 fault
| 範圍 | 意思 |
|---|---|
0~255 bit |
bit0 = 第 1 顆 … bit7 = 第 8 顆,1 = 那顆目前失效(I2C 讀失敗或 200 ms 沒更新);失效那顆距離回 120/1200 |
(測距者 8 路 連接埠 [1 v] 故障位元圖 :: sensing)
積木傳回 故障位元圖(0~255 bit)。主機送 [08] → 回 [值低][值高][08 ^ 值低 ^ 值高],值 = int16 小端。
正前方距離 mm frontMm
| 範圍 | 意思 |
|---|---|
0~1200 mm |
第 4、5 顆(正前方兩顆)平均,0~1200 mm;1200 = 前面沒東西。cm 版是 05 |
(測距者 8 路 連接埠 [1 v] 正前方距離 mm :: sensing)
積木傳回 正前方距離 mm(0~1200 mm)。主機送 [09] → 回 [值低][值高][09 ^ 值低 ^ 值高],值 = int16 小端。
第 1~8 顆距離 cm distCm
| 範圍 | 意思 |
|---|---|
0~120 cm |
第 1 |
(測距者 8 路 連接埠 [1 v] 第 [1 v] 顆距離 cm :: sensing)
積木傳回 第 1~8 顆距離 cm(0~120 cm)。主機送 [10] → 回 [值低][值高][10 ^ 值低 ^ 值高],值 = int16 小端;第 N 路的編號 = 0x10 + (N − 1)。
第 1~8 顆距離 mm distMm
| 範圍 | 意思 |
|---|---|
0~1200 mm |
第 1 |
(測距者 8 路 連接埠 [1 v] 第 [1 v] 顆距離 mm :: sensing)
積木傳回 第 1~8 顆距離 mm(0~1200 mm)。主機送 [18] → 回 [值低][值高][18 ^ 值低 ^ 值高],值 = int16 小端;第 N 路的編號 = 0x18 + (N − 1)。
命令
更新全部數值 readAll
一次讀整張值表進快取(FD 整包);接下來 10 ms 內的讀值積木直接用快取,不再逐一詢問
測距者 8 路 連接埠 [1 v] 更新全部數值 :: sensing
範例
這一頁是寫給完全沒寫過程式的人:用 mBlock 5 的積木在 mBot 上讀測距者 8 路。5 個範例從「把數字變成聲音」開始,一步一步做到會自己跑的車子。每個範例都有積木圖、可下載的專案檔,還有一支做同樣事情的 Arduino 程式。
| 寫法 | 適合誰 | 怎麼打開範例檔 |
|---|---|---|
| 🟧 mBlock 5 電腦版(積木,上傳模式)+ MBC 感應器擴展 v2 | 學校、第一次用 mBot 的人 | 下載 .mblock → 打開 mBlock 5 → 「檔案 → 從電腦打開」→ 選檔案 → 右下切到「上傳」→ 按「上傳」 |
| 🔧 Arduino IDE(文字程式) | 想看積木背後長什麼樣、或自己寫程式的人 | 下載 .ino → 裝好 Makeblock 與 MBC_Sensors 函式庫(見 MakeBlock 積木擴展)→ 主板選 Arduino Uno → 上傳 |
重要
- 感應器要是 MakeBlock 版、2026-10 之後的協定 v2 韌體,經 mBot 插座片接 RJ25 連接埠;擴展要用 v2.0.0(舊韌體配舊版 v1 擴展,兩者不能混用)。
- 主板是 mBot(mCore)。mBot Ranger、Orion、MegaPi 也能用,但要把「當 mBot 啟動時」換成那塊主板的起始積木、連接埠改成它能用的號碼(見 支援的主板與連接埠);mBot2(CyberPi)沒有 RJ25,不支援。
- 積木圖裡的控制與運算積木(forever、if…then…else、wait、set…to)以英文顯示,在 mBlock 的中文介面就是「重複無限次」「如果…那麼…否則」「等待…秒」「變數設為」。
開始之前
感應器 → mBot 插座片 → 主板 RJ25 連接埠(S1 = 主機送、S2 = 主機收,UART 38400)。
- 裝擴展:到 MakeBlock 積木擴展 取得 MBC Pro Sensors v2.0.0 的
.mext,拖進 mBlock 5 視窗;左下「設備」加入 mBot,右下切到「上傳」。 - 接線:測距者 → mBot 插座片 → mBot 連接埠 3(這頁所有範例都接這一埠;換埠就把積木上的連接埠數字改掉)。
- 先開機再讀:每個範例一開始都「等待 3 秒」讓感應器開機;8 顆雷射初始化要 2~4 秒,這段時間讀到 120 是正常的。
- 測距者 8 路不用校準。8 顆雷射排成半圓:第 1 顆正左、第 4、5 顆正前、第 8 顆正右(每顆隔 30°);「最近方向」負=左、0=正前方、正=右;四周沒東西讀 120。
- 先用範例 2 確認左右:手放在車子左邊要亮紅燈;亮藍燈代表感應器裝反了,後面範例的左右會相反。
這頁會用到的積木
每顆讀值積木就是感應器值表裡的一個「值編號」(跟 Arduino I2C 版的暫存器編號相同);完整積木表在 MakeBlock 積木擴展。
| 積木 | 傳回 | 意思 |
|---|---|---|
| 測距者 8 路 連接埠 [3] 最近距離 cm | 0~120 cm | 8 顆裡最小的距離 0~120 cm(失效那顆以 120 參與),120 = 四周沒東西 |
| 測距者 8 路 連接埠 [3] 最近方向 | -8~+8 | 最近目標在哪個方向:−7(正左)~ +7(正右),0 = 正前方,負 = 左;±8 = 四周沒東西(沿用上次偏向側) |
| 測距者 8 路 連接埠 [3] 最空曠方向 | -7~+7 | 最遠(最空曠)在哪個方向:−7 ~ +7,0 = 正前方,負 = 左;8 顆全 120 時 = 0 |
這頁的範例
注意
.mblock是由產生器照 mBlock 5 的存檔格式產生的,還沒在 mBlock 5 裡開啟驗證(等擴展 v2 上架後補驗)。開不起來或積木顯示空白,請先確認 v2 擴展已拖進 mBlock、設備是 mBot,或照下面的積木圖自己拼(5 分鐘內拼得完);也歡迎 LINE 告訴我們。
範例 1:最近距離變音高
這個範例會做什麼:mBot 沒有螢幕,這個範例把「最近距離」(8 顆裡最小的,0 ~ 120 公分)變成蜂鳴器的音高:不管東西從哪個方向靠近,音都會變低。先學會「讀到數字」。
要準備什麼
- mBot(mCore 主板)+ mBlock 5 電腦版
- 測距者 8 路(MakeBlock 版)+ mBot 插座片
怎麼接:測距者 → mBot 插座片 → mBot 連接埠 3。感應器裝在車頭最前面、第 4、5 顆雷射朝正前方(第 1 顆正左、第 8 顆正右)。
下載程式
| mBlock 5 專案 | 等價 Arduino 程式 |
|---|---|
| ex01_theremin.mblock | ex01_theremin.ino |
mBlock 積木(照著拼就好)
當 mBot 啟動時 :: events hat wait (3) seconds forever 播放音頻 ((200) + ((測距者 8 路 連接埠 [3 v] 最近距離 cm :: #0A9E8F) * (10))) 赫茲,持續 (0.1) 秒 :: sound end
🔧 等價 Arduino 程式(mBot)
// 測距者 8 路 × mBlock 5 範例 1:最近距離變音高(mBot 等價 Arduino 程式)
// 接線:測距者 → mBot 插座片 → mBot 連接埠 3。感應器裝在車頭最前面、第 4、5 顆雷射朝正前方(第 1 顆正左、第 8 顆正右)。
// 跟 mBlock 積木範例做的事完全一樣,給想看「積木背後長什麼樣」或用 Arduino IDE 的人。
// 需要的函式庫:
// 1. Makeblock(Arduino IDE「函式庫管理員」搜尋 Makeblock,或 mBlock 5 安裝資料夾裡的 Makeblock 函式庫)
// 2. MBC_Sensors v2:擴展 .mext 解壓後的 src/ 四個檔(MBC_Sensors.h/.cpp、mbc_proto.h、mbc_ids.h),
// 放進 文件/Arduino/libraries/MBC_Sensors/ 就能 #include <MBC_Sensors.h>(https://mbc-pro-sensors.github.io/makeblock.html)
// 主板選 Arduino Uno(mBot 的 mCore 就是 Uno),上傳後拔掉 USB 用電池跑。
#include <MeMCore.h> // mBot(mCore):馬達、LED、蜂鳴器
#include <SoftwareSerial.h>
#include <MBC_Sensors.h> // MBC 感應器 v2(跟 mBlock 擴展同一份函式庫)
MBCPort mbc_port3(3); // 感應器接在 mBot 連接埠 3
MeDCMotor motorL(9); // 左輪(M1)
MeDCMotor motorR(10); // 右輪(M2)
MeRGBLed rgbled(7, 2); // 板載 RGB LED(2 顆)
MeBuzzer buzzer; // 板載蜂鳴器
// 左/右輪動力 -100~100(正 = 往前):mBot 的左輪裝反,所以 M1 給負的;% 換算成 PWM 0~255
void wheels(int l, int r) {
l = constrain(l, -100, 100); r = constrain(r, -100, 100);
motorL.run(-l * 255 / 100);
motorR.run(r * 255 / 100);
}
void setup() { // 跟 mBlock 產生的程式一樣,積木全部在 setup() 裡跑
mbc_port3.begin();
delay(3000); // 等 3 秒讓 8 顆雷射初始化
while (1) { // 一直重複
buzzer.tone((200 + (mbcRead(mbc_port3, 0x01) * 10)), 100); // 音高 = 200 + 最近距離 × 10 赫茲,響 0.1 秒
}
}
void loop() {} // 這裡什麼都沒有:上面的積木不會結束一步一步看懂程式
- 等 3 秒讓 8 顆雷射初始化
- 一直重複
- 音高 = 200 + 最近距離 × 10 赫茲,響 0.1 秒
跑起來應該看到什麼:四周沒東西:1400 赫茲高音。手從左邊、前面或右邊靠近,音都變低;10 公分時 300 赫茲。
常見問題
- 聽不到聲音? → mBot 的蜂鳴器在主板上,聲音不大;把耳朵靠近,或把 0.1 秒改成 0.3 秒。
- 一開機就是低音? → 前 3 秒雷射還在初始化會讀到 120(高音)才對;一直低音代表附近有東西(桌面、牆),把車子放空曠一點。
- 左右方向跟範例說的相反? → 感應器裝反了(元件面朝下或轉了 180 度)。用範例 2 確認:手放車子左邊要亮紅燈。
- 什麼都沒反應、或讀值一直是 -32768? → 連接埠選錯(這頁都接連接埠 3)、插座片沒插緊、或感應器不是 MakeBlock 版。先用「MBC 共用 → 連線正常?」積木確認;「協議版本」讀到 2 才是新韌體(舊韌體請改用舊版擴展 v1)。
- 上傳失敗、或積木是空白的? → 確認右下角切到「上傳」模式、擴展 v2 已拖進 mBlock、USB 線接的是 mBot 主板。
範例 2:東西在哪邊就亮什麼燈
這個範例會做什麼:「最近方向」告訴你最近的東西在哪個方向:負=左、0=正前方、正=右。用「如果…就…否則…」:60 公分內有東西時,左邊紅燈、右邊藍燈、正前方綠燈;沒東西關燈。
要準備什麼
- mBot(mCore 主板)+ mBlock 5 電腦版
- 測距者 8 路(MakeBlock 版)+ mBot 插座片
怎麼接:測距者 → mBot 插座片 → mBot 連接埠 3。感應器裝在車頭最前面、第 4、5 顆雷射朝正前方(第 1 顆正左、第 8 顆正右)。
下載程式
| mBlock 5 專案 | 等價 Arduino 程式 |
|---|---|
| ex02_led_direction.mblock | ex02_led_direction.ino |
mBlock 積木(照著拼就好)
當 mBot 啟動時 :: events hat
wait (3) seconds
forever
if <(測距者 8 路 連接埠 [3 v] 最近距離 cm :: #0A9E8F) > (60)> then
LED 燈位置 [全部 v] 的三原色數值為 紅 (0) 綠 (0) 藍 (0) :: looks
else
if <(測距者 8 路 連接埠 [3 v] 最近方向 :: #0A9E8F) < (0)> then
LED 燈位置 [全部 v] 的三原色數值為 紅 (255) 綠 (0) 藍 (0) :: looks
else
if <(測距者 8 路 連接埠 [3 v] 最近方向 :: #0A9E8F) > (0)> then
LED 燈位置 [全部 v] 的三原色數值為 紅 (0) 綠 (0) 藍 (255) :: looks
else
LED 燈位置 [全部 v] 的三原色數值為 紅 (0) 綠 (255) 藍 (0) :: looks
end
end
end
end
🔧 等價 Arduino 程式(mBot)
// 測距者 8 路 × mBlock 5 範例 2:東西在哪邊就亮什麼燈(mBot 等價 Arduino 程式)
// 接線:測距者 → mBot 插座片 → mBot 連接埠 3。感應器裝在車頭最前面、第 4、5 顆雷射朝正前方(第 1 顆正左、第 8 顆正右)。
// 跟 mBlock 積木範例做的事完全一樣,給想看「積木背後長什麼樣」或用 Arduino IDE 的人。
// 需要的函式庫:
// 1. Makeblock(Arduino IDE「函式庫管理員」搜尋 Makeblock,或 mBlock 5 安裝資料夾裡的 Makeblock 函式庫)
// 2. MBC_Sensors v2:擴展 .mext 解壓後的 src/ 四個檔(MBC_Sensors.h/.cpp、mbc_proto.h、mbc_ids.h),
// 放進 文件/Arduino/libraries/MBC_Sensors/ 就能 #include <MBC_Sensors.h>(https://mbc-pro-sensors.github.io/makeblock.html)
// 主板選 Arduino Uno(mBot 的 mCore 就是 Uno),上傳後拔掉 USB 用電池跑。
#include <MeMCore.h> // mBot(mCore):馬達、LED、蜂鳴器
#include <SoftwareSerial.h>
#include <MBC_Sensors.h> // MBC 感應器 v2(跟 mBlock 擴展同一份函式庫)
MBCPort mbc_port3(3); // 感應器接在 mBot 連接埠 3
MeDCMotor motorL(9); // 左輪(M1)
MeDCMotor motorR(10); // 右輪(M2)
MeRGBLed rgbled(7, 2); // 板載 RGB LED(2 顆)
MeBuzzer buzzer; // 板載蜂鳴器
// 左/右輪動力 -100~100(正 = 往前):mBot 的左輪裝反,所以 M1 給負的;% 換算成 PWM 0~255
void wheels(int l, int r) {
l = constrain(l, -100, 100); r = constrain(r, -100, 100);
motorL.run(-l * 255 / 100);
motorR.run(r * 255 / 100);
}
void setup() { // 跟 mBlock 產生的程式一樣,積木全部在 setup() 裡跑
mbc_port3.begin();
delay(3000); // 等 3 秒讓 8 顆雷射初始化
while (1) { // 一直重複
if ((mbcRead(mbc_port3, 0x01) > 60)) { // 如果最近距離大於 60
rgbled.setColor(0, 0, 0, 0); rgbled.show(); // 60 公分內沒東西:關燈
} else {
if ((mbcRead(mbc_port3, 0x02) < 0)) { // 否則,如果最近方向小於 0(左)
rgbled.setColor(0, 255, 0, 0); rgbled.show(); // 最近的東西在左邊:紅燈
} else {
if ((mbcRead(mbc_port3, 0x02) > 0)) { // 否則,如果最近方向大於 0(右)
rgbled.setColor(0, 0, 0, 255); rgbled.show(); // 在右邊:藍燈
} else {
rgbled.setColor(0, 0, 255, 0); rgbled.show(); // 正前方:綠燈
}
}
}
}
}
void loop() {} // 這裡什麼都沒有:上面的積木不會結束一步一步看懂程式
- 等 3 秒讓 8 顆雷射初始化
- 一直重複
- 如果最近距離大於 60
- 60 公分內沒東西:關燈
- 否則:
- 否則,如果最近方向小於 0(左)
- 最近的東西在左邊:紅燈
- 否則:
- 否則,如果最近方向大於 0(右)
- 在右邊:藍燈
- 否則:
- 正前方:綠燈
- 否則,如果最近方向大於 0(右)
- 否則,如果最近方向小於 0(左)
- 如果最近距離大於 60
跑起來應該看到什麼:手放在車子左邊:紅燈;右邊:藍燈;正前方:綠燈;拿開(60 公分外)燈熄掉。
常見問題
- 左右方向跟範例說的相反? → 感應器裝反了(元件面朝下或轉了 180 度)。用範例 2 確認:手放車子左邊要亮紅燈。
- 什麼都沒反應、或讀值一直是 -32768? → 連接埠選錯(這頁都接連接埠 3)、插座片沒插緊、或感應器不是 MakeBlock 版。先用「MBC 共用 → 連線正常?」積木確認;「協議版本」讀到 2 才是新韌體(舊韌體請改用舊版擴展 v1)。
- 上傳失敗、或積木是空白的? → 確認右下角切到「上傳」模式、擴展 v2 已拖進 mBlock、USB 線接的是 mBot 主板。
範例 3:一個輪子把車頭轉向最近的東西
這個範例會做什麼:只用左輪:動力 = 最近方向 × 6。東西在右邊(正)左輪往前轉、車頭往右;在左邊(負)左輪倒轉、車頭往左;正前方(0)不動。60 公分內沒東西就停。放在地上看車頭跟著你的手轉。
要準備什麼
- mBot(mCore 主板)+ mBlock 5 電腦版
- mBot 兩輪小車(左輪接 M1、右輪接 M2,出廠就是這樣接)
- 測距者 8 路(MakeBlock 版)+ mBot 插座片
- 幾個箱子當障礙物
怎麼接:測距者 → mBot 插座片 → mBot 連接埠 3。感應器裝在車頭最前面、第 4、5 顆雷射朝正前方(第 1 顆正左、第 8 顆正右)。
下載程式
| mBlock 5 專案 | 等價 Arduino 程式 |
|---|---|
| ex03_one_wheel.mblock | ex03_one_wheel.ino |
mBlock 積木(照著拼就好)
當 mBot 啟動時 :: events hat
wait (3) seconds
forever
if <(測距者 8 路 連接埠 [3 v] 最近距離 cm :: #0A9E8F) > (60)> then
停止移動 :: motion
else
左輪動力 ((測距者 8 路 連接埠 [3 v] 最近方向 :: #0A9E8F) * (6)) %,右輪動力 (0) % :: motion
end
end
🔧 等價 Arduino 程式(mBot)
// 測距者 8 路 × mBlock 5 範例 3:一個輪子把車頭轉向最近的東西(mBot 等價 Arduino 程式)
// 接線:測距者 → mBot 插座片 → mBot 連接埠 3。感應器裝在車頭最前面、第 4、5 顆雷射朝正前方(第 1 顆正左、第 8 顆正右)。
// 跟 mBlock 積木範例做的事完全一樣,給想看「積木背後長什麼樣」或用 Arduino IDE 的人。
// 需要的函式庫:
// 1. Makeblock(Arduino IDE「函式庫管理員」搜尋 Makeblock,或 mBlock 5 安裝資料夾裡的 Makeblock 函式庫)
// 2. MBC_Sensors v2:擴展 .mext 解壓後的 src/ 四個檔(MBC_Sensors.h/.cpp、mbc_proto.h、mbc_ids.h),
// 放進 文件/Arduino/libraries/MBC_Sensors/ 就能 #include <MBC_Sensors.h>(https://mbc-pro-sensors.github.io/makeblock.html)
// 主板選 Arduino Uno(mBot 的 mCore 就是 Uno),上傳後拔掉 USB 用電池跑。
#include <MeMCore.h> // mBot(mCore):馬達、LED、蜂鳴器
#include <SoftwareSerial.h>
#include <MBC_Sensors.h> // MBC 感應器 v2(跟 mBlock 擴展同一份函式庫)
MBCPort mbc_port3(3); // 感應器接在 mBot 連接埠 3
MeDCMotor motorL(9); // 左輪(M1)
MeDCMotor motorR(10); // 右輪(M2)
MeRGBLed rgbled(7, 2); // 板載 RGB LED(2 顆)
MeBuzzer buzzer; // 板載蜂鳴器
// 左/右輪動力 -100~100(正 = 往前):mBot 的左輪裝反,所以 M1 給負的;% 換算成 PWM 0~255
void wheels(int l, int r) {
l = constrain(l, -100, 100); r = constrain(r, -100, 100);
motorL.run(-l * 255 / 100);
motorR.run(r * 255 / 100);
}
void setup() { // 跟 mBlock 產生的程式一樣,積木全部在 setup() 裡跑
mbc_port3.begin();
delay(3000); // 等 3 秒讓 8 顆雷射初始化
while (1) { // 一直重複
if ((mbcRead(mbc_port3, 0x01) > 60)) { // 如果最近距離大於 60
wheels(0, 0); // 60 公分內沒東西:停
} else {
wheels((mbcRead(mbc_port3, 0x02) * 6), 0); // 左輪動力 = 最近方向 × 6(−42 ~ +42),右輪 0
}
}
}
void loop() {} // 這裡什麼都沒有:上面的積木不會結束一步一步看懂程式
- 等 3 秒讓 8 顆雷射初始化
- 一直重複
- 如果最近距離大於 60
- 60 公分內沒東西:停
- 否則:
- 左輪動力 = 最近方向 × 6(−42 ~ +42),右輪 0
- 如果最近距離大於 60
跑起來應該看到什麼:手放在車子右前方,左輪往前轉、車頭轉向你的手,轉到正前方就停;手移到左邊,左輪倒轉。
常見問題
- 車子往反方向轉、越修越歪? → 左右輪的「+」「-」對調(或把左輪、右輪的動力互換)。mBot 出廠左輪 M1、右輪 M2,自己接線的請確認。
- 左右方向跟範例說的相反? → 感應器裝反了(元件面朝下或轉了 180 度)。用範例 2 確認:手放車子左邊要亮紅燈。
- 什麼都沒反應、或讀值一直是 -32768? → 連接埠選錯(這頁都接連接埠 3)、插座片沒插緊、或感應器不是 MakeBlock 版。先用「MBC 共用 → 連線正常?」積木確認;「協議版本」讀到 2 才是新韌體(舊韌體請改用舊版擴展 v1)。
- 上傳失敗、或積木是空白的? → 確認右下角切到「上傳」模式、擴展 v2 已拖進 mBlock、USB 線接的是 mBot 主板。
範例 4:避障開車
這個範例會做什麼:車子直走;20 公分內有東西時看它在哪邊:在左邊就原地右轉、在右邊(或正前方)就原地左轉,轉到前面沒東西再直走。
要準備什麼
- mBot(mCore 主板)+ mBlock 5 電腦版
- mBot 兩輪小車(左輪接 M1、右輪接 M2,出廠就是這樣接)
- 測距者 8 路(MakeBlock 版)+ mBot 插座片
- 幾個箱子當障礙物
怎麼接:測距者 → mBot 插座片 → mBot 連接埠 3。感應器裝在車頭最前面、第 4、5 顆雷射朝正前方(第 1 顆正左、第 8 顆正右)。
下載程式
| mBlock 5 專案 | 等價 Arduino 程式 |
|---|---|
| ex04_avoid.mblock | ex04_avoid.ino |
mBlock 積木(照著拼就好)
當 mBot 啟動時 :: events hat
wait (3) seconds
forever
if <(測距者 8 路 連接埠 [3 v] 最近距離 cm :: #0A9E8F) < (20)> then
if <(測距者 8 路 連接埠 [3 v] 最近方向 :: #0A9E8F) < (0)> then
左輪動力 (40) %,右輪動力 (-40) % :: motion
else
左輪動力 (-40) %,右輪動力 (40) % :: motion
end
else
左輪動力 (40) %,右輪動力 (40) % :: motion
end
end
🔧 等價 Arduino 程式(mBot)
// 測距者 8 路 × mBlock 5 範例 4:避障開車(mBot 等價 Arduino 程式)
// 接線:測距者 → mBot 插座片 → mBot 連接埠 3。感應器裝在車頭最前面、第 4、5 顆雷射朝正前方(第 1 顆正左、第 8 顆正右)。
// 跟 mBlock 積木範例做的事完全一樣,給想看「積木背後長什麼樣」或用 Arduino IDE 的人。
// 需要的函式庫:
// 1. Makeblock(Arduino IDE「函式庫管理員」搜尋 Makeblock,或 mBlock 5 安裝資料夾裡的 Makeblock 函式庫)
// 2. MBC_Sensors v2:擴展 .mext 解壓後的 src/ 四個檔(MBC_Sensors.h/.cpp、mbc_proto.h、mbc_ids.h),
// 放進 文件/Arduino/libraries/MBC_Sensors/ 就能 #include <MBC_Sensors.h>(https://mbc-pro-sensors.github.io/makeblock.html)
// 主板選 Arduino Uno(mBot 的 mCore 就是 Uno),上傳後拔掉 USB 用電池跑。
#include <MeMCore.h> // mBot(mCore):馬達、LED、蜂鳴器
#include <SoftwareSerial.h>
#include <MBC_Sensors.h> // MBC 感應器 v2(跟 mBlock 擴展同一份函式庫)
MBCPort mbc_port3(3); // 感應器接在 mBot 連接埠 3
MeDCMotor motorL(9); // 左輪(M1)
MeDCMotor motorR(10); // 右輪(M2)
MeRGBLed rgbled(7, 2); // 板載 RGB LED(2 顆)
MeBuzzer buzzer; // 板載蜂鳴器
// 左/右輪動力 -100~100(正 = 往前):mBot 的左輪裝反,所以 M1 給負的;% 換算成 PWM 0~255
void wheels(int l, int r) {
l = constrain(l, -100, 100); r = constrain(r, -100, 100);
motorL.run(-l * 255 / 100);
motorR.run(r * 255 / 100);
}
void setup() { // 跟 mBlock 產生的程式一樣,積木全部在 setup() 裡跑
mbc_port3.begin();
delay(3000); // 等 3 秒讓 8 顆雷射初始化
while (1) { // 一直重複
if ((mbcRead(mbc_port3, 0x01) < 20)) { // 如果最近距離小於 20
if ((mbcRead(mbc_port3, 0x02) < 0)) { // 如果最近方向小於 0(左)
wheels(40, -40); // 障礙在左邊:原地右轉
} else {
wheels(-40, 40); // 障礙在右邊或正前方:原地左轉
}
} else {
wheels(40, 40); // 前面是空的:直走
}
}
}
void loop() {} // 這裡什麼都沒有:上面的積木不會結束一步一步看懂程式
- 等 3 秒讓 8 顆雷射初始化
- 一直重複
- 如果最近距離小於 20
- 如果最近方向小於 0(左)
- 障礙在左邊:原地右轉
- 否則:
- 障礙在右邊或正前方:原地左轉
- 否則:
- 前面是空的:直走
- 如果最近方向小於 0(左)
- 如果最近距離小於 20
跑起來應該看到什麼:車子在箱子之間自己繞,碰到東西前就轉開。
常見問題
- 側面擦到箱子? → 側面的雷射(第 1、8 顆)也算在「最近距離」裡,把 20 改大(例如 30)車子就會離遠一點。
- 車子往反方向轉、越修越歪? → 左右輪的「+」「-」對調(或把左輪、右輪的動力互換)。mBot 出廠左輪 M1、右輪 M2,自己接線的請確認。
- 左右方向跟範例說的相反? → 感應器裝反了(元件面朝下或轉了 180 度)。用範例 2 確認:手放車子左邊要亮紅燈。
- 什麼都沒反應、或讀值一直是 -32768? → 連接埠選錯(這頁都接連接埠 3)、插座片沒插緊、或感應器不是 MakeBlock 版。先用「MBC 共用 → 連線正常?」積木確認;「協議版本」讀到 2 才是新韌體(舊韌體請改用舊版擴展 v1)。
- 上傳失敗、或積木是空白的? → 確認右下角切到「上傳」模式、擴展 v2 已拖進 mBlock、USB 線接的是 mBot 主板。
範例 5:朝最空曠的地方走
這個範例會做什麼:範例 4 遇到東西才轉,這個範例一邊走一邊往「最空曠方向」偏:轉向 = 最空曠方向 × 6,左輪 35 + 轉向、右輪 35 − 轉向,車子會自己繞開障礙、走到最寬的地方(綠燈)。真的太近(10 公分內)就倒退、亮紅燈。
要準備什麼
- mBot(mCore 主板)+ mBlock 5 電腦版
- mBot 兩輪小車(左輪接 M1、右輪接 M2,出廠就是這樣接)
- 測距者 8 路(MakeBlock 版)+ mBot 插座片
- 幾個箱子當障礙物
怎麼接:測距者 → mBot 插座片 → mBot 連接埠 3。感應器裝在車頭最前面、第 4、5 顆雷射朝正前方(第 1 顆正左、第 8 顆正右)。
下載程式
| mBlock 5 專案 | 等價 Arduino 程式 |
|---|---|
| ex05_open_space.mblock | ex05_open_space.ino |
mBlock 積木(照著拼就好)
當 mBot 啟動時 :: events hat
wait (3) seconds
forever
if <(測距者 8 路 連接埠 [3 v] 最近距離 cm :: #0A9E8F) < (10)> then
LED 燈位置 [全部 v] 的三原色數值為 紅 (255) 綠 (0) 藍 (0) :: looks
左輪動力 (-30) %,右輪動力 (-30) % :: motion
else
LED 燈位置 [全部 v] 的三原色數值為 紅 (0) 綠 (255) 藍 (0) :: looks
set [轉向 v] to ((測距者 8 路 連接埠 [3 v] 最空曠方向 :: #0A9E8F) * (6))
左輪動力 ((35) + (轉向)) %,右輪動力 ((35) - (轉向)) % :: motion
end
end
🔧 等價 Arduino 程式(mBot)
// 測距者 8 路 × mBlock 5 範例 5:朝最空曠的地方走(mBot 等價 Arduino 程式)
// 接線:測距者 → mBot 插座片 → mBot 連接埠 3。感應器裝在車頭最前面、第 4、5 顆雷射朝正前方(第 1 顆正左、第 8 顆正右)。
// 跟 mBlock 積木範例做的事完全一樣,給想看「積木背後長什麼樣」或用 Arduino IDE 的人。
// 需要的函式庫:
// 1. Makeblock(Arduino IDE「函式庫管理員」搜尋 Makeblock,或 mBlock 5 安裝資料夾裡的 Makeblock 函式庫)
// 2. MBC_Sensors v2:擴展 .mext 解壓後的 src/ 四個檔(MBC_Sensors.h/.cpp、mbc_proto.h、mbc_ids.h),
// 放進 文件/Arduino/libraries/MBC_Sensors/ 就能 #include <MBC_Sensors.h>(https://mbc-pro-sensors.github.io/makeblock.html)
// 主板選 Arduino Uno(mBot 的 mCore 就是 Uno),上傳後拔掉 USB 用電池跑。
#include <MeMCore.h> // mBot(mCore):馬達、LED、蜂鳴器
#include <SoftwareSerial.h>
#include <MBC_Sensors.h> // MBC 感應器 v2(跟 mBlock 擴展同一份函式庫)
MBCPort mbc_port3(3); // 感應器接在 mBot 連接埠 3
MeDCMotor motorL(9); // 左輪(M1)
MeDCMotor motorR(10); // 右輪(M2)
MeRGBLed rgbled(7, 2); // 板載 RGB LED(2 顆)
MeBuzzer buzzer; // 板載蜂鳴器
float turn = 0; // 變數:轉向
// 左/右輪動力 -100~100(正 = 往前):mBot 的左輪裝反,所以 M1 給負的;% 換算成 PWM 0~255
void wheels(int l, int r) {
l = constrain(l, -100, 100); r = constrain(r, -100, 100);
motorL.run(-l * 255 / 100);
motorR.run(r * 255 / 100);
}
void setup() { // 跟 mBlock 產生的程式一樣,積木全部在 setup() 裡跑
mbc_port3.begin();
delay(3000); // 等 3 秒讓 8 顆雷射初始化
while (1) { // 一直重複
if ((mbcRead(mbc_port3, 0x01) < 10)) { // 如果最近距離小於 10
rgbled.setColor(0, 255, 0, 0); rgbled.show(); // 太近:紅燈
wheels(-30, -30); // 倒退
} else {
rgbled.setColor(0, 0, 255, 0); rgbled.show(); // 綠燈
turn = (mbcRead(mbc_port3, 0x04) * 6); // 轉向 = 最空曠方向 × 6(−42 ~ +42)
wheels((35 + turn), (35 - turn)); // 左輪 = 35 + 轉向、右輪 = 35 − 轉向:空曠在左(負)就左輪慢、往左偏
}
}
}
void loop() {} // 這裡什麼都沒有:上面的積木不會結束一步一步看懂程式
- 等 3 秒讓 8 顆雷射初始化
- 一直重複
- 如果最近距離小於 10
- 太近:紅燈
- 倒退
- 否則:
- 綠燈
- 轉向 = 最空曠方向 × 6(−42 ~ +42)
- 左輪 = 35 + 轉向、右輪 = 35 − 轉向:空曠在左(負)就左輪慢、往左偏
- 如果最近距離小於 10
跑起來應該看到什麼:車子一路往最空的方向走,遇到箱子提早繞開;被圍住時倒退、亮紅燈。
常見問題
- 車子一直左右搖? → 把 × 6 改小(例如 × 4)。
- 車子往反方向轉、越修越歪? → 左右輪的「+」「-」對調(或把左輪、右輪的動力互換)。mBot 出廠左輪 M1、右輪 M2,自己接線的請確認。
- 左右方向跟範例說的相反? → 感應器裝反了(元件面朝下或轉了 180 度)。用範例 2 確認:手放車子左邊要亮紅燈。
- 什麼都沒反應、或讀值一直是 -32768? → 連接埠選錯(這頁都接連接埠 3)、插座片沒插緊、或感應器不是 MakeBlock 版。先用「MBC 共用 → 連線正常?」積木確認;「協議版本」讀到 2 才是新韌體(舊韌體請改用舊版擴展 v1)。
- 上傳失敗、或積木是空白的? → 確認右下角切到「上傳」模式、擴展 v2 已拖進 mBlock、USB 線接的是 mBot 主板。
下一步
- 全部 測距者積木、各主板可用的連接埠:MakeBlock 積木擴展;這款產品的 mBlock 積木表:測距者 8 路 × mBlock 5
- 同樣的 5 個範例在樂高上怎麼寫:SPIKE 新手範例、EV3 新手範例
- 想用 Arduino 直接接感應器(I2C 版,不經 mBot):Arduino 範例
其他問題
- 積木一直回 0? 確認積木選的連接埠跟實際插的一樣,並且已經用「上傳」模式把程式燒進主板。
- 舊的擴展還能用嗎? 2026-10 以前出貨的感應器用舊版擴展 v1.0.0;新舊積木不相容,依韌體版本選。
還有問題?到 聯絡我們 附上你用的軟體和程式截圖。
下載
- MBC_Pro_Sensors_mBlock5_v2.2.0_import.mext
- MBC_Pro_Sensors_mBlock5_v2.1.0_import.mext
- MBC_Pro_Sensors_mBlock5_v2.0.0_import.mext
- MBC_Pro_Sensors_mBlock5_v1.0.0.mext(舊版,2026-10 以前出貨的感應器)
- 下載中心(全部產品的函式庫、韌體、型錄)
本頁依據
- 主機與軟體清單:
_build/guides.json - 值與命令:
_build/protocol/tof8.json(單一真相來源) - 安裝與設定:
_build/guides/software/mblock-mblock5.zh.md、_build/guides/product/tof8/mblock-mblock5.zh.md - 範例:
sensors/tof8/mblock-examples.md