循行者 8 路 (Line8) × mBlock × mBlock 5

互動教學mBlock

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

這一頁只講 mBlock 5(MBC Pro Sensors 擴展):在 MakeBlock(mBot)+ mBlock 5 上用它讀循行者 8 路 (Line8)的安裝步驟、每個值怎麼讀、能用的命令與範例。要換產品、主機或軟體,用上方的切換列。

要買哪個版本、怎麼接

買 MakeBlock 版(RJ25 接頭),插 mBot/Ranger/Orion/MegaPi 的 RJ25 連接埠;各主板可用哪幾個埠見 MakeBlock 積木擴展。

循行者 8 路 (Line8) × MakeBlock(mBot)+ mBlock 5

安裝與設定

你需要

  • 感應器:循行者 8 路 (Line8)(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 的韌體)。

安裝軟體

  1. 到 mBlock 官網 安裝 mBlock 5 電腦版。
  2. 打開 mBlock 5,左下「設備」加入你的主板(例如 mBot)。
  3. 右下「模式開關」切到 上傳。

讓軟體認得感應器

要加一個擴展,積木區才會多出 MBC 的積木:

  1. 取得 v2.0.0 擴展:上架後在 mBlock 5「擴展中心」搜尋「MBC」就能加入。上架前(送審中),進階使用者可以到 ext.mblock.cc 登入自己的 Makeblock 帳號 → 我的擴展 → 匯入資料,上傳 mbc_pro_sensors_2.0.0_import.mext(約 1 分鐘),再按「下載」拿到 .mext。
  2. 把 .mext 檔拖進 mBlock 視窗,積木區會多出「循行者」「測距者」「掌控者」「IMU 陀螺儀」「神攝手」「MBC 共用」六個分類。
  3. 用主板的開機起始積木(例如「當 mBot 啟動時」)開始寫程式,按「上傳」燒進主板。
  4. 打開範例:「檔案 → 從電腦打開」選 .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 啟動時」換成那塊主板的起始積木。

先校準(只要做一次)

循行者要先「認識」你場地上的黑色和白色,數值才會準。校準完會記在感應器裡,重新開機也還在(除非換場地)。

  1. 感應器插好、主機開機(感應器的燈亮起來)。
  2. 按住感應器上的校準按鈕約 0.5 秒再放開(不要一直按著,按著不放會一直重新校準)。
  3. 綠色校準指示燈(靠近校準按鈕)亮起後,5 秒內把感應器在黑線和白色地面之間來回掃幾次,8 個感應點都要掃過最黑的黑線和最白的白色區域。
  4. 掃的時候感應器離地 3~12 mm,太高會讀不準。
  5. 綠燈熄滅=校準完成,數值自動存進感應器。

怎麼知道校準好了? 放在白色地面時「線寬」是 0,壓在一般黑線上是 2~3。

提示

也可以用積木校準:「循行者 連接埠 [埠] 5 秒動態校準」做的事跟按按鈕一樣。

舊韌體與舊積木

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

第一次測試

  1. 程式開頭先「等待 1 秒」讓感應器開機,太早讀會讀到 -32768。
  2. 用「MBC 共用 → 連線正常?」積木確認接線,再看數值。
  3. 上傳本頁範例 1,數字跟著感應器變化,就是接好了。

常見問題

  • 「連線正常?」是否? 連接埠選錯、感應器不是 MakeBlock 版、或韌體是舊版(舊韌體請用 v1 擴展)。
  • 讀到 -32768? 從開機到現在一次都沒讀到:檢查接線;或這款產品沒有這個值。
  • 數值一直不變? 確認插座片插緊、感應器指示燈有亮;「協議版本」積木讀到 2 代表通訊正常。
  • 積木圖是英文? 控制與運算積木(forever、if…then…else、wait、set…to)在中文介面就是「重複無限次」「如果…那麼…否則」「等待…秒」「變數設為」。
  • 還是不行? LINE 聯絡我們,告訴我們主板型號、連接埠和「裝置 ID」積木的讀值。

讀值

裝好 MBC Pro Sensors 擴展後,在「循行者」分類找積木,連接埠選感應器實際插的孔。

線位置 linePos

線位置
範圍 意思
-8~+8 線在哪一路:−8(最左)~+8(最右),0 = 正中間;站在車後往前看,負 = 線在左
(循行者 連接埠 [1 v] 線的位置 :: sensing)

積木傳回 線位置(-8~+8)。主機送 [01] → 回 [值低][值高][01 ^ 值低 ^ 值高],值 = int16 小端。

細位置 linePosFine

細位置
範圍 意思
-100~+100 線位置的細分:−100 ~ +100,0 = 正中間,負 = 線在左(與線位置同號)
(循行者 連接埠 [1 v] 線的細位置 :: sensing)

積木傳回 細位置(-100~+100)。主機送 [02] → 回 [值低][值高][02 ^ 值低 ^ 值高],值 = int16 小端。

線寬 lineWidth

線寬
範圍 意思
0~8 路 壓到線的路數 0~8,0 = 找不到線
(循行者 連接埠 [1 v] 線寬 :: sensing)

積木傳回 線寬(0~8 路)。主機送 [03] → 回 [值低][值高][03 ^ 值低 ^ 值高],值 = int16 小端。

線段數 groupCount

線段數
範圍 意思
0~4 看到幾段線:0 丟線、1 一條線、2 以上 = 分岔/十字
(循行者 連接埠 [1 v] 線段數 :: sensing)

積木傳回 線段數(0~4)。主機送 [04] → 回 [值低][值高][04 ^ 值低 ^ 值高],值 = int16 小端。

壓線位元圖 bitmap

壓線位元圖
範圍 意思
0~255 bit bit0 = 第 1 路(最左)… bit7 = 第 8 路,1 = 那一路在線上
(循行者 連接埠 [1 v] 壓線位元圖 :: sensing)

積木傳回 壓線位元圖(0~255 bit)。主機送 [05] → 回 [值低][值高][05 ^ 值低 ^ 值高],值 = int16 小端。

最後離線方向 lastDir

範圍 意思
-8~+8 丟線前線最後在哪一側:−8 ~ +8(負 = 左),找回線後維持最後一次
(循行者 連接埠 [1 v] 最後離線方向 :: sensing)

積木傳回 最後離線方向(-8~+8)。主機送 [06] → 回 [值低][值高][06 ^ 值低 ^ 值高],值 = int16 小端。

二值化門檻 threshold

範圍 意思
1~99 判斷「在線上」的光值門檻 1~99,預設 50;用 E4 改
(循行者 連接埠 [1 v] 門檻 :: sensing)

積木傳回 二值化門檻(1~99)。主機送 [07] → 回 [值低][值高][07 ^ 值低 ^ 值高],值 = int16 小端。

校準完成次數 calibCount

範圍 意思
0~255 次 開機後完成校準的次數(按鈕校準也算)
(循行者 連接埠 [1 v] 校準次數 :: sensing)

積木傳回 校準完成次數(0~255 次)。主機送 [08] → 回 [值低][值高][08 ^ 值低 ^ 值高],值 = int16 小端。

第 1~8 路光值 light

第 1~8 路光值
範圍 意思
0~100 第 18 路校準後光值 0100(第 1 路最左);編號 10~17
(循行者 連接埠 [1 v] 第 [1 v] 路光值 :: sensing)

積木傳回 第 1~8 路光值(0~100)。主機送 [10] → 回 [值低][值高][10 ^ 值低 ^ 值高],值 = int16 小端;第 N 路的編號 = 0x10 + (N − 1)。

第 N 路在線上? onLine

範圍 意思
是/否 壓線位元圖 05 的第 N 個 bit(第 1 路 = bit0,最左):那一路壓到線 = 是
<循行者 連接埠 [1 v] 第 [1 v] 路在線上? :: sensing>

命令

切黑線 blackLine

追黑線(預設);存 RAM,重開機回預設

循行者 連接埠 [1 v] 切黑線 :: sensing

主機送 [E0] → 感應器回 [00][00][E0](收到了)再執行。

切白線 whiteLine

追白線(F3 b1 = 1);存 RAM,重開機回預設

循行者 連接埠 [1 v] 切白線 :: sensing

主機送 [E1] → 感應器回 [00][00][E1](收到了)再執行。

黑色校準 calibBlack

把目前讀值記為黑(感應器壓在黑線上),約 50 ms;寫入 EEPROM

循行者 連接埠 [1 v] 黑色校準 :: sensing

主機送 [E2] → 感應器回 [00][00][E2](收到了)再執行;執行期間 F3 bit2 = 1。

白色校準 calibWhite

把目前讀值記為白(感應器壓在白底上),約 50 ms;寫入 EEPROM

循行者 連接埠 [1 v] 白色校準 :: sensing

主機送 [E3] → 感應器回 [00][00][E3](收到了)再執行;執行期間 F3 bit2 = 1。

設定門檻 setThreshold

二值化門檻 1~99(RAM,重開機回預設 50);SPIKE 參數超出範圍回失敗(狀態 2)

循行者 連接埠 [1 v] 設定門檻 (50) :: sensing

主機送 [E4][參數…] → 感應器回 [00][00][E4](收到了)再執行。

5 秒動態校準 calibAuto

5 秒內把感應器在黑線與白底上來回掃,取極值當黑白參考(共識 B-12,= v1 的 0x20=0x01);期間 F3 b2 = 1

循行者 連接埠 [1 v] 5 秒動態校準 :: sensing

主機送 [E7] → 感應器回 [00][00][E7](收到了)再執行;執行期間 F3 bit2 = 1。

更新全部數值 readAll

一次讀整張值表進快取(FD 整包);接下來 10 ms 內的讀值積木直接用快取,不再逐一詢問

循行者 連接埠 [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 的中文介面就是「重複無限次」「如果…那麼…否則」「等待…秒」「變數設為」。

開始之前

循行者 8 路 × mBot 接線

感應器 → mBot 插座片 → 主板 RJ25 連接埠(S1 = 主機送、S2 = 主機收,UART 38400)。

  1. 裝擴展:到 MakeBlock 積木擴展 取得 MBC Pro Sensors v2.0.0 的 .mext,拖進 mBlock 5 視窗;左下「設備」加入 mBot,右下切到「上傳」。
  2. 接線:循行者 → mBot 插座片 → mBot 連接埠 1(這頁所有範例都接這一埠;換埠就把積木上的連接埠數字改掉)。
  3. 先開機再讀:每個範例一開始都「等待 1 秒」讓感應器開機;太早讀會讀到 -32768(還沒收到)。
  4. 先校準(只要做一次):感應器插好、mBot 開機後,按一下感應器上的校準按鈕放開,綠燈亮起的 5 秒內把感應器在黑線和白色地面之間來回掃幾次(8 個感應點都要掃過黑和白),綠燈熄滅=完成,會記在感應器裡。也可以用積木「循行者 連接埠 1 5 秒動態校準」做同一件事。
  5. 怎麼知道校準好了? 跑範例 2:放在白色地面上燈熄掉(線寬 0),壓在黑線上有燈。

這頁會用到的積木

每顆讀值積木就是感應器值表裡的一個「值編號」(跟 Arduino I2C 版的暫存器編號相同);完整積木表在 MakeBlock 積木擴展。

積木 傳回 意思
循行者 連接埠 [1] 線的細位置 -100~+100 線位置的細分:−100 ~ +100,0 = 正中間,負 = 線在左(與線位置同號)
循行者 連接埠 [1] 線寬 0~8 路 壓到線的路數 0~8,0 = 找不到線
循行者 連接埠 [1] 線的位置 -8~+8 線在哪一路:−8(最左)~+8(最右),0 = 正中間;站在車後往前看,負 = 線在左

這頁的範例

  1. 聽見線在哪裡
  2. 線在哪邊就亮什麼燈
  3. 線的位置控制一個輪子
  4. 三段式循線
  5. 比例循線+丟線停車

注意

.mblock 是由產生器照 mBlock 5 的存檔格式產生的,還沒在 mBlock 5 裡開啟驗證(等擴展 v2 上架後補驗)。開不起來或積木顯示空白,請先確認 v2 擴展已拖進 mBlock、設備是 mBot,或照下面的積木圖自己拼(5 分鐘內拼得完);也歡迎 LINE 告訴我們。


範例 1:聽見線在哪裡

這個範例會做什麼:mBot 沒有螢幕,這個範例把「線的細位置」(−100 ~ +100)變成蜂鳴器的音高:線在正中間是 440 赫茲(La),往左音變低、往右音變高。先學會「讀到數字」,後面的循線才看得懂。

要準備什麼

  • mBot(mCore 主板)+ mBlock 5 電腦版
  • 循行者 8 路(MakeBlock 版)+ mBot 插座片
  • 白底黑線的場地(黑線寬約 2 公分)

怎麼接:循行者 → mBot 插座片 → mBot 連接埠 1。感應器裝在車頭下方、離地約 1 公分,感應器正對地面。

下載程式

mBlock 5 專案 等價 Arduino 程式
ex01_hear_line.mblock ex01_hear_line.ino
mBlock 積木(照著拼就好)
當 mBot 啟動時 :: events hat
wait (1) seconds
forever
  播放音頻 ((440) + ((循行者 連接埠 [1 v] 線的細位置 :: #9300DB) * (2))) 赫茲,持續 (0.1) 秒 :: sound
end
🔧 等價 Arduino 程式(mBot)
// 循行者 8 路 × mBlock 5 範例 1:聽見線在哪裡(mBot 等價 Arduino 程式)
// 接線:循行者 → mBot 插座片 → mBot 連接埠 1。感應器裝在車頭下方、離地約 1 公分,感應器正對地面。
// 跟 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_port1(1);           // 感應器接在 mBot 連接埠 1
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_port1.begin();
  delay(1000);   // 等 1 秒讓感應器開機
  while (1) {   // 一直重複
    buzzer.tone((440 + (mbcRead(mbc_port1, 0x02) * 2)), 100);   // 音高 = 440 + 線的細位置 × 2 赫茲,響 0.1 秒
  }
}

void loop() {}   // 這裡什麼都沒有:上面的積木不會結束

一步一步看懂程式

  1. 等 1 秒讓感應器開機
  2. 一直重複
    • 音高 = 440 + 線的細位置 × 2 赫茲,響 0.1 秒

跑起來應該看到什麼:黑線在感應器正中間:440 赫茲。慢慢把線往左移:音越來越低(最左 240 赫茲);往右移越來越高(最右 640 赫茲)。把線拿走,音停在最後一次看到線的位置。

常見問題

  • 聽不到聲音? → mBot 的蜂鳴器在主板上,聲音不大;把耳朵靠近,或把 0.1 秒改成 0.3 秒。
  • 音高跟線的左右相反? → 左右是站在車子後面、面向車頭看的。把感應器轉 180 度裝就會反過來。
  • 放在黑線上「線寬」還是 0? → 還沒校準:照上面「開始之前」用感應器上的按鈕校準一次。
  • 什麼都沒反應、或讀值一直是 -32768? → 連接埠選錯(這頁都接連接埠 1)、插座片沒插緊、或感應器不是 MakeBlock 版。先用「MBC 共用 → 連線正常?」積木確認;「協議版本」讀到 2 才是新韌體(舊韌體請改用舊版擴展 v1)。
  • 上傳失敗、或積木是空白的? → 確認右下角切到「上傳」模式、擴展 v2 已拖進 mBlock、USB 線接的是 mBot 主板。

範例 2:線在哪邊就亮什麼燈

這個範例會做什麼:用「如果…就…否則…」判斷線的位置:偏左亮紅燈、偏右亮藍燈、在中間亮綠燈;線寬是 0(找不到線)就關燈。這就是循線程式的判斷骨架,下一個範例只是把燈換成輪子。

要準備什麼

  • mBot(mCore 主板)+ mBlock 5 電腦版
  • 循行者 8 路(MakeBlock 版)+ mBot 插座片
  • 白底黑線的場地(黑線寬約 2 公分)

怎麼接:循行者 → mBot 插座片 → mBot 連接埠 1。感應器裝在車頭下方、離地約 1 公分,感應器正對地面。

下載程式

mBlock 5 專案 等價 Arduino 程式
ex02_led_side.mblock ex02_led_side.ino
mBlock 積木(照著拼就好)
當 mBot 啟動時 :: events hat
wait (1) seconds
forever
  if <(循行者 連接埠 [1 v] 線寬 :: #9300DB) = (0)> then
    LED 燈位置 [全部 v] 的三原色數值為 紅 (0) 綠 (0) 藍 (0) :: looks
  else
    if <(循行者 連接埠 [1 v] 線的位置 :: #9300DB) < (-2)> then
      LED 燈位置 [全部 v] 的三原色數值為 紅 (255) 綠 (0) 藍 (0) :: looks
    else
      if <(循行者 連接埠 [1 v] 線的位置 :: #9300DB) > (2)> 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 連接埠 1。感應器裝在車頭下方、離地約 1 公分,感應器正對地面。
// 跟 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_port1(1);           // 感應器接在 mBot 連接埠 1
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_port1.begin();
  delay(1000);   // 等 1 秒讓感應器開機
  while (1) {   // 一直重複
    if ((mbcRead(mbc_port1, 0x03) == 0)) {   // 如果線寬 = 0(找不到線)
      rgbled.setColor(0, 0, 0, 0); rgbled.show();   // 找不到線:關燈
    } else {
      if ((mbcRead(mbc_port1, 0x01) < -2)) {   // 否則,如果線的位置小於 -2(偏左)
        rgbled.setColor(0, 255, 0, 0); rgbled.show();   // 線偏左:紅燈
      } else {
        if ((mbcRead(mbc_port1, 0x01) > 2)) {   // 否則,如果線的位置大於 2(偏右)
          rgbled.setColor(0, 0, 0, 255); rgbled.show();   // 線偏右:藍燈
        } else {
          rgbled.setColor(0, 0, 255, 0); rgbled.show();   // 線在中間:綠燈
        }
      }
    }
  }
}

void loop() {}   // 這裡什麼都沒有:上面的積木不會結束

一步一步看懂程式

  1. 等 1 秒讓感應器開機
  2. 一直重複
    • 如果線寬 = 0(找不到線)
      • 找不到線:關燈
      • 否則:
        • 否則,如果線的位置小於 -2(偏左)
          • 線偏左:紅燈
          • 否則:
            • 否則,如果線的位置大於 2(偏右)
              • 線偏右:藍燈
              • 否則:
                • 線在中間:綠燈

跑起來應該看到什麼:線在正中間綠燈;往左移超過 2 格變紅燈、往右移變藍燈;放到白色地面上燈熄掉。

常見問題

  • 燈的顏色怎麼換? → 改「紅/綠/藍」三個數字(0~255),例如 255、255、0 是黃色。
  • 放在黑線上「線寬」還是 0? → 還沒校準:照上面「開始之前」用感應器上的按鈕校準一次。
  • 什麼都沒反應、或讀值一直是 -32768? → 連接埠選錯(這頁都接連接埠 1)、插座片沒插緊、或感應器不是 MakeBlock 版。先用「MBC 共用 → 連線正常?」積木確認;「協議版本」讀到 2 才是新韌體(舊韌體請改用舊版擴展 v1)。
  • 上傳失敗、或積木是空白的? → 確認右下角切到「上傳」模式、擴展 v2 已拖進 mBlock、USB 線接的是 mBot 主板。

範例 3:線的位置控制一個輪子

這個範例會做什麼:把「線的細位置」(−100 ~ +100)除以 2,直接當左輪的動力:線在右邊左輪往前轉、在左邊倒轉、正中間不動,偏越多轉越快。先把車子架高(輪子離地)看一個輪子怎麼跟著線走,下一個範例再放到地上。

要準備什麼

  • mBot(mCore 主板)+ mBlock 5 電腦版
  • mBot 兩輪小車(左輪接 M1、右輪接 M2,出廠就是這樣接)
  • 循行者 8 路(MakeBlock 版)+ mBot 插座片
  • 白底黑線的場地(黑線寬約 2 公分)

怎麼接:循行者 → mBot 插座片 → mBot 連接埠 1。感應器裝在車頭下方、離地約 1 公分,感應器正對地面。

下載程式

mBlock 5 專案 等價 Arduino 程式
ex03_one_wheel.mblock ex03_one_wheel.ino
mBlock 積木(照著拼就好)
當 mBot 啟動時 :: events hat
wait (1) seconds
forever
  左輪動力 ((循行者 連接埠 [1 v] 線的細位置 :: #9300DB) / (2)) %,右輪動力 (0) % :: motion
end
🔧 等價 Arduino 程式(mBot)
// 循行者 8 路 × mBlock 5 範例 3:線的位置控制一個輪子(mBot 等價 Arduino 程式)
// 接線:循行者 → mBot 插座片 → mBot 連接埠 1。感應器裝在車頭下方、離地約 1 公分,感應器正對地面。
// 跟 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_port1(1);           // 感應器接在 mBot 連接埠 1
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_port1.begin();
  delay(1000);   // 等 1 秒讓感應器開機
  while (1) {   // 一直重複
    wheels((mbcRead(mbc_port1, 0x02) / 2), 0);   // 左輪動力 = 線的細位置 ÷ 2(−50 ~ +50),右輪 0
  }
}

void loop() {}   // 這裡什麼都沒有:上面的積木不會結束

一步一步看懂程式

  1. 等 1 秒讓感應器開機
  2. 一直重複
    • 左輪動力 = 線的細位置 ÷ 2(−50 ~ +50),右輪 0

跑起來應該看到什麼:線在正中間左輪不動;線往右移左輪往前轉、越偏越快;線往左移左輪倒轉。

常見問題

  • 車子往反方向轉、越修越歪? → 左右輪的「+」「-」對調(或把左輪、右輪的動力互換)。mBot 出廠左輪 M1、右輪 M2,自己接線的請確認。
  • 線在中間輪子還會微微動? → 細位置不一定剛好 0。想要不動,可以加一個「如果 線寬 = 0 或 絕對值小於 6 就動力 0」。
  • 放在黑線上「線寬」還是 0? → 還沒校準:照上面「開始之前」用感應器上的按鈕校準一次。
  • 什麼都沒反應、或讀值一直是 -32768? → 連接埠選錯(這頁都接連接埠 1)、插座片沒插緊、或感應器不是 MakeBlock 版。先用「MBC 共用 → 連線正常?」積木確認;「協議版本」讀到 2 才是新韌體(舊韌體請改用舊版擴展 v1)。
  • 上傳失敗、或積木是空白的? → 確認右下角切到「上傳」模式、擴展 v2 已拖進 mBlock、USB 線接的是 mBot 主板。

範例 4:三段式循線

這個範例會做什麼:把範例 2 的燈換成輪子:線偏左就左輪慢、右輪快(往左修),偏右就反過來,在中間兩輪一樣快直走。車子會左右搖擺地沿著黑線走,這是最簡單、也最容易看懂的循線。

要準備什麼

  • mBot(mCore 主板)+ mBlock 5 電腦版
  • mBot 兩輪小車(左輪接 M1、右輪接 M2,出廠就是這樣接)
  • 循行者 8 路(MakeBlock 版)+ mBot 插座片
  • 白底黑線的場地(黑線寬約 2 公分)

怎麼接:循行者 → mBot 插座片 → mBot 連接埠 1。感應器裝在車頭下方、離地約 1 公分,感應器正對地面。

下載程式

mBlock 5 專案 等價 Arduino 程式
ex04_three_way.mblock ex04_three_way.ino
mBlock 積木(照著拼就好)
當 mBot 啟動時 :: events hat
wait (1) seconds
forever
  if <(循行者 連接埠 [1 v] 線的位置 :: #9300DB) < (-2)> then
    左輪動力 (10) %,右輪動力 (40) % :: motion
  else
    if <(循行者 連接埠 [1 v] 線的位置 :: #9300DB) > (2)> then
      左輪動力 (40) %,右輪動力 (10) % :: motion
    else
      左輪動力 (30) %,右輪動力 (30) % :: motion
    end
  end
end
🔧 等價 Arduino 程式(mBot)
// 循行者 8 路 × mBlock 5 範例 4:三段式循線(mBot 等價 Arduino 程式)
// 接線:循行者 → mBot 插座片 → mBot 連接埠 1。感應器裝在車頭下方、離地約 1 公分,感應器正對地面。
// 跟 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_port1(1);           // 感應器接在 mBot 連接埠 1
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_port1.begin();
  delay(1000);   // 等 1 秒讓感應器開機
  while (1) {   // 一直重複
    if ((mbcRead(mbc_port1, 0x01) < -2)) {   // 如果線的位置小於 -2(偏左)
      wheels(10, 40);   // 線偏左:左輪慢、右輪快,車子往左修
    } else {
      if ((mbcRead(mbc_port1, 0x01) > 2)) {   // 否則,如果線的位置大於 2(偏右)
        wheels(40, 10);   // 線偏右:左輪快、右輪慢,車子往右修
      } else {
        wheels(30, 30);   // 線在中間:兩輪一樣快,直直走
      }
    }
  }
}

void loop() {}   // 這裡什麼都沒有:上面的積木不會結束

一步一步看懂程式

  1. 等 1 秒讓感應器開機
  2. 一直重複
    • 如果線的位置小於 -2(偏左)
      • 線偏左:左輪慢、右輪快,車子往左修
      • 否則:
        • 否則,如果線的位置大於 2(偏右)
          • 線偏右:左輪快、右輪慢,車子往右修
          • 否則:
            • 線在中間:兩輪一樣快,直直走

跑起來應該看到什麼:車子左右搖擺地沿著黑線前進。彎太急衝出去的話,把 40 改小、10 改成 0。

常見問題

  • 車子往反方向轉、越修越歪? → 左右輪的「+」「-」對調(或把左輪、右輪的動力互換)。mBot 出廠左輪 M1、右輪 M2,自己接線的請確認。
  • 放在黑線上「線寬」還是 0? → 還沒校準:照上面「開始之前」用感應器上的按鈕校準一次。
  • 什麼都沒反應、或讀值一直是 -32768? → 連接埠選錯(這頁都接連接埠 1)、插座片沒插緊、或感應器不是 MakeBlock 版。先用「MBC 共用 → 連線正常?」積木確認;「協議版本」讀到 2 才是新韌體(舊韌體請改用舊版擴展 v1)。
  • 上傳失敗、或積木是空白的? → 確認右下角切到「上傳」模式、擴展 v2 已拖進 mBlock、USB 線接的是 mBot 主板。

範例 5:比例循線+丟線停車

這個範例會做什麼:三段式循線會一直搖擺。這個範例把「線的細位置 × 0.3」當轉彎的力量:偏一點轉一點、偏很多轉很多,走起來更順;同時用線寬判斷丟線:找不到線就停車亮紅燈,正常循線亮綠燈。這是比賽用循線程式的起點。

要準備什麼

  • mBot(mCore 主板)+ mBlock 5 電腦版
  • mBot 兩輪小車(左輪接 M1、右輪接 M2,出廠就是這樣接)
  • 循行者 8 路(MakeBlock 版)+ mBot 插座片
  • 白底黑線的場地(黑線寬約 2 公分)

怎麼接:循行者 → mBot 插座片 → mBot 連接埠 1。感應器裝在車頭下方、離地約 1 公分,感應器正對地面。

下載程式

mBlock 5 專案 等價 Arduino 程式
ex05_p_follow.mblock ex05_p_follow.ino
mBlock 積木(照著拼就好)
當 mBot 啟動時 :: events hat
wait (1) seconds
forever
  if <(循行者 連接埠 [1 v] 線寬 :: #9300DB) = (0)> then
    停止移動 :: motion
    LED 燈位置 [全部 v] 的三原色數值為 紅 (255) 綠 (0) 藍 (0) :: looks
  else
    set [轉向 v] to ((循行者 連接埠 [1 v] 線的細位置 :: #9300DB) * (0.3))
    左輪動力 ((30) + (轉向)) %,右輪動力 ((30) - (轉向)) % :: motion
    LED 燈位置 [全部 v] 的三原色數值為 紅 (0) 綠 (255) 藍 (0) :: looks
  end
end
🔧 等價 Arduino 程式(mBot)
// 循行者 8 路 × mBlock 5 範例 5:比例循線+丟線停車(mBot 等價 Arduino 程式)
// 接線:循行者 → mBot 插座片 → mBot 連接埠 1。感應器裝在車頭下方、離地約 1 公分,感應器正對地面。
// 跟 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_port1(1);           // 感應器接在 mBot 連接埠 1
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_port1.begin();
  delay(1000);   // 等 1 秒讓感應器開機
  while (1) {   // 一直重複
    if ((mbcRead(mbc_port1, 0x03) == 0)) {   // 如果線寬 = 0(找不到線)
      wheels(0, 0);   // 找不到線:停車
      rgbled.setColor(0, 255, 0, 0); rgbled.show();   // 紅燈
    } else {
      turn = (mbcRead(mbc_port1, 0x02) * 0.3);   // 轉向 = 線的細位置 × 0.3(−30 ~ +30)
      wheels((30 + turn), (30 - turn));   // 左輪 = 30 + 轉向、右輪 = 30 − 轉向:線在左(負)就左輪慢、右輪快
      rgbled.setColor(0, 0, 255, 0); rgbled.show();   // 綠燈
    }
  }
}

void loop() {}   // 這裡什麼都沒有:上面的積木不會結束

一步一步看懂程式

  1. 等 1 秒讓感應器開機
  2. 一直重複
    • 如果線寬 = 0(找不到線)
      • 找不到線:停車
      • 紅燈
      • 否則:
        • 轉向 = 線的細位置 × 0.3(−30 ~ +30)
        • 左輪 = 30 + 轉向、右輪 = 30 − 轉向:線在左(負)就左輪慢、右輪快
        • 綠燈

跑起來應該看到什麼:車子平順地沿著黑線走、亮綠燈;把車子拿離黑線,馬上停車亮紅燈。直線上還是左右甩的話,把 0.3 改小(例如 0.2);轉不過彎就改大。

常見問題

  • 車子往反方向轉、越修越歪? → 左右輪的「+」「-」對調(或把左輪、右輪的動力互換)。mBot 出廠左輪 M1、右輪 M2,自己接線的請確認。
  • 十字路口也當成丟線停下來? → 不會,路口線寬反而變大。想在路口停車,把「線寬 = 0」改成「線寬 > 5」試試看。
  • 放在黑線上「線寬」還是 0? → 還沒校準:照上面「開始之前」用感應器上的按鈕校準一次。
  • 什麼都沒反應、或讀值一直是 -32768? → 連接埠選錯(這頁都接連接埠 1)、插座片沒插緊、或感應器不是 MakeBlock 版。先用「MBC 共用 → 連線正常?」積木確認;「協議版本」讀到 2 才是新韌體(舊韌體請改用舊版擴展 v1)。
  • 上傳失敗、或積木是空白的? → 確認右下角切到「上傳」模式、擴展 v2 已拖進 mBlock、USB 線接的是 mBot 主板。

下一步

其他問題

  • 積木一直回 0? 確認積木選的連接埠跟實際插的一樣,並且已經用「上傳」模式把程式燒進主板。
  • 舊的擴展還能用嗎? 2026-10 以前出貨的感應器用舊版擴展 v1.0.0;新舊積木不相容,依韌體版本選。

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

下載

本頁依據

  • 主機與軟體清單:_build/guides.json
  • 值與命令:_build/protocol/line8.json(單一真相來源)
  • 安裝與設定:_build/guides/software/mblock-mblock5.zh.md、_build/guides/product/line8/mblock-mblock5.zh.md
  • 範例:sensors/line8/mblock-examples.md
LINE 詢價選購指南