MBC 神攝手 × EV3 MicroPython(Pybricks)

三個步驟用 EV3 MicroPython 讀神攝手

寫程式一定照這個順序:先匯入函式庫、選好相機模式,再建立物件、幫相機取名字,最後用這個名字去呼叫功能。左邊一步一步做,右邊的程式會跟著長出來;在模擬的相機畫面裡拖色塊、色紙、積木或線,就能看到程式會印出什麼。

EV3 已上機驗證2026-11-03 用出貨版韌體 v1.0-261101 在實機跑過:原廠 EV3 韌體(EV3-G 紅外線積木、13 個相機模式逐格讀)、Pybricks v4 範例 1~4;ev3dev/EV3 MicroPython v2 只核對模式表(跟原廠紅外線感應器相同)。EV3 版不能從主機下命令,相機模式在相機 MENU 切。

1

匯入函式庫、選相機模式

程式的第一件事是告訴主機「我要用神攝手的函式庫」。沒有這行,後面寫的 UniCam 主機看不懂,會出現 NameError。

  1. 下載函式庫(存成檔案,檔名不要改):MBC_UniCam_EV3.py。
  2. EV3 MicroPython(VS Code):放進專案資料夾,跟 main.py 同一層。Pybricks(code.pybricks.com):按「Import a file」匯入同一個專案。
  3. 相機用 EV3 線插 1~4 號孔,由主機供電。相機在 EV3 上會顯示成紅外線感應器。
  4. 選相機模式:在相機的 MODE 選單選相機模式和子選項,下面點同一個模式編號(模式編號=相機模式 ×10+子選項)。
2

建立物件:幫相機取名字

一台車可能接好幾個感應器,所以要「建立一個物件」:告訴程式相機接在哪個孔、是哪個模式,並幫它取個名字。之後每次讀值都叫這個名字。

相機接在哪個孔?

模式編號要不要寫在程式裡?

mode= 後面的數字是第 1 步選的模式編號;相機選單也要切到同一個模式(不一樣時函式庫會照你寫的模式解讀,數字會亂掉)。

3

使用功能

寫法都是「cam.功能名稱()」:名字+小數點+功能。功能依相機模式分組,虛線框的功能是別的模式用的,要換模式才能用(點下去會幫你換)。點一個功能,程式和輸出會換成它的範例。

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

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

每個功能的範例

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

完整範例

按「複製」拿到完整程式。更多範例(多色、取色、照順序、循線停路口)在 EV3 範例頁。

跟著色塊轉(模式 13,左輪 B、右輪 C)

        

!先在相機上教「目標 1」的顏色,相機選單切到模式 13。色塊在左邊車子卻往右轉:把 KP 改成負數。

循線(模式 41 黑線)

        

!相機斜看前方地面。偏移在左=負,所以「線在左 → 往左轉」用 turn = KP * e。看不到線時照最後離線方向原地轉找線。

使用注意

  1. 拔線不會讓程式停,但讀到的是 None。EV3 函式庫讀不到時回傳 None(不是上一次的值),電腦畫面印一行「MBC: 讀不到感應器」。拿 None 去比大小會出 TypeError,所以重要的程式先寫 if v is None:。在右邊勾「拔掉感應器」看看。
  2. 模式編號一定要跟相機選單一樣。寫了 mode= 就照你寫的解讀;不寫就讀紅外線模式 0 自動取得。用了這個模式沒有的功能會出現 ValueError(訊息會寫要用哪個模式)。
  3. 先判斷有沒有看到。座標 (0, 0)、面積 0=沒看到。紅色的色相碼是 0,所以照順序給色號要先看 total() 才知道前幾格有效。
  4. 座標方向:X 0~159 左→右,Y 0~119 上→下(上=小),畫面中間 X=80。EV3 的位置是 8×6 格的格子中心(±10 像素),grid() 讀原始格子(EV3 原始 Y 是下=小)。循線偏移:線在左=負、在右=正(站在車後面往前看)。
  5. EV3 每換一次紅外線模式約 1.1 秒。大部分值在模式 1;循線的 edges()、far_width()、marker()、line_all() 和照順序給色號要多讀模式 2。同一個迴圈不要一直在兩組之間換。EV3 沒有 lost()、cell()、colors_found()、firmware_version();count() 只有模式 14。
  6. 顏色要在相機上教。「目標 1」就是程式裡的色 1;程式改不了目標色。座標取色的取樣點位置也在相機上改。