MBC 神攝手 × Pybricks(SPIKE)

三個步驟用 MicroPython 讀神攝手

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

SPIKE 已上機驗證2026-11-01 用出貨版韌體 v1.0-261101 在實機跑過(Pybricks 函式庫與積木、Pybricks 內建積木、官方 App 教育版與家用版、MBC 積木網站)。

1

匯入函式庫、選相機模式

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

  1. 下載函式庫(存成檔案,檔名不要改):MBC_UniCam.py。
  2. 在 Pybricks Code 左邊檔案區按「Import a file」,把它匯入同一個專案,不要放進子資料夾。
  3. 相機插主機 A~F 任一孔,由主機供電;相機螢幕左上角綠色=連線中。
  4. 選相機模式:在相機的 MODE 選單選相機模式和子選項,下面點同一個模式編號(模式編號=相機模式 ×10+子選項)。
2

建立物件:幫相機取名字

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

相機接在哪個孔?

要不要開啟多工?

mode= 後面的數字是第 1 步選的模式編號;相機選單也要切到同一個模式(SPIKE 讀不到相機現在是哪個模式,不一樣時數字會亂掉)。

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 步(需要的話也幫你換模式)。

完整範例

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

跟著色塊轉(模式 13,左輪 E、右輪 F)

        

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

循線(模式 41 黑線)

        

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

使用注意

  1. 拔線不會讓程式停。讀不到時回傳上一次讀到的值,從來沒讀到過就回傳 None,電腦畫面印一行提醒;插回去自動恢復。要知道有沒有接好就用 sensor_ok()。在右邊勾「拔掉感應器」看看。
  2. 模式編號一定要跟相機選單一樣。SPIKE 讀不到相機現在的模式,函式庫照 mode= 解讀。用了這個模式沒有的功能會出現 ValueError(訊息會寫要用哪個模式)。
  3. 先判斷有沒有看到。座標 (0, 0)、面積 0=沒看到。紅色的色相碼是 0,所以照順序給色號要先看 total() 才知道前幾格有效。
  4. 座標方向:X 0~159 左→右,Y 0~119 上→下(上=小),畫面中間 X=80。模式 11 的位置是 16×12 格的格子中心(±5 像素)。循線偏移:線在左=負、在右=正(站在車後面往前看)。
  5. 同一組資料 10 ms 內重複讀不會變慢。大部分值在模式 9,一次讀好幾個沒關係;模式 11、12 的 count()、colors_found() 讀模式 6,換模式要多等約 30 ms,不要每圈都叫。device_id() 讀模式 8,放迴圈外面。
  6. 顏色要在相機上教。「目標 1」就是程式裡的色 1;程式改不了目標色。座標取色的取樣點位置也在相機上改。