EV3 範例:神攝手

回到神攝手 | EV3 讀法說明 | 讀值參考:EV3

警告

EV3 已上機驗證(2026-11-03,出貨版 v1.0-261101):原廠韌體(EV3-G 積木、Direct Command 讀 13 個模式)與 Pybricks v4 範例 1~4 都在實機通過。

這一頁是 EV3 的 Python 範例 4 個:跟著色塊轉、座標取色判斷顏色、PD 循線+路口停車、物體偵測(跟著正方形走)。同一支程式在 Pybricks v4 和 樂高官方 EV3 MicroPython v2 都能跑,函式庫 MBC_UniCam_EV3.py 會自己判斷。EV3-G、EV3 Classroom 用紅外線感應器積木讀,做法在 EV3 讀法說明。

軟體 怎麼用
🐍 Pybricks v4(code.pybricks.com,EV3 要先燒 Pybricks 韌體) 左邊「Import a file」→ 範例檔和 MBC_UniCam_EV3.py 兩個都要匯入 → ▶
🐍 樂高官方 EV3 MicroPython v2(microSD 開機卡+VS Code「LEGO MINDSTORMS EV3 MicroPython」擴充) 範例檔和 MBC_UniCam_EV3.py 放在同一個專案資料夾 → 下載並執行

重要

  • 相機要用 EV3 版韌體。相機在 EV3 上顯示成樂高紅外線感應器:模式 0 近距=模式編號、模式 1 信標=8 個值、模式 2 遙控=4 個值、模式 5=裝置 ID。
  • EV3 讀得到相機目前的模式:UniCam(Port.S1) 不填 mode,第一次用時自動讀模式 0(多約 0.5 秒);範例會先檢查模式對不對,切錯了會嗶一聲、印提醒。
  • EV3 每換一次模式約 0.5 秒:同一個迴圈盡量只用同一個 EV3 模式的值(下面的表有寫每個值在哪個模式)。

全部平台的函式庫一包下載:MBC_UniCam_v1_Host_Libraries.zip

開始之前:在相機上教色、切模式

  1. 教色:即時畫面用左右鍵停在「目標 1」→ OK → 把十字移到色塊上(AxisX → AxisY)→ OK 取色。
  2. 切模式:左右鍵停在 MODE → OK → 選相機模式 → OK → 選子選項 → OK。螢幕右上的「1-3」=模式編號 13。子選項會顯示 EV3 實際給幾個(例如「8 XY」)。
模式編號 相機選單 EV3 給什麼
11 1 顏色追蹤 ① 最多色 12 色位置(8×6 格);色 1~8 在模式 1、色 9~12 在模式 2
12 1 顏色追蹤 ② 多色 8 色位置(模式 1)
13 1 顏色追蹤 ③ 標準 4 色位置+面積 %(模式 1)
14 1 顏色追蹤 ④ 精細 2 色位置、寬高(8×6 格)、數量、面積 %(模式 1)
21 2 座標取色 ① 色相 12 點色相(0~100 送,換回色相碼 ±2);點 1~8 模式 1、9~12 模式 2
22 2 座標取色 ② 4 點色相(±2)+飽和、明度(取到十位)(模式 1)
23 2 座標取色 ③ 2 點原始色相碼、飽和、明度(模式 1)
30 3 照順序給色號 左起 11 塊色相(±2)+總塊數(模式 1+2)
41/42/43 4 循線 近中遠偏移、角度、線寬、路口、旗標、路口距離、標記色號(模式 1);左右緣、遠線寬、標記條數(模式 2);EV3 沒有離線方向
51 5 物體偵測 ① 物體清單 5 個物體的代碼、位置(8×6 格);物體 1~4 在模式 1,物體 5 和物體數在模式 2
52 5 物體偵測 ② 物體詳細 2 個物體的代碼、位置、面積 %、角度(送 ÷2,函式庫 ×2 還原,±1 度)(全部在模式 1;沒有物體數、寬高)

數字怎麼看:函式庫把 EV3 的 8×6 格換成像素(X 0~159 左→右、Y 0~119 上→下,跟 SPIKE 一樣),是格子中心,誤差 ±10 像素;**(0, 0)=沒找到。要 EV3 原始的格子(Y 下=小)用 grid(c)。循線偏移 −100~100,站在車後往前看,線在左=負**。

物體(模式 51/52):物體代碼=色號×10+形狀(例 14=目標 1 的正方形),0=沒有。形狀 0 其他、1 圓、2 橢圓、3 三角、4 正方、5 長方、6 五邊、7 六邊、8 星、9 梯形。物體 1、2…=面積由大到小;位置是質心(同樣換成像素 ±10,原始格子用 object_grid(i))。角度 0~179:長邊往右=0,往畫面下方轉為正。

函式庫 MBC_UniCam_EV3.py 的方法

cam = UniCam(Port.S1) 或 UniCam(Port.S1, mode=13)(孔位也可以寫 1~4)。方法名稱跟 SPIKE 的 MBC_UniCam.py 一樣。

方法 回傳 哪些模式
mode_number() 相機目前的模式編號(mode 沒填時讀模式 0) 全部
xy(c)、x(c)、y(c)、found(c)、grid(c) 位置(像素 ±10)、有沒有找到、原始 8×6 格 11~14
area(c) 面積 % 13、14
size(c)、count(c) (寬, 高) 像素 ±10、數量 14
max_color()/max_point() 這個模式給幾色/幾點 1x/2x
hue(i)、sat(i)、val(i)、hsv(i)、color(i) 色相碼、飽和、明度、顏色名稱 21~23
order()、total() 左起每塊色相碼(≤11)、總塊數 30
near() mid() far() angle() width() junction() flags() junction_dist() 循線(模式 1) 41~43
edges()、far_width()、marker()、line_all() 循線(要讀模式 2,會多 0.5 秒) 41~43
max_object()、object_count() 這個模式給幾個物體(51→5、52→2)、畫面裡幾個物體 0~8(51,讀模式 2) 51、52/51
object(i)、object_found(i)、object_color(i)、object_shape(i) 物體代碼(0=沒有)、有沒有、色號 1~8、形狀 0~9 51、52
object_xy(i)、object_grid(i) 質心(像素 ±10)、原始 8×6 格(Y 下=小) 51、52
object_area(i)、object_angle(i) 面積 %、角度 0~179(±1) 52
device_id()、is_unicam()、sensor_ok() 模式 5:(0x4C, 3, 100)、True、最近有沒有讀到 全部
shape_name(s, zh=False)、color_name(h)(模組函式) 形狀 0~9 → 'circle'…(zh=True 中文)、色相碼 → 顏色名稱 —
  • EV3 讀不到的值(模式 11~13 的數量、找到幾色、離線方向)呼叫會丟 ValueError;模式不對也會丟,訊息中英並列。
  • 讀不到相機時回傳 None,範例都會先判斷 None 再用。

範例 1:跟著色塊轉

這個範例會做什麼:車子轉向色 1,邊轉邊往前開;面積夠大就只轉不前進;看不到就原地慢慢轉著找。開頭會檢查相機是不是在模式 13。

相機要切到:相機模式 1 顏色追蹤 ・子選項 ③ 標準(XY+面積)=模式編號 13;先教「目標 1」。

要準備什麼:EV3 主機、相機插 1 號孔、左輪馬達 B、右輪 C、目標色的球或積木。

下載:ex01_track_turn.py+MBC_UniCam_EV3.py

Python 程式碼(Pybricks v4/EV3 MicroPython v2)
#!/usr/bin/env pybricks-micropython
# 神攝手 × EV3 範例 1:跟著色塊轉
# SharpShot × EV3 example 1: turn to follow a colour blob
# 需要把相機選單切到 相機模式 1 顏色追蹤 ・子選項 ③ 標準(XY+面積)=模式編號 13
# Camera menu: camera mode 1 Colour tracking, option 3 Standard (XY + area) = mode number 13
# 軟體 Software:Pybricks v4(code.pybricks.com)或 樂高官方 EV3 MicroPython v2(同一支程式都能跑)
# 準備:先在相機上教「目標 1」的顏色 / teach "target 1" on the camera first
# 接線 Wiring:相機 → 1 號孔 / camera → port 1;左輪 B、右輪 C / left wheel B, right wheel C
# 同一個資料夾要有 MBC_UniCam_EV3.py / put MBC_UniCam_EV3.py in the same folder
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor
from pybricks.parameters import Port
from pybricks.robotics import DriveBase
from pybricks.tools import wait
from MBC_UniCam_EV3 import UniCam

ev3 = EV3Brick()
cam = UniCam(Port.S1)                            # 不填 mode:自動讀相機目前的模式 / mode read from the camera
left = Motor(Port.B)
right = Motor(Port.C)
robot = DriveBase(left, right, 56, 114)          # 輪徑 56 mm、輪距 114 mm / wheel 56 mm, axle 114 mm

if cam.mode_number() != 13:                      # EV3 讀得到相機的模式,切錯了就提醒 / EV3 can check the mode
    print('請把相機切到 模式 13(顏色追蹤 ③)/ please set the camera to mode 13')
    ev3.speaker.beep(200, 500)
    wait(3000)
    raise SystemExit

KP = 3            # 👉 可以改:偏 1 像素就多轉幾度/秒 / turn rate per pixel of error
STOP_AREA = 20    # 👉 可以改:面積 ≥ 20 % 就算很近 / area (%) that counts as "close"

while True:
    p = cam.xy(1)                                # 色 1 的 (X, Y) 像素(EV3 是 8×6 格,±10)/ pixels (±10 on EV3)
    if p is None:                                # 讀不到相機 / no camera
        robot.stop()
    elif p[0] == 0:                              # 沒看到:原地慢慢轉著找 / not seen: spin to search
        robot.drive(0, 60)
    else:
        error = p[0] - 80                        # 畫面中間 X = 80;色塊在右 → 正 / right of centre = positive
        speed = 0 if cam.area(1) >= STOP_AREA else 80
        robot.drive(speed, error * KP)           # 面積在同一個模式(模式 1),不用多等 / same EV3 mode, no wait
    wait(20)

一步一步看懂程式

  1. UniCam(Port.S1):不填 mode → cam.mode_number() 讀模式 0 拿到相機的模式編號,不是 13 就提醒並結束。
  2. cam.xy(1)、cam.area(1):都在 EV3 模式 1(信標),讀起來不用換模式。
  3. error = X − 80:色塊在右是正的 → 轉向正=往右轉。

跑起來應該看到什麼:球在左車頭往左轉、在右往右轉;很近就原地對準;球拿走原地轉圈找。

常見問題

  • 一開始就嗶一聲結束? → 相機不在模式 13:在相機選單 MODE 切到「1 顏色追蹤 → ③」,螢幕右上要顯示 1-3。
  • 左右晃? → EV3 位置是 8×6 格(每格 20 像素),KP 改小一點(例如 2)。

範例 2:座標取色判斷顏色

這個範例會做什麼:讀取樣點 S1、S2 的原始色相碼、飽和、明度,判斷顏色並印出來;S1 是紅、綠、橙、黃時 EV3 的燈亮那個顏色;兩點同色時多印一行。

相機要切到:相機模式 2 座標取色 ・子選項 ③ 色相+飽和+明度=模式編號 23(EV3 給 2 點,數字是原始值)。

要準備什麼:EV3 主機、相機插 1 號孔、各色積木。

下載:ex02_spot_color.py+MBC_UniCam_EV3.py

Python 程式碼(Pybricks v4/EV3 MicroPython v2)
#!/usr/bin/env pybricks-micropython
# 神攝手 × EV3 範例 2:座標取色判斷顏色
# SharpShot × EV3 example 2: what colour is at the spot?
# 需要把相機選單切到 相機模式 2 座標取色 ・子選項 ③ 色相+飽和+明度 =模式編號 23(EV3 給 2 點,原始值)
# Camera menu: camera mode 2 Spot colour, option 3 Hue + sat + value = mode number 23 (2 spots, exact values)
# 軟體 Software:Pybricks v4 或 樂高官方 EV3 MicroPython v2
# 準備:取樣點 S1、S2 的位置看相機螢幕上標 1、2 的十字 / spots S1, S2 are the crosses on the camera screen
# 接線 Wiring:相機 → 1 號孔 / camera → port 1
from pybricks.hubs import EV3Brick
from pybricks.parameters import Port, Color
from pybricks.tools import wait
from MBC_UniCam_EV3 import UniCam, color_name

ev3 = EV3Brick()
cam = UniCam(Port.S1, mode=23)                   # 填了 mode 就不用先讀模式 0 / giving mode skips one mode switch

NAME = {'red': '紅', 'orange': '橙', 'yellow': '黃', 'green': '綠', 'cyan': '青',
        'blue': '藍', 'purple': '紫', 'white': '白/灰', 'black': '黑'}
LIGHT = {'red': Color.RED, 'orange': Color.ORANGE, 'yellow': Color.YELLOW, 'green': Color.GREEN}
LOW_SAT = 15      # 👉 可以改:飽和度比這低就當成白/灰 / below this saturation = white / grey

while True:
    names = []
    for point in (1, 2):
        p = cam.hsv(point)                       # (色相碼, 飽和度, 明度) / (hue, sat, val)
        if p is None:
            names.append(None)
            continue
        n = color_name(p[0])
        if p[1] < LOW_SAT and n != 'black':
            n = 'white'
        names.append(n)
        print('S%d 色相碼 hue %d 飽和 sat %d 明度 val %d → %s %s' % (point, p[0], p[1], p[2], NAME[n], n))
    if names[0] in LIGHT:                        # EV3 的燈只有紅、綠、橙、黃 / EV3 light: red, green, orange, yellow
        ev3.light.on(LIGHT[names[0]])
    else:
        ev3.light.off()
    if names[0] is not None and names[0] == names[1]:
        print('兩點一樣顏色 / both spots are the same colour')
    wait(300)

一步一步看懂程式

  1. UniCam(Port.S1, mode=23):填了 mode 就不用先讀模式 0。
  2. cam.hsv(point):EV3 模式 23 用兩格放一個色相碼(百位、餘數),函式庫已經合回 0~255。
  3. color_name():色相碼換成顏色名稱,分界跟 SPIKE 版一樣。

跑起來應該看到什麼:每 0.3 秒印兩行,例如 S1 色相碼 hue 5 飽和 sat 80 明度 val 70 → 紅 red。

常見問題

  • 想看更多點? → 模式 21 給 12 點色相(±2),但點 9~12 在模式 2,要多 0.5 秒。
  • 飽和、明度只有 10 的倍數? → 那是模式 22(EV3 把兩個數字壓在一格);要原始值用模式 23。

範例 3:PD 循線+路口停車

這個範例會做什麼:近處偏移為主、遠處偏移提早轉彎的 PD 循線;十字或 T 字路口停車嗶一聲;三條掃描線都沒看到線時往上一次偏的那邊轉。只用 EV3 模式 1 的值,迴圈裡不換模式。

相機要切到:相機模式 4 循線 ・子選項 ① 黑線=模式編號 41(白線 42、色線 43 也可以,程式會檢查是不是循線模式)。

要準備什麼:EV3 主機、相機插 1 號孔裝在車頭斜斜往前下方看、左輪 B、右輪 C、白底黑線場地。

下載:ex03_line_follow.py+MBC_UniCam_EV3.py

Python 程式碼(Pybricks v4/EV3 MicroPython v2)
#!/usr/bin/env pybricks-micropython
# 神攝手 × EV3 範例 3:PD 循線+路口停車
# SharpShot × EV3 example 3: PD line following + stop at a junction
# 需要把相機選單切到 相機模式 4 循線 ・子選項 ① 黑線 =模式編號 41(白線 42、色線 43 也可以)
# Camera menu: camera mode 4 Line, option 1 Black line = mode number 41 (42 / 43 also work)
# 軟體 Software:Pybricks v4 或 樂高官方 EV3 MicroPython v2
# 準備:相機裝在車頭、斜斜往前下方看線 / camera at the front, looking down and forward
# 接線 Wiring:相機 → 1 號孔;左輪 B、右輪 C / camera → port 1; left wheel B, right wheel C
# 方向:站在車後往前看,線在左=負 / standing behind the robot: line on the left = negative
# EV3 每換一次模式約 0.5 秒:這支只用模式 1 的值(近、遠、旗標、路口)/ only mode-1 values (no mode switch)
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor
from pybricks.parameters import Port
from pybricks.robotics import DriveBase
from pybricks.tools import wait
from MBC_UniCam_EV3 import UniCam

ev3 = EV3Brick()
cam = UniCam(Port.S1)
left = Motor(Port.B)
right = Motor(Port.C)
robot = DriveBase(left, right, 56, 114)

if cam.mode_number() not in (41, 42, 43):        # 相機沒切到循線就提醒 / camera not in line mode
    print('請把相機切到 循線(模式 41/42/43)/ please set the camera to line mode')
    ev3.speaker.beep(200, 500)
    wait(3000)
    raise SystemExit

SPEED = 120       # 👉 可以改:前進速度 mm/s / forward speed
KP = 1.5          # 👉 可以改:比例 / proportional gain
KD = 4.0          # 👉 可以改:微分 / derivative gain
last_error = 0

while True:
    junction = cam.junction()                    # 0 無 1 十字 2 T 3 左 4 右 5 盡頭 / junction type
    if junction is None:                         # 讀不到相機:停車 / no camera: stop
        robot.stop()
        wait(50)
        continue
    if junction in (1, 2):                       # 十字或 T 字路口:停車嗶一聲 / cross or T: stop
        robot.stop()
        ev3.speaker.beep()
        break
    if cam.flags() == 0:                         # 近中遠都沒看到線:往上一次偏的那邊找 / line lost
        robot.drive(0, -120 if last_error < 0 else 120)
        wait(10)
        continue
    error = 0.7 * cam.near() + 0.3 * cam.far()   # 近處為主、遠處提早轉彎 / mostly near, a bit of far
    turn = KP * error + KD * (error - last_error)
    last_error = error
    robot.drive(SPEED, turn)                     # 線在左(負)→ 往左轉 / line on the left → turn left
    wait(10)

一步一步看懂程式

  1. cam.junction():路口類型(0 無 1 十字 2 T 3 左 4 右 5 盡頭);EV3 把它跟有線旗標放在同一格(路口×10+旗標),函式庫已經拆開。
  2. cam.flags():近 1+中 2+遠 4;0=都沒看到線。
  3. error = 0.7 × 近 + 0.3 × 遠,線在左是負的 → 往左轉;KD 讓轉彎比較穩。

跑起來應該看到什麼:車子沿線走,彎道前提早轉;到十字路口停車嗶一聲,程式結束。

常見問題

  • 很慢、一頓一頓? → 迴圈裡用到 edges()、far_width()、marker()、line_all() 會換到模式 2(每次 0.5 秒),循線迴圈不要用。
  • 晃得厲害? → KP 改小、KD 改大,或 SPEED 改慢。

範例 4:跟著正方形走、螢幕顯示角度

這個範例會做什麼:在物體 1、2(面積最大的兩個)裡找「目標 1 的正方形」,轉過去往前開,EV3 螢幕顯示它轉了幾度;面積夠大(很近)就停車嗶一聲;看不到就原地慢慢轉著找。開頭會檢查相機是不是在模式 52。

相機要切到:相機模式 5 物體偵測 ・子選項 ② 物體詳細=模式編號 52;先教「目標 1」的顏色(例如藍色方塊)。

要準備什麼:EV3 主機、相機插 1 號孔、左輪 B、右輪 C、目標色的正方形積木或紙板。

下載:ex04_object.py+MBC_UniCam_EV3.py

Python 程式碼(Pybricks v4/EV3 MicroPython v2)
#!/usr/bin/env pybricks-micropython
# 神攝手 × EV3 範例 4:跟著正方形走、螢幕顯示它轉了幾度
# SharpShot × EV3 example 4: drive to a square and show its angle on the screen
# 需要把相機選單切到 相機模式 5 物體偵測 ・子選項 ② 物體詳細=模式編號 52
# Camera menu: camera mode 5 Object detection, option 2 Object detail = mode number 52
# 軟體 Software:Pybricks v4(code.pybricks.com)或 樂高官方 EV3 MicroPython v2(同一支程式都能跑)
# 準備:在相機上教「目標 1」的顏色(例如藍色方塊)/ teach "target 1" on the camera (e.g. a blue block)
# 接線 Wiring:相機 → 1 號孔 / camera → port 1;左輪 B、右輪 C / left wheel B, right wheel C
# 同一個資料夾要有 MBC_UniCam_EV3.py / put MBC_UniCam_EV3.py in the same folder
#
# 物體代碼=色號×10+形狀:目標 1 的正方形=1×10+4=14。EV3 模式 52 給 2 個物體(面積大的是物體 1),
# 代碼、位置、面積、角度都在 EV3 模式 1,不用換模式(不會多等 0.5 秒)。
# Object code = colour × 10 + shape: target 1 square = 14. EV3 mode 52 gives 2 objects (object 1 = largest);
# code, position, area and angle are all in EV3 mode 1, so there is no 0.5 s mode switch.
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor
from pybricks.parameters import Port
from pybricks.robotics import DriveBase
from pybricks.tools import wait
from MBC_UniCam_EV3 import UniCam, shape_name

ev3 = EV3Brick()
cam = UniCam(Port.S1)                            # 不填 mode:自動讀相機目前的模式 / mode read from the camera
left = Motor(Port.B)
right = Motor(Port.C)
robot = DriveBase(left, right, 56, 114)          # 輪徑 56 mm、輪距 114 mm / wheel 56 mm, axle 114 mm

if cam.mode_number() != 52:                      # EV3 讀得到相機的模式,切錯了就提醒 / EV3 can check the mode
    print('請把相機切到 模式 52(物體偵測 ② 物體詳細)/ please set the camera to mode 52')
    ev3.speaker.beep(200, 500)
    wait(3000)
    raise SystemExit

WANT = 1 * 10 + 4   # 👉 可以改:目標 1 × 10 + 形狀 4(正方);三角改成 13、圓改成 11 / triangle 13, circle 11
KP = 3              # 👉 可以改:偏 1 像素就多轉幾度/秒 / turn rate per pixel of error
STOP_AREA = 25      # 👉 可以改:面積 ≥ 25 % 就算到了 / area (%) that counts as "arrived"

print('要找 looking for: 目標 target', WANT // 10, shape_name(WANT % 10, True), shape_name(WANT % 10))
while True:
    c1 = cam.object(1)                           # 物體 1(最大)的代碼 / code of object 1 (largest)
    if c1 is None:                               # 讀不到相機 / no camera
        robot.stop()
        wait(100)
        continue
    if c1 == WANT:                               # 物體 1、2 裡哪一個是要找的(0=都不是)/ which one we want
        i = 1
    elif cam.object(2) == WANT:
        i = 2
    else:
        i = 0
    if i == 0:                                 # 沒看到:原地慢慢轉著找 / not seen: spin to search
        robot.drive(0, 60)
        wait(20)
        continue
    x, y = cam.object_xy(i)                      # 像素(EV3 是 8×6 格中心,±10)/ pixels (±10 on EV3)
    angle = cam.object_angle(i)                  # 0~179 度(EV3 精度 ±1)/ degrees (±1 on EV3)
    ev3.screen.clear()
    ev3.screen.print(shape_name(WANT % 10), angle)
    if cam.object_area(i) >= STOP_AREA:          # 到了:停車、嗶一聲 / arrived: stop and beep
        robot.stop()
        ev3.speaker.beep()
        break
    robot.drive(80, (x - 80) * KP)               # 畫面中間 X = 80;在右 → 正 → 右轉 / right of centre = positive
    wait(20)

一步一步看懂程式

  1. WANT = 1 × 10 + 4:物體代碼=色號×10+形狀,目標 1 的正方形=14(三角 13、圓 11)。
  2. cam.object(1)、cam.object(2):EV3 模式 52 給面積最大的 2 個物體;代碼、位置、面積、角度都在 EV3 模式 1,迴圈裡不用換模式。
  3. cam.object_angle(i):EV3 一格只到 100,相機送「(角度+1)÷2」,函式庫 ×2 還原成 0~179,誤差 ±1 度。
  4. cam.object_area(i) ≥ STOP_AREA:面積夠大=很近,停車。

跑起來應該看到什麼:方塊在左車頭往左轉、在右往右轉;螢幕顯示 square 30 這樣的形狀和角度(把方塊轉一轉數字會變);開到很近停車嗶一聲。

常見問題

  • 一開始就嗶一聲結束? → 相機不在模式 52:MODE 切到「5 物體偵測 → ②」,螢幕右上要顯示 5-2。
  • 找不到正方形? → 看相機畫面每個物體旁邊的「色號 形狀」;判成長方(5)或其他(0)就到 Target 1 shape 指定 Square,或調 SET 選單的 ShapeTol。
  • 要 5 個物體、物體數? → 用模式 51(object_count()、物體 5 在 EV3 模式 2,會多 0.5 秒)。

要注意的事

  • 上機驗證範圍(2026-11-03):原廠 EV3 韌體上 13 個相機模式逐格讀過、負數原樣送出、插拔 5 次都 3 秒多認成紅外線;EV3-G 的紅外線「近距/信標/遙控」積木讀得到,信標方向不會被限制在 ±25(例 54、−36 原樣給);Pybricks v4 範例 1~4 實機通過。ev3dev/EV3 MicroPython v2 只核對模式表、不上機:相機的模式表(名稱、值數、格式、範圍、單位)跟實機抓的樂高紅外線感應器逐項相同,驅動就照紅外線感應器處理。
  • KP/KD、面積門檻是建議值,先印出數字再調。

下一步

LINE 詢價選購指南