MBC 神攝手 × Pybricks 內建積木

不匯入函式庫,用 Pybricks 內建積木讀神攝手

神攝手插在 SPIKE 上會被當成樂高顏色感應器,所以 Pybricks 內建的顏色感應器積木就讀得到:reflection()(反射光)和 ambient()(環境光)兩個數字,每個相機模式在裡面裝不同的東西,用數學積木拆開就能用。左邊一步一步做,右邊的積木會跟著長出來;積木圖是直接從 Pybricks Code 拼好匯出的。

跟「Pybricks 積木(匯入函式庫)」差在哪?
  • 這頁:不用下載、匯入任何檔案,打開 Pybricks 就能拼;但每個相機模式只拿得到 2 個數字(位置只到 40×30 格),要自己用 // 和 % 拆。
  • 匯入函式庫:要先匯入 MBC_UniCam.py,但一次讀得到很多值(例如 14 色、像素座標、面積、物體形狀),直接一個功能一個積木。

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

1

set up:建立顏色感應器、選孔、選相機模式

先確認:Pybricks 的積木模式要授權碼或 Patreon 贊助才能用。沒有授權可以直接寫 MicroPython,寫法一模一樣(右邊切到「對應的 MicroPython」)。

不用匯入函式庫:在黃色「set up」下面接 Pybricks 內建的顏色感應器積木(ColorSensor),選神攝手插的孔,名字取 cam。

神攝手插在哪個孔?
  1. 在 Pybricks Code 按「+」新增檔案,選用積木(blocks)寫。
  2. 從「Sensors(感應器)」拖出顏色感應器的設定積木(感應器圖示),接在「set up」下面,名字改成 cam(可以取任何英文名字),孔選上面那個。
  3. 選相機模式:在相機的 MODE 選單選相機模式和子選項,下面點同一個模式編號(模式編號=相機模式 ×10+子選項)。程式裡不用寫模式,但拆數字要照它。
2

program:讀 reflection() 和 ambient()

在「program」下面放「repeat while true」,裡面用「print」印出 cam reflected light(reflection)和 cam ambient light(ambient),最後「wait 100 ms」。Pybricks 讀 reflection 時會自動把感應器切到 SPIKE 模式 5、讀 ambient 時切到模式 7,神攝手在這兩個模式各放一組數字。下面的表是你在第 1 步選的模式兩個數字裝什麼(換模式表會跟著換):

模擬畫面現在讀到:

reflection() 是整數,超過 3199 會變成負數(Pybricks 的算法),加 6399 就修回來;ambient() 是小數 A.B(只有 1 位小數:Pybricks 4.1 起只留 1 位,3.x 也一樣),小數點前是第一個值、小數第一位是第二個值。每個模式的完整排法見 數值對照表的「Pybricks 積木」欄。

3

用數學積木拆開、使用

先用「Variables」的「set to」把讀到的值存進變數:r=reflection(負數先加 6399),a=ambient。reflection 用「Math」的 //(÷ 取整數)和 %(÷ 的餘數)拆成兩個值;ambient 用 round down(無條件捨去)拿整數部分、round(a × 10) % 10 拿小數第一位。印出來或拿來判斷。功能依相機模式分組,虛線框的是別的模式用的(點下去會幫你換模式)。

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

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

每個功能的範例

每個功能都有一組可以照著拼的積木(名字 cam、C 孔),右上角標它能用的模式。按「試試看」會切到第 3 步(需要的話也幫你換模式)。

完整範例

想要更多值(14 色、像素座標、面積、物體形狀、循線中段偏移…)就改用 匯入函式庫的 Pybricks 積木 或 MicroPython;完整程式(追色塊轉向、循線)在 SPIKE 範例頁。

使用注意

  1. 每個模式只有 2 個數字。reflection() 和 ambient() 各一個,每個裝 1~2 個值;其他值(例如第 3 色以後、像素座標、面積)讀不到,第 2 步表格下面有列。要用請改 匯入函式庫的 Pybricks 積木。
  2. reflection() 會變負數:位置 X 超過 31(40 格)時值超過 3199,Pybricks 顯示成負數。一定要先「r 小於 0 就加 6399」再拆(Kito 範例也是這樣)。
  3. ambient() 只有 1 位小數:Pybricks 4.1 起 ambient() 只留小數第一位,所以每個模式的 ambient 都排成「整數.小數第一位」。小數直接 × 10 會有誤差(例如 4.3 × 10 可能是 42.9999),要先四捨五入(round)再 % 10。
  4. 相機模式要跟相機選單一樣。Pybricks 讀不到相機的模式,程式裡也沒有地方寫;選錯模式,拆出來的數字沒有意義。
  5. 不要用「color」積木或顏色名稱比對。神攝手放的是數字,一律存進變數用數字比大小。拔掉感應器時內建積木會出錯讓程式停下。
  6. 座標方向:X 左→右、Y 上→下(上=小),一格 4 像素;循線偏移:線在左=負、在右=正(站在車後面往前看)。顏色要在相機上教。