MBC 神攝手 × Arduino(I2C 0x4C)

三個步驟用 Arduino 讀神攝手

Arduino 用 I2C 讀相機,位址 0x4C,UNO、Nano、UNO R4、ESP32 都可以。照順序做:先接線、貼小幫手、選相機模式,再在 setup() 開始通訊、等相機準備好並切模式,最後在 loop() 讀值。左邊一步一步做,右邊的程式會跟著長出來;拖模擬相機畫面看序列埠會印出什麼。

v1 尚未上機驗證數值排法已定案並通過電腦端測試,實機數值(fps、循線門檻、I2C 腳位)上機後可能調整。

1

接線、貼小幫手、選相機模式

Arduino 不用裝函式庫:把「小幫手」貼進程式——開頭幾行(位址、結構)放最上面,函式放最下面。之後就能用 ucReadBlob() 這些函式。

  1. 接線:相機 5V → 5V(相機很耗電,建議外接 5 V、2 A 以上,GND 接在一起)、GND → GND、SDA → A4、SCL → A5(UNO/Nano)。UNO R4 接板子上標 SDA/SCL 的腳;ESP32 接 GPIO 21(SDA)/22(SCL)。
  2. I2C 腳位暫定,待上機:相機端目前是 SDA=IO3、SCL=IO1;相機要燒「I2C 版」韌體(跟樂高串口版共用 IO1/IO3,二選一)。
  3. 把右邊標 ① 的程式貼進 Arduino IDE(小幫手在最下面,按「顯示小幫手」看全部;「複製程式」一定是完整的)。也可以下載 MBC_UniCam.h 放進草稿碼資料夾,改成 #include "MBC_UniCam.h"。
  4. 選相機模式:下面點一個模式編號(模式編號=相機模式 ×10+子選項)。I2C 可以用命令切模式,第 2 步的程式開機時會幫相機切過去。
2

setup():開始通訊、等相機、切模式

相機(ESP32)開機要幾秒。setup() 先開始 I2C 通訊、等相機回應(最多 8 秒),再用 E0 命令把相機切到第 1 步選的模式。

開機時要不要用程式切模式?

3

在 loop() 讀值

功能依相機模式分組,虛線框的功能是別的模式用的,要換模式才能用(點下去會幫你換,程式的 MODE 跟著改)。點一個功能,右邊的程式和輸出會換成它的範例。

模擬相機畫面:拖動畫面裡的東西,看右邊的輸出怎麼變

模擬畫面是示意:數值直接用畫面上的位置換算(X 0~159 左→右、Y 0~119 上→下、面積 %=寬×高÷整個畫面),色相碼是那張色紙/積木本來的顏色(紅 0、黃 40、綠 80、藍 160、紫 200、白桌面 244、黑膠帶 252),不是相機裡面的算法;實際數值會因光線差一些。顏色追蹤假設相機上已經教了 4 色:色 1 紅、色 2 綠、色 3 藍、色 4 黃。物體偵測的形狀是你直接選的(不是相機判斷的),物體 1、2…照面積由大到小排,X、Y 是形狀的質心(白點)、虛線框是外框,角度就是你轉的角度。

每個功能的範例

每個功能都有一段可以直接放進 loop() 的範例,右上角標它能用的模式。按「試試看」會切到第 3 步。

完整範例

更多範例(追色塊、取樣點顏色、照順序、循線小車)在 Arduino 範例頁。

色 1~4 在哪裡(模式 13)

        

!先在相機上教目標 1~4 的顏色。按「複製」拿到的是完整程式(小幫手已經接好)。

循線讀值(模式 41 黑線)

        

!偏移線在左=負。看不到線時印最後離線方向,往那邊轉就能找回線。

使用注意

  1. 讀不到時:ucReadBlob() 這些函式回傳 false,單一值(mbcRead、ucColorsFound)是 −32768(MBC_NONE)。開機時找不到相機,setup() 會印提醒後停住;接好線按 Arduino 的重置鍵重來。在右邊勾「拔掉感應器」看看。
  2. I2C 版每個模式都給 16 色/16 點,數值是像素原值(模式 11 也是),不用拆格子。這個模式沒給的欄位是 −1(例如模式 13 沒有寬高)。
  3. 先判斷有沒有看到。X=0=沒看到。紅色的色相碼是 0,所以照順序給色號要看總塊數才知道前幾個有效。
  4. 座標方向:X 0~159 左→右、Y 0~119 上→下(上=小),中間 X=80。循線偏移:線在左=負、在右=正(站在車後面往前看)。
  5. 命令會存進相機:E0 切模式、E1 改取樣點位置,下次開機還是這個設定。目標顏色只能在相機上教,v1 沒有寫入顏色的命令。
  6. 小幫手要分兩段貼:#include <Wire.h>、位址與結構放最上面,函式放最下面(結構要先宣告,Arduino 才編得過)。