MBC IMU 陀螺儀 × Arduino

三個步驟用 Arduino 讀陀螺儀

寫 Arduino 程式照這個順序:先接好線、貼上小幫手,再在 setup() 開始通訊、等感應器準備好,最後在 loop() 用 mbcRead() 讀值。左邊一步一步做,右邊的程式會跟著長出來;轉動、抬高、搖晃模擬器裡的車子,就能看到序列埠監控視窗會印出什麼。

1

接線,貼上小幫手

Arduino 用 I2C(4 條線)跟感應器講話,不用安裝函式庫。程式最上面寫 2 行、最下面貼一段「小幫手」,之後就能用 mbcRead() 讀值、mbcWrite() 送命令。

你用哪一塊板子?(只差 SDA/SCL 接哪兩腳,程式完全一樣)

  1. 接線前先拔掉 USB 線。要用 通用 I2C 版(SPIKE 版、EV3 版的韌體不同,不能接 Arduino)。
  2. 感應器 VCC → 5V、GND → GND
  3. 感應器 SDA → A4、SCL → A5
  4. 感應器平放固定在車上,板子絲印的 X 軸跟車頭同方向。開機時車子要靜止約 0.5 秒,它會自己記住哪一面朝上並歸零。
  5. 打開 Arduino IDE:檔案 → 新增,把原本的內容刪掉。
  6. 最上面寫第 1、2 行;最下面貼「小幫手」(右邊程式標 ① 的地方,按「複製程式」會一起拿到)。
2

開始通訊,等感應器準備好

setup() 是開機時只跑一次的地方:打開序列埠、開始 I2C、等感應器說「準備好了」。ADDR 是感應器的「門牌號碼」(I2C 位址),之後每次讀值都寫它。

感應器的 I2C 位址:

找不到感應器的時候:

3

使用功能

讀值寫「mbcRead(ADDR, 編號)」,送命令寫「mbcWrite(ADDR, 命令)」。點一個功能,程式和序列埠監控視窗會換成它的範例。

模擬感應器:左邊從上面看(航向),右邊從側面看(俯仰)。拖動拉桿、按按鈕,看右邊的輸出怎麼變

模擬畫面是示意:數值用畫面上車子的方向和角度換算,不是感應器裡面的演算法;實際讀值會有 1 度左右的跳動。「歸零」按鈕 = 命令 E0。拔掉感應器時,Arduino 讀到的每個值都是 -32768。韌體版本 102 是示意值。

每個功能的範例

28 個功能(讀值、命令、每款 MBC 感應器都有的共用編號),每個都有一段範例。按「試試看」會切到第 3 步,右邊的程式和序列埠監控視窗會換成這個範例。

完整範例

按「複製」拿到的是完整程式(最下面已經接好小幫手),貼進 Arduino IDE 就能上傳。

四個航向+打 z 歸零

        

!照網站範例 3 改短。上傳後打開序列埠監控視窗(115200),把陀螺儀平放慢慢轉一圈看數字;在上面的輸入框打 z 再按 Enter,四個航向都歸零。

哪一面朝上?平放就亮燈

        

!照網站範例 6 改短:一次讀 0x08~0x0A(磁力信任度、干擾度、朝上的面),朝上的面有變才印一行;平放(+Z 朝上)時板子內建的 LED 亮。

使用注意

  1. 拔線不會讓程式停。讀不到時 mbcRead() 回傳 -32768(MBC_NONE),mbcReadMany() 回傳 false;插回去就恢復。-32768 剛好也是航向能表示的最小值,所以拿航向做判斷前先檢查是不是 MBC_NONE(小車讀不到要先停車)。
  2. 方向:右轉航向變大、左轉變小,轉一圈 = 360,會一直累加(兩圈 = 720,也可以是負的)。右轉變小就是感應器裝反了(上下顛倒)。「角速度 Z」是原始陀螺值,平放時右轉為負,跟航向相反。
  3. 四種航向怎麼選:先用 3D 航向(任意角度安裝都準);要開很久、不想飄就用融合航向;附近有馬達、鐵製場地時磁力計會被干擾,用 3D 航向。磁力航向是相對值,不是指北。
  4. 連號一次讀:0x01~0x0A、0x10~0x18 各自連號,用 mbcReadMany() 一次讀,保證是同一瞬間的資料。序列埠監控視窗的速度要選 115200。