陀螺儀 IMU 九軸 × mBlock × mBlock 5

互動教學mBlock

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

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

要買哪個版本、怎麼接

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

陀螺儀 IMU 九軸 × MakeBlock(mBot)+ mBlock 5

安裝與設定

你需要

  • 感應器:陀螺儀 IMU 九軸(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 啟動時」換成那塊主板的起始積木。

注意

陀螺儀 IMU 的 MakeBlock 版是 2026 年 10 月新增,訂購前請先 LINE 詢問 確認出貨版本。

第一次測試

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

常見問題

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

讀值

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

陀螺 3D 航向 headingGyro3D

範圍 意思
-32768~32767 ° 四元數算出的航向,度,開機/歸零 = 0,連續累積可超過 360(int16 到 ±32767 繞回,約 91 圈)
(IMU 陀螺儀 連接埠 [1 v] 陀螺 3D 航向 :: sensing)

積木傳回 陀螺 3D 航向(-32768~32767 °)。主機送 [01] → 回 [值低][值高][01 ^ 值低 ^ 值高],值 = int16 小端。

融合航向 headingFused

範圍 意思
-32768~32767 ° 陀螺 3D 加磁力計慢修正的航向,度,減去相對零點;可超過 360
(IMU 陀螺儀 連接埠 [1 v] 融合航向 :: sensing)

積木傳回 融合航向(-32768~32767 °)。主機送 [02] → 回 [值低][值高][02 ^ 值低 ^ 值高],值 = int16 小端。

陀螺 1D 航向 headingGyro1D

範圍 意思
-32768~32767 ° 只繞轉向軸積分的航向,度,開機/歸零 = 0;可超過 360
(IMU 陀螺儀 連接埠 [1 v] 陀螺 1D 航向 :: sensing)

積木傳回 陀螺 1D 航向(-32768~32767 °)。主機送 [03] → 回 [值低][值高][03 ^ 值低 ^ 值高],值 = int16 小端。

磁力航向 headingMag

範圍 意思
-32768~32767 ° 磁力計傾斜補償航向,度,減去相對零點
(IMU 陀螺儀 連接埠 [1 v] 磁力航向 :: sensing)

積木傳回 磁力航向(-32768~32767 °)。主機送 [04] → 回 [值低][值高][04 ^ 值低 ^ 值高],值 = int16 小端。

轉向軸角速度 yawRate

轉向軸角速度
範圍 意思
-32768~32767 0.1 dps 繞轉向軸(getYawAxis())的角速度,0.1 度/秒,正負跟航向同向
(IMU 陀螺儀 連接埠 [1 v] 轉向角速度 :: sensing)

積木傳回 轉向軸角速度(-32768~32767 0.1 dps)。主機送 [05] → 回 [值低][值高][05 ^ 值低 ^ 值高],值 = int16 小端。

俯仰角 pitch

俯仰角
範圍 意思
-90~+90 ° 板子絲印 X 軸相對水平面的仰角:X 軸朝上 +90、朝下 −90、水平 0(用重力向量 atan2 算)
(IMU 陀螺儀 連接埠 [1 v] 俯仰角 :: sensing)

積木傳回 俯仰角(-90~+90 °)。主機送 [06] → 回 [值低][值高][06 ^ 值低 ^ 值高],值 = int16 小端。

俯仰角速度 pitchRate

俯仰角速度
範圍 意思
-32768~32767 0.1 dps 繞板子絲印 X 軸的角速度,0.1 度/秒(右手定則,從 +X 端看逆時針為正);注意這是 gyro X,不是 06 的微分
(IMU 陀螺儀 連接埠 [1 v] 俯仰角速度 :: sensing)

積木傳回 俯仰角速度(-32768~32767 0.1 dps)。主機送 [07] → 回 [值低][值高][07 ^ 值低 ^ 值高],值 = int16 小端。

磁力信任度 magTrust

磁力信任度
範圍 意思
0~255 融合演算法對磁力計的信任度 0255(= 01 × 255)
(IMU 陀螺儀 連接埠 [1 v] 磁力信任度 :: sensing)

積木傳回 磁力信任度(0~255)。主機送 [08] → 回 [值低][值高][08 ^ 值低 ^ 值高],值 = int16 小端。

磁場干擾度 magDisturb

磁場干擾度
範圍 意思
0~255 0.01° 磁場干擾程度 0~255(度 × 100,上限 255)
(IMU 陀螺儀 連接埠 [1 v] 磁場干擾度 :: sensing)

積木傳回 磁場干擾度(0~255 0.01°)。主機送 [09] → 回 [值低][值高][09 ^ 值低 ^ 值高],值 = int16 小端。

朝上的面 upFace

朝上的面
範圍 意思
0~5 哪個軸朝上:0 +X、1 +Y、2 +Z、3 −X、4 −Y、5 −Z(實體軸)
(IMU 陀螺儀 連接埠 [1 v] 朝上的面 :: sensing)

積木傳回 朝上的面(0~5)。主機送 [0A] → 回 [值低][值高][0A ^ 值低 ^ 值高],值 = int16 小端。

角速度 1~3 軸 gyro

角速度 1~3 軸
範圍 意思
-32768~32767 0.1 dps 10 X、11 Y、12 Z 角速度,0.1 度/秒(實體軸,已套軸向號誌)
(IMU 陀螺儀 連接埠 [1 v] 角速度 [軸] :: sensing)

積木傳回 角速度 1~3 軸(-32768~32767 0.1 dps)。主機送 [10] → 回 [值低][值高][10 ^ 值低 ^ 值高],值 = int16 小端;第 N 路的編號 = 0x10 + (N − 1)。

加速度 1~3 軸 accel

加速度 1~3 軸
範圍 意思
-32768~32767 mg 13 X、14 Y、15 Z 加速度,mg(1000 = 1 g)
(IMU 陀螺儀 連接埠 [1 v] 加速度 [軸] :: sensing)

積木傳回 加速度 1~3 軸(-32768~32767 mg)。主機送 [13] → 回 [值低][值高][13 ^ 值低 ^ 值高],值 = int16 小端;第 N 路的編號 = 0x13 + (N − 1)。

磁力 1~3 軸 mag

磁力 1~3 軸
範圍 意思
-32768~32767 mG 16 X、17 Y、18 Z 磁場強度,mG(毫高斯)
(IMU 陀螺儀 連接埠 [1 v] 磁力 [軸] :: sensing)

積木傳回 磁力 1~3 軸(-32768~32767 mG)。主機送 [16] → 回 [值低][值高][16 ^ 值低 ^ 值高],值 = int16 小端;第 N 路的編號 = 0x16 + (N − 1)。

這個軟體讀不到:命令狀態。要用這些值請改用 Arduino/micro:bit。

命令

航向歸零 zeroHeading

四個航向都歸零(zeroHeadings());EV3 另有原廠 WRITE 0x11 陀螺歸零

IMU 陀螺儀 連接埠 [1 v] 航向歸零 :: sensing

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

加速度計校準開始 accelCalStart

開始加速度計校準(= v1 的 0x20=0x01);期間 F3 b4 = 1;磁力計校準中 → 忽略(0B 狀態 3 拒絕)

IMU 陀螺儀 連接埠 [1 v] 加速度計校準開始 :: sensing

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

加速度計校準結束 accelCalEnd

結束加速度計校準並存 EEPROM(= v1 的 0x20=0x02);通過後重新擷取安裝軸,擺正靜置後才航向歸零(不是馬上歸零);沒在校準中 → 拒絕(0B 狀態 3);驗證沒過 → 0B 狀態 2 失敗

IMU 陀螺儀 連接埠 [1 v] 加速度計校準結束 :: sensing

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

磁力計校準開始 magCalStart

開始磁力計校準(= v1 的 0x20=0x03);期間 F3 b5 = 1;磁力計故障時 → 忽略(0B 狀態 3)

IMU 陀螺儀 連接埠 [1 v] 磁力計校準開始 :: sensing

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

磁力計校準結束 magCalEnd

結束磁力計校準並存 EEPROM(= v1 的 0x20=0x04);成功後馬上航向歸零;沒在校準中 → 拒絕(0B 狀態 3);驗證沒過 → 0B 狀態 2 失敗

IMU 陀螺儀 連接埠 [1 v] 磁力計校準結束 :: sensing

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

更新全部數值 readAll

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

IMU 陀螺儀 連接埠 [1 v] 更新全部數值 :: sensing

這個軟體送不了:航向設成指定角度、以磁北為 0、陀螺零點重估、重抓安裝軸、取消校準、航向修正係數、校準回出廠

範例

這一頁是寫給完全沒寫過程式的人:用 mBlock 5 的積木在 mBot 上讀IMU 陀螺儀。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 的中文介面就是「重複無限次」「如果…那麼…否則」「等待…秒」「變數設為」。

開始之前

IMU 陀螺儀 × mBot 接線

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

  1. 裝擴展:到 MakeBlock 積木擴展 取得 MBC Pro Sensors v2.0.0 的 .mext,拖進 mBlock 5 視窗;左下「設備」加入 mBot,右下切到「上傳」。
  2. 接線:IMU 陀螺儀 → mBot 插座片 → mBot 連接埠 2(這頁所有範例都接這一埠;換埠就把積木上的連接埠數字改掉)。
  3. 先開機再讀:每個範例一開始都「等待 1 秒」讓感應器開機;太早讀會讀到 -32768(還沒收到)。
  4. IMU 平放固定在車身上,板子絲印的 X 軸跟車子前後方向平行;開機和「航向歸零」的那一下車子要完全靜止。從上往下看右轉航向變大(右轉 90 度 = 90),一直累加不會繞回 0。

這頁會用到的積木

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

積木 傳回 意思
IMU 陀螺儀 連接埠 [2] 俯仰角 -90~+90 ° 板子絲印 X 軸相對水平面的仰角:X 軸朝上 +90、朝下 −90、水平 0(用重力向量 atan2 算)
IMU 陀螺儀 連接埠 [2] 陀螺 1D 航向 -32768~32767 ° 只繞轉向軸積分的航向,度,開機/歸零 = 0;可超過 360
IMU 陀螺儀 連接埠 [2] 航向歸零 — 四個航向都歸零(zeroHeadings());EV3 另有原廠 WRITE 0x11 陀螺歸零

這頁的範例

  1. 歪一邊音就變
  2. 轉頭看燈
  3. 前傾後仰控制一個輪子
  4. 走直線自動修正
  5. 直走、右轉 90 度、再直走

注意

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


範例 1:歪一邊音就變

這個範例會做什麼:mBot 沒有螢幕,這個範例把「俯仰角」(車頭抬高或壓低幾度,平放是 0)變成蜂鳴器的音高:平放 440 赫茲,抬頭音變高、低頭音變低。先學會「讀到數字」。

要準備什麼

  • mBot(mCore 主板)+ mBlock 5 電腦版
  • IMU 陀螺儀(MakeBlock 版)+ mBot 插座片

怎麼接:IMU 陀螺儀 → mBot 插座片 → mBot 連接埠 2。感應器平放固定在車身上(不要晃動),板子絲印的 X 軸跟車子前後方向平行。程式開始時車子要靜止不動。

下載程式

mBlock 5 專案 等價 Arduino 程式
ex01_tilt_tone.mblock ex01_tilt_tone.ino
mBlock 積木(照著拼就好)
當 mBot 啟動時 :: events hat
wait (1) seconds
forever
  播放音頻 ((440) + ((IMU 陀螺儀 連接埠 [2 v] 俯仰角 :: #D9480F) * (4))) 赫茲,持續 (0.1) 秒 :: sound
end
🔧 等價 Arduino 程式(mBot)
// IMU 陀螺儀 × mBlock 5 範例 1:歪一邊音就變(mBot 等價 Arduino 程式)
// 接線:IMU 陀螺儀 → mBot 插座片 → mBot 連接埠 2。感應器平放固定在車身上(不要晃動),板子絲印的 X 軸跟車子前後方向平行。程式開始時車子要靜止不動。
// 跟 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_port2(2);           // 感應器接在 mBot 連接埠 2
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_port2.begin();
  delay(1000);   // 等 1 秒讓感應器開機
  while (1) {   // 一直重複
    buzzer.tone((440 + (mbcRead(mbc_port2, 0x06) * 4)), 100);   // 音高 = 440 + 俯仰角 × 4 赫茲,響 0.1 秒
  }
}

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

一步一步看懂程式

  1. 等 1 秒讓感應器開機
  2. 一直重複
    • 音高 = 440 + 俯仰角 × 4 赫茲,響 0.1 秒

跑起來應該看到什麼:車子平放:440 赫茲。把車頭慢慢抬高,音越來越高(抬 45 度約 620 赫茲);壓低車頭音變低。

常見問題

  • 聽不到聲音? → mBot 的蜂鳴器在主板上,聲音不大;把耳朵靠近,或把 0.1 秒改成 0.3 秒。
  • 抬頭音反而變低? → 正常,正負跟安裝方向有關;把感應器轉 180 度裝,或把 × 4 改成 × -4。
  • 車子沒動,航向卻一直慢慢變? → 開機或歸零的那一下車子要完全靜止。把車子放好,拔掉感應器重插一次再試。
  • 什麼都沒反應、或讀值一直是 -32768? → 連接埠選錯(這頁都接連接埠 2)、插座片沒插緊、或感應器不是 MakeBlock 版。先用「MBC 共用 → 連線正常?」積木確認;「協議版本」讀到 2 才是新韌體(舊韌體請改用舊版擴展 v1)。
  • 上傳失敗、或積木是空白的? → 確認右下角切到「上傳」模式、擴展 v2 已拖進 mBlock、USB 線接的是 mBot 主板。

範例 2:轉頭看燈

這個範例會做什麼:程式開始先「航向歸零」,之後用手轉動車子:右轉超過 20 度亮藍燈、左轉超過 20 度亮紅燈、對著原來的方向亮綠燈。這是後面「走直線」「轉 90 度」的判斷骨架。

要準備什麼

  • mBot(mCore 主板)+ mBlock 5 電腦版
  • IMU 陀螺儀(MakeBlock 版)+ mBot 插座片

怎麼接:IMU 陀螺儀 → mBot 插座片 → mBot 連接埠 2。感應器平放固定在車身上(不要晃動),板子絲印的 X 軸跟車子前後方向平行。程式開始時車子要靜止不動。

下載程式

mBlock 5 專案 等價 Arduino 程式
ex02_led_heading.mblock ex02_led_heading.ino
mBlock 積木(照著拼就好)
當 mBot 啟動時 :: events hat
wait (1) seconds
IMU 陀螺儀 連接埠 [2 v] 航向歸零 :: #D9480F
forever
  if <(IMU 陀螺儀 連接埠 [2 v] 陀螺 1D 航向 :: #D9480F) > (20)> then
    LED 燈位置 [全部 v] 的三原色數值為 紅 (0) 綠 (0) 藍 (255) :: looks
  else
    if <(IMU 陀螺儀 連接埠 [2 v] 陀螺 1D 航向 :: #D9480F) < (-20)> then
      LED 燈位置 [全部 v] 的三原色數值為 紅 (255) 綠 (0) 藍 (0) :: looks
    else
      LED 燈位置 [全部 v] 的三原色數值為 紅 (0) 綠 (255) 藍 (0) :: looks
    end
  end
end
🔧 等價 Arduino 程式(mBot)
// IMU 陀螺儀 × mBlock 5 範例 2:轉頭看燈(mBot 等價 Arduino 程式)
// 接線:IMU 陀螺儀 → mBot 插座片 → mBot 連接埠 2。感應器平放固定在車身上(不要晃動),板子絲印的 X 軸跟車子前後方向平行。程式開始時車子要靜止不動。
// 跟 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_port2(2);           // 感應器接在 mBot 連接埠 2
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_port2.begin();
  delay(1000);   // 等 1 秒讓感應器開機
  mbcWrite(mbc_port2, 0xE0);   // 航向歸零:現在的方向就是 0
  while (1) {   // 一直重複
    if ((mbcRead(mbc_port2, 0x03) > 20)) {   // 如果陀螺 1D 航向大於 20
      rgbled.setColor(0, 0, 0, 255); rgbled.show();   // 右轉超過 20 度:藍燈
    } else {
      if ((mbcRead(mbc_port2, 0x03) < -20)) {   // 否則,如果陀螺 1D 航向小於 -20
        rgbled.setColor(0, 255, 0, 0); rgbled.show();   // 左轉超過 20 度:紅燈
      } else {
        rgbled.setColor(0, 0, 255, 0); rgbled.show();   // 對著原來的方向:綠燈
      }
    }
  }
}

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

一步一步看懂程式

  1. 等 1 秒讓感應器開機
  2. 航向歸零:現在的方向就是 0
  3. 一直重複
    • 如果陀螺 1D 航向大於 20
      • 右轉超過 20 度:藍燈
      • 否則:
        • 否則,如果陀螺 1D 航向小於 -20
          • 左轉超過 20 度:紅燈
          • 否則:
            • 對著原來的方向:綠燈

跑起來應該看到什麼:開始時綠燈;把車子往右轉,過 20 度變藍燈;轉回來又變綠;往左轉過 20 度變紅燈。轉一整圈回來是 360,不會回到 0,所以還是藍燈。

常見問題

  • 右轉亮的是紅燈? → 感應器裝反了(上下顛倒)。翻過來裝,或把程式裡的 20 和 -20 對調。
  • 車子沒動,航向卻一直慢慢變? → 開機或歸零的那一下車子要完全靜止。把車子放好,拔掉感應器重插一次再試。
  • 什麼都沒反應、或讀值一直是 -32768? → 連接埠選錯(這頁都接連接埠 2)、插座片沒插緊、或感應器不是 MakeBlock 版。先用「MBC 共用 → 連線正常?」積木確認;「協議版本」讀到 2 才是新韌體(舊韌體請改用舊版擴展 v1)。
  • 上傳失敗、或積木是空白的? → 確認右下角切到「上傳」模式、擴展 v2 已拖進 mBlock、USB 線接的是 mBot 主板。

範例 3:前傾後仰控制一個輪子

這個範例會做什麼:把「俯仰角 × 2」直接當左輪的動力:車頭抬高輪子往前轉、壓低倒轉、平放不動,歪越多轉越快。先把車子架高看。

要準備什麼

  • mBot(mCore 主板)+ mBlock 5 電腦版
  • mBot 兩輪小車(左輪接 M1、右輪接 M2,出廠就是這樣接)
  • IMU 陀螺儀(MakeBlock 版)+ mBot 插座片

怎麼接:IMU 陀螺儀 → mBot 插座片 → mBot 連接埠 2。感應器平放固定在車身上(不要晃動),板子絲印的 X 軸跟車子前後方向平行。程式開始時車子要靜止不動。

下載程式

mBlock 5 專案 等價 Arduino 程式
ex03_tilt_one_wheel.mblock ex03_tilt_one_wheel.ino
mBlock 積木(照著拼就好)
當 mBot 啟動時 :: events hat
wait (1) seconds
forever
  左輪動力 ((IMU 陀螺儀 連接埠 [2 v] 俯仰角 :: #D9480F) * (2)) %,右輪動力 (0) % :: motion
end
🔧 等價 Arduino 程式(mBot)
// IMU 陀螺儀 × mBlock 5 範例 3:前傾後仰控制一個輪子(mBot 等價 Arduino 程式)
// 接線:IMU 陀螺儀 → mBot 插座片 → mBot 連接埠 2。感應器平放固定在車身上(不要晃動),板子絲印的 X 軸跟車子前後方向平行。程式開始時車子要靜止不動。
// 跟 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_port2(2);           // 感應器接在 mBot 連接埠 2
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_port2.begin();
  delay(1000);   // 等 1 秒讓感應器開機
  while (1) {   // 一直重複
    wheels((mbcRead(mbc_port2, 0x06) * 2), 0);   // 左輪動力 = 俯仰角 × 2,右輪 0
  }
}

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

一步一步看懂程式

  1. 等 1 秒讓感應器開機
  2. 一直重複
    • 左輪動力 = 俯仰角 × 2,右輪 0

跑起來應該看到什麼:平放左輪不動;車頭抬高 30 度左輪用 60 的動力往前轉;壓低車頭倒轉。

常見問題

  • 車子往反方向轉、越修越歪? → 左右輪的「+」「-」對調(或把左輪、右輪的動力互換)。mBot 出廠左輪 M1、右輪 M2,自己接線的請確認。
  • 平放輪子還微微轉? → 俯仰角不一定剛好 0。加一個「如果 絕對值 小於 3 就動力 0」。
  • 車子沒動,航向卻一直慢慢變? → 開機或歸零的那一下車子要完全靜止。把車子放好,拔掉感應器重插一次再試。
  • 什麼都沒反應、或讀值一直是 -32768? → 連接埠選錯(這頁都接連接埠 2)、插座片沒插緊、或感應器不是 MakeBlock 版。先用「MBC 共用 → 連線正常?」積木確認;「協議版本」讀到 2 才是新韌體(舊韌體請改用舊版擴展 v1)。
  • 上傳失敗、或積木是空白的? → 確認右下角切到「上傳」模式、擴展 v2 已拖進 mBlock、USB 線接的是 mBot 主板。

範例 4:走直線自動修正

這個範例會做什麼:兩個輪子不可能完全一樣快,車子直走久了會歪。先航向歸零,然後用「航向 × 2」當修正力量:往右歪(航向變大)左輪減速、右輪加速,把車頭拉回來。

要準備什麼

  • mBot(mCore 主板)+ mBlock 5 電腦版
  • mBot 兩輪小車(左輪接 M1、右輪接 M2,出廠就是這樣接)
  • IMU 陀螺儀(MakeBlock 版)+ mBot 插座片

怎麼接:IMU 陀螺儀 → mBot 插座片 → mBot 連接埠 2。感應器平放固定在車身上(不要晃動),板子絲印的 X 軸跟車子前後方向平行。程式開始時車子要靜止不動。

下載程式

mBlock 5 專案 等價 Arduino 程式
ex04_drive_straight.mblock ex04_drive_straight.ino
mBlock 積木(照著拼就好)
當 mBot 啟動時 :: events hat
wait (1) seconds
IMU 陀螺儀 連接埠 [2 v] 航向歸零 :: #D9480F
forever
  set [修正 v] to ((IMU 陀螺儀 連接埠 [2 v] 陀螺 1D 航向 :: #D9480F) * (2))
  左輪動力 ((40) - (修正)) %,右輪動力 ((40) + (修正)) % :: motion
end
🔧 等價 Arduino 程式(mBot)
// IMU 陀螺儀 × mBlock 5 範例 4:走直線自動修正(mBot 等價 Arduino 程式)
// 接線:IMU 陀螺儀 → mBot 插座片 → mBot 連接埠 2。感應器平放固定在車身上(不要晃動),板子絲印的 X 軸跟車子前後方向平行。程式開始時車子要靜止不動。
// 跟 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_port2(2);           // 感應器接在 mBot 連接埠 2
MeDCMotor motorL(9);           // 左輪(M1)
MeDCMotor motorR(10);          // 右輪(M2)
MeRGBLed rgbled(7, 2);         // 板載 RGB LED(2 顆)
MeBuzzer buzzer;               // 板載蜂鳴器
float fix = 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_port2.begin();
  delay(1000);   // 等 1 秒讓感應器開機
  mbcWrite(mbc_port2, 0xE0);   // 航向歸零:現在的方向就是 0
  while (1) {   // 一直重複
    fix = (mbcRead(mbc_port2, 0x03) * 2);   // 修正 = 陀螺 1D 航向 × 2
    wheels((40 - fix), (40 + fix));   // 左輪 = 40 − 修正、右輪 = 40 + 修正:往右歪(航向為正)就左輪慢、右輪快
  }
}

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

一步一步看懂程式

  1. 等 1 秒讓感應器開機
  2. 航向歸零:現在的方向就是 0
  3. 一直重複
    • 修正 = 陀螺 1D 航向 × 2
    • 左輪 = 40 − 修正、右輪 = 40 + 修正:往右歪(航向為正)就左輪慢、右輪快

跑起來應該看到什麼:車子走直線;用手把車頭推歪,它會自己轉回原來的方向繼續直走。

常見問題

  • 越走越歪、甚至原地打轉? → 修正方向相反了(感應器裝反):把「40 − 修正」和「40 + 修正」對調。
  • 左右抖動? → 把 × 2 改小(例如 × 1)。
  • 車子沒動,航向卻一直慢慢變? → 開機或歸零的那一下車子要完全靜止。把車子放好,拔掉感應器重插一次再試。
  • 什麼都沒反應、或讀值一直是 -32768? → 連接埠選錯(這頁都接連接埠 2)、插座片沒插緊、或感應器不是 MakeBlock 版。先用「MBC 共用 → 連線正常?」積木確認;「協議版本」讀到 2 才是新韌體(舊韌體請改用舊版擴展 v1)。
  • 上傳失敗、或積木是空白的? → 確認右下角切到「上傳」模式、擴展 v2 已拖進 mBlock、USB 線接的是 mBot 主板。

範例 5:直走、右轉 90 度、再直走

這個範例會做什麼:比賽常用的動作:直走 2 秒 → 原地右轉到航向 90 度 → 嗶一聲 → 再直走 2 秒。靠陀螺儀轉彎比「轉幾秒」準很多:用「等到航向大於 88」等它轉到位(留 2 度給煞車)。這個範例沒有「一直重複」,做完就停。

要準備什麼

  • mBot(mCore 主板)+ mBlock 5 電腦版
  • mBot 兩輪小車(左輪接 M1、右輪接 M2,出廠就是這樣接)
  • IMU 陀螺儀(MakeBlock 版)+ mBot 插座片

怎麼接:IMU 陀螺儀 → mBot 插座片 → mBot 連接埠 2。感應器平放固定在車身上(不要晃動),板子絲印的 X 軸跟車子前後方向平行。程式開始時車子要靜止不動。

下載程式

mBlock 5 專案 等價 Arduino 程式
ex05_turn_90.mblock ex05_turn_90.ino
mBlock 積木(照著拼就好)
當 mBot 啟動時 :: events hat
wait (1) seconds
IMU 陀螺儀 連接埠 [2 v] 航向歸零 :: #D9480F
左輪動力 (40) %,右輪動力 (40) % :: motion
wait (2) seconds
停止移動 :: motion
wait (0.5) seconds
IMU 陀螺儀 連接埠 [2 v] 航向歸零 :: #D9480F
左輪動力 (25) %,右輪動力 (-25) % :: motion
wait until <(IMU 陀螺儀 連接埠 [2 v] 陀螺 1D 航向 :: #D9480F) > (88)>
停止移動 :: motion
播放音頻 (880) 赫茲,持續 (0.3) 秒 :: sound
左輪動力 (40) %,右輪動力 (40) % :: motion
wait (2) seconds
停止移動 :: motion
🔧 等價 Arduino 程式(mBot)
// IMU 陀螺儀 × mBlock 5 範例 5:直走、右轉 90 度、再直走(mBot 等價 Arduino 程式)
// 接線:IMU 陀螺儀 → mBot 插座片 → mBot 連接埠 2。感應器平放固定在車身上(不要晃動),板子絲印的 X 軸跟車子前後方向平行。程式開始時車子要靜止不動。
// 跟 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_port2(2);           // 感應器接在 mBot 連接埠 2
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_port2.begin();
  delay(1000);   // 等 1 秒讓感應器開機
  mbcWrite(mbc_port2, 0xE0);   // 航向歸零:現在的方向就是 0
  wheels(40, 40);   // 直走
  delay(2000);   // 走 2 秒
  wheels(0, 0);   // 停一下
  delay(500);   // 等 0.5 秒讓車子靜止
  mbcWrite(mbc_port2, 0xE0);   // 航向歸零:現在的方向就是 0
  wheels(25, -25);   // 左輪往前、右輪往後:原地右轉(慢一點比較準)
  while (!(mbcRead(mbc_port2, 0x03) > 88)) delay(5);   // 等到航向大於 88 度
  wheels(0, 0);   // 轉到 90 度:停車
  buzzer.tone(880, 300);   // 嗶一聲
  wheels(40, 40);   // 再直走
  delay(2000);   // 走 2 秒
  wheels(0, 0);   // 停車
}

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

一步一步看懂程式

  1. 等 1 秒讓感應器開機
  2. 航向歸零:現在的方向就是 0
  3. 直走
  4. 走 2 秒
  5. 停一下
  6. 等 0.5 秒讓車子靜止
  7. 航向歸零:現在的方向就是 0
  8. 左輪往前、右輪往後:原地右轉(慢一點比較準)
  9. 等到航向大於 88 度
  10. 轉到 90 度:停車
  11. 嗶一聲
  12. 再直走
  13. 走 2 秒
  14. 停車

跑起來應該看到什麼:車子直走 2 秒、原地右轉約 90 度、嗶一聲、再走 2 秒停下,走出一個 L 形。

常見問題

  • 每次都轉過頭幾度? → 把 88 改成 85,或把轉速 25 再調慢。
  • 一直轉不停? → 右轉時航向沒有變大(感應器裝反):把「25、-25」改成「-25、25」。
  • 車子沒動,航向卻一直慢慢變? → 開機或歸零的那一下車子要完全靜止。把車子放好,拔掉感應器重插一次再試。
  • 什麼都沒反應、或讀值一直是 -32768? → 連接埠選錯(這頁都接連接埠 2)、插座片沒插緊、或感應器不是 MakeBlock 版。先用「MBC 共用 → 連線正常?」積木確認;「協議版本」讀到 2 才是新韌體(舊韌體請改用舊版擴展 v1)。
  • 上傳失敗、或積木是空白的? → 確認右下角切到「上傳」模式、擴展 v2 已拖進 mBlock、USB 線接的是 mBot 主板。

下一步

其他問題

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

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

下載

本頁依據

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