MBC 循行者 16 路 × Pybricks 內建積木

不匯入函式庫,用 Pybricks 內建積木讀循行者 16 路

循行者 16 路插在 SPIKE 上會被當成樂高顏色感應器,所以 Pybricks 內建的顏色感應器積木就讀得到:reflection()(反射光)和 ambient()(環境光)兩個數字,循行者 16 路在裡面各裝了一組值,用數學積木拆開就能用。左邊一步一步做,右邊的積木會跟著長出來;積木圖是直接從 Pybricks Code 拼好匯出的。

跟「Pybricks 積木(匯入函式庫)」差在哪?
  • 這頁:不用下載、匯入任何檔案,打開 Pybricks 就能拼;但只拿得到 2 個數字(線位置、細位置和線寬),要自己用 // 和 % 拆。
  • 匯入函式庫:要先匯入 MBC_line16.py,但一次讀得到 16 個功能(例如 16 路光值、踩到哪幾路、岔路、有沒有接好),一個功能一個積木。

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

1

set up:建立顏色感應器、選孔

不用匯入函式庫:在黃色「set up」下面接 Pybricks 內建的顏色感應器積木(ColorSensor),選循行者 16 路插的孔,名字取 line16。

循行者 16 路插在哪個孔?
  1. 在 Pybricks Code 按「+」新增檔案,選用積木(blocks)寫。
  2. 從「Sensors(感應器)」拖出顏色感應器的設定積木(感應器圖示),接在「set up」下面,名字改成 line16(可以取任何英文名字),孔選上面那個。
2

program:讀 reflection() 和 ambient()

在「program」下面放「repeat while true」,裡面用「print」印出 line16 reflected light(reflection)和 line16 ambient light(ambient),最後「wait 100 ms」。Pybricks 讀 reflection 時會自動把感應器切到 SPIKE 模式 5、讀 ambient 時切到模式 7,循行者 16 路在這兩個模式各放一組數字:

模擬畫面現在讀到:

Pybricks 4.1 的 reflection() 在 2026-11-01 以前的感應器韌體會帶 1 位小數(之後的韌體剛好是整數),一律先取整數,新舊韌體都對;超過 3199 會變成負數(循行者 16 路在線位置 +16 時會發生),取整數之後再加 6399 修回來。取整數要「往 0 截斷」:負數用「無條件進位」,不能用「無條件捨去」(實測捨去會拆成 15、99,正確是 16、0)。ambient() 小數點前是細位置+100、小數第 1 位是線寬(最多顯示 9,要 2026-10-30 以後的韌體)。2026-10-29~11-01 在 Pybricks 4.1.2 的 Pybricks Code 積木實測通過。

3

用數學積木拆開、使用

先用「Variables」的「set to」把讀到的值存進變數:r=reflection,a=ambient(原值)。再用「Math」的 //(÷ 取整數)和 %(÷ 的餘數)拆成兩個值,印出來或拿來判斷。點一個功能,積木和輸出會換成它的範例。

模擬感應器(從車子後面往前看):拖動黑線,看右邊的輸出怎麼變

模擬畫面是示意:數值換算簡化過,實際感應器可能差一兩格。圓圈裡是那一路的光值(0 = 黑、15 = 白);紅框 = 那一路判斷在線上。

每個功能的積木範例

每個功能都有一組可以照著拼的積木(名字 line16、C 孔)。按「試試看」會切到第 3 步,右邊的積木和輸出會換成這個範例。

想要更多值就改用 匯入函式庫的 Pybricks 積木 或 MicroPython。

使用注意

  1. 只有 2 個數字。reflection() 和 ambient() 各一個,其他值讀不到(第 2 步表格下面有列)。要用請改 匯入函式庫的 Pybricks 積木。
  2. Pybricks 4.1 的讀值帶小數:reflection() 會帶 1 位小數(例如 81.3),先取整數(≥ 0 用「無條件捨去」、負數用「無條件進位」)再用 // 和 %;ambient() 只剩 1 位小數,整數部分和小數第 1 位分開拆(floor、round(a × 10) % 10)。
  3. reflection() 會變負數:線位置 +16(線從右邊離開)時值超過 3199,Pybricks 顯示成負數。一定要先取整數、再「r 小於 0 就加 6399」,最後才拆。
  4. 看不到線:線寬是 0;線位置、細位置停在最後離開的那一側(−16/+16、−100/+100)。
  5. 方向:站在車後面往前看,線在左邊是負數、右邊是正數;第 1 路在最左邊。
  6. 不要用「color」積木或顏色名稱比對。循行者 16 路放的是數字,一律存進變數用數字比大小。拔掉感應器時內建積木會出錯讓程式停下(函式庫版不會)。
  7. 積木背後就是 MicroPython。Pybricks Code 右邊的程式窗格就是積木產生的程式,跟這頁「對應的 MicroPython」一樣。