測距者 8 路 (TOF8) × EV3 × Pybricks
這一頁只講 Pybricks v4/EV3 MicroPython v2:在 MINDSTORMS EV3 上用它讀測距者 8 路 (TOF8)的安裝步驟、每個值怎麼讀、能用的命令與範例。要換產品、主機或軟體,用上方的切換列。
安裝與設定
你需要
- 感應器:測距者 8 路 (TOF8)(EV3 版,RJ12 接頭)。
- 主機:LEGO MINDSTORMS EV3。
- 軟體(二選一):
- Pybricks v4:用 Chrome 打開 code.pybricks.com,EV3 要先裝 Pybricks 韌體(正式版已內建 EV3 韌體,2026-10 是 v4.1.1)。
- EV3 MicroPython v2.0:樂高官方「EV3 MicroPython」microSD 開機卡+VS Code 的「LEGO MINDSTORMS EV3 MicroPython」擴充套件。已經在用的人選這個。
安裝軟體
Pybricks v4
- 用 Chrome 打開 code.pybricks.com。
- 照網站說明把 EV3 換成 Pybricks 韌體。code.pybricks.com 正式版已內建 EV3 韌體(2026-10 是 v4.1.1)。本站範例最早在 v4.0.0b10 上機測過,v4.1.1 寫法相同。
- 打開範例:把
.py檔拖進編輯區,按執行。
EV3 MicroPython v2.0
- 用樂高官方 EV3 MicroPython 的 microSD 開機卡開機。
- 在 VS Code 裝好「LEGO MINDSTORMS EV3 MicroPython」擴充套件。
- 打開範例:把程式內容貼到
main.py,按 F5 下載執行。
讓軟體認得感應器
新手範例不用裝函式庫,直接讀感應器的資料:
- Pybricks v4 用
LUMPDevice(Port.S1),sensor.read(模式)拿到該模式的數值。 - EV3 MicroPython v2.0 一律用
Ev3devSensor讀。EV3 顯示成紅外線感應器的產品不要用InfraredSensor:換模式固定等約 1.1 秒,buttons()/beacon()/keypad()會丟錯或改掉數值。 - 可以直接讀 EV3-G、Classroom 讀不到的模式,所以標「僅 Pybricks/EV3 MicroPython/clev3r」的範例也能跑。
重要
不要在主迴圈裡頻繁切換模式。 EV3 硬體每次切換感應器模式都會有通訊等待延遲。依任務選定一種模式,整趟都用它。
接線
- 用連接線把感應器插在 EV3 的 1 號孔(1~4 任一孔都可以;程式裡
Port.S1~Port.S4選同一個孔)。 - EV3 先開機,再插感應器。
- 接頭卡榫朝上,輕輕推進去。
開機要等 2~4 秒
測距者 8 路不用校準,插上去就能用;開機後要等 2~4 秒讓 8 顆雷射準備好,這段時間全部讀到 120(公分)。程式開頭先等幾秒再讀距離。
| 第幾路 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| 朝哪裡 | 正左邊 | 左前 60° | 左前 30° | 正前方 | 正前方 | 右前 30° | 右前 60° | 正右邊 |
上表是感應器正面朝前、元件面朝上的裝法。手放在機器人左邊,範例 1 應該顯示負的方向;顯示正的代表裝反了,範例裡的「左轉」「右轉」也要對調。
第一次測試
- 打開本頁範例 1,按執行(MicroPython 版按 F5)。
- EV3 螢幕上的數字跟著感應器前方的東西變化,就是接好了。
常見問題
- 找不到 EV3 的 Pybricks 韌體? 確認用的是 code.pybricks.com 正式版(2026-10 起內建 EV3 v4.1.1);舊的 ev3dev 版 Pybricks(microSD 卡)是另一套,本頁不適用。
- 數字一直不變? 拔掉感應器重插一次(EV3 要先開機再插)。
- 程式反應忽快忽慢? 主迴圈裡交叉讀了不同模式,每次切換都要等,改成只用一種模式。
- 匯入函式庫時出錯? 函式庫檔要匯入到同一個 Pybricks 專案,檔名必須跟
import的名字完全一致。
讀值
程式假設感應器插 1 號孔,用 LUMPDevice 讀原始模式;EV3 MicroPython v2 寫法相同。
最近距離 cm nearCm
| 範圍 | 意思 |
|---|---|
0~120 cm(EV3 模式 2 讀到的是換算值:cm×100/120(0~100)) |
8 顆裡最小的距離 0~120 cm(失效那顆以 120 參與),120 = 四周沒東西 |
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
sensor = LUMPDevice(Port.S1) # 感應器插 1 號孔
nearCm = sensor.read(2)[1] # 最近距離 cm:cm×100/120(0~100)模式 2 · int8 · IR-REMOTE [最近方向−8, 最近', 最空曠方向−8, 最空曠'](INO:154-159)(已鎖住的模式,韌體與主機端都不再改)
最近方向 nearDir
| 範圍 | 意思 |
|---|---|
-8~+8 |
最近目標在哪個方向:−7(正左)~ +7(正右),0 = 正前方,負 = 左;±8 = 四周沒東西(沿用上次偏向側) |
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
sensor = LUMPDevice(Port.S1) # 感應器插 1 號孔
nearDir = sensor.read(2)[0] # 最近方向:-8~+8
nearDir = sensor.read(5)[1] # 最近方向:-8~+8模式 2 · int8 · int8 二補數(方位−8);模式 5 · int16 · #67 新:IR-CAL 2×int16 = [最近 mm, 最近方向 −8~+8](原本 = 前 4 顆兩兩合併)(已鎖住的模式,韌體與主機端都不再改)
最空曠距離 cm farCm
| 範圍 | 意思 |
|---|---|
0~120 cm(EV3 模式 2 讀到的是換算值:cm×100/120(0~100)) |
8 顆裡最大的距離 0~120 cm(壞掉那顆永遠 120,會被當成最空曠) |
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
sensor = LUMPDevice(Port.S1) # 感應器插 1 號孔
farCm = sensor.read(2)[3] # 最空曠距離 cm:cm×100/120(0~100)模式 2 · int8(已鎖住的模式,韌體與主機端都不再改)
最空曠方向 farDir
| 範圍 | 意思 |
|---|---|
-7~+7 |
最遠(最空曠)在哪個方向:−7 ~ +7,0 = 正前方,負 = 左;8 顆全 120 時 = 0 |
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
sensor = LUMPDevice(Port.S1) # 感應器插 1 號孔
farDir = sensor.read(2)[2] # 最空曠方向:-7~+7模式 2 · int8 · int8 二補數(方位−8)(已鎖住的模式,韌體與主機端都不再改)
正前方 cm frontCm
| 範圍 | 意思 |
|---|---|
0~120 cm(EV3 模式 0 讀到的是換算值:cm×100/120(0~100)) |
第 4、5 顆(兩顆平行朝前)平均 0~120 cm;EV3 模式 3、SPIKE 模式 6 給的是同一個值的 mm;0x22 的 C 是 min(第 4, 第 5 顆) 不是平均(見 10) |
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
sensor = LUMPDevice(Port.S1) # 感應器插 1 號孔
frontCm = sensor.read(0)[0] # 正前方 cm:cm×100/120(0~100)模式 0 · int8 · IR-PROX = (第 4'+第 5')>>1(鎖住,INO:148-150)(已鎖住的模式,韌體與主機端都不再改)
最近距離 mm nearMm
| 範圍 | 意思 |
|---|---|
0~1200 mm |
8 顆 mm 的最小值 0~1200(失效那顆以 1200 參與),1200 = 四周沒東西 |
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
sensor = LUMPDevice(Port.S1) # 感應器插 1 號孔
nearMm = sensor.read(5)[0] # 最近距離 mm:0~1200 mm模式 5 · int16 · #67 新:[最近 mm, 最近方向]
正前方距離 mm frontMm
| 範圍 | 意思 |
|---|---|
0~1200 mm(EV3 模式 3 讀到的是換算值:mm(0~1200)) |
第 4、5 顆(正前方兩顆)平均,0~1200 mm;1200 = 前面沒東西。cm 版是 05 |
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
sensor = LUMPDevice(Port.S1) # 感應器插 1 號孔
frontMm = sensor.read(3)[0] # 正前方距離 mm:mm(0~1200)模式 3 · int16 · #67 新:IR-REM-A 1×int16 = 正前方(第 4、5 顆平均)mm(原本 = 第 1 顆 0~100)
第 1~8 顆距離 cm distCm
| 範圍 | 意思 |
|---|---|
0~120 cm(EV3 模式 1、模式 4 讀到的是換算值:cm×100/120(0~100)) |
第 1 |
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
sensor = LUMPDevice(Port.S1) # 感應器插 1 號孔
distCm = sensor.read(1)[0:8] # 第 1~8 顆距離 cm
distCm = sensor.read(4)[0:4] # 第 1~8 顆距離 cm模式 1 · int8 · IR-SEEK 8×int8 = 第 1~8 顆(EV3 視為頻道 1~4 的〈方位,距離〉);模式 4 · int8 · IR-S-ALT = 前 4 顆(已鎖住的模式,韌體與主機端都不再改)
這個軟體讀不到:初始化位元圖、故障位元圖、第 1~8 顆距離 mm。要用這些值請改用 Arduino/mBlock/micro:bit。
範例
範例 1:量量看正前方有多遠
這個範例會做什麼: 八方位雷射的模式 0 會給你正前方(中間兩顆)的平均距離,最簡單好用。
要準備什麼:
- TOF8 八方位雷射(EV3 版)
- EV3 主機
怎麼接: TOF8 八方位雷射插 1 號孔。
下載程式(選你用的軟體):
⬇ Pybricks v4 | ⬇ EV3 MicroPython v2.0
Pybricks v4 程式碼
# ============================================================
# TOF8 八方位雷射測距感應器 EV3 新手範例 01:量量看正前方有多遠
# 軟體:Pybricks v4(用 Chrome 打開 https://code.pybricks.com ,EV3 版目前是 Beta)
# 接法:TOF8 八方位雷射插 1 號孔
# 這個範例會做什麼:八方位雷射的模式 0 會給你正前方(中間兩顆)的平均距離,最簡單好用。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port, Color
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = LUMPDevice(Port.S1) # TOF8 八方位雷射插 1 號孔
def read_front():
# 正前方(第 4、5 顆平均)距離:0 ~ 100(1 格=1.2 公分,100=前面沒東西)
return sensor.read(0)[0]
# ---------- 程式從這裡開始 ----------
# 清除螢幕
ev3.screen.clear()
# 一直重複
while True:
# 第 1 行顯示正前方距離(0~100)
ev3.screen.draw_text(0, 0, "FRONT " + str(read_front()) + " ", Color.BLACK, Color.WHITE)
# 第 2 行換算成公分:× 1.2
ev3.screen.draw_text(0, 16, "CM " + str(read_front() * 1.2) + " ", Color.BLACK, Color.WHITE)
# 等 0.1 秒
wait(100)EV3 MicroPython v2.0 程式碼
#!/usr/bin/env pybricks-micropython
# ============================================================
# TOF8 八方位雷射測距感應器 EV3 新手範例 01:量量看正前方有多遠
# 軟體:樂高官方 EV3 MicroPython v2.0(microSD 開機卡+VS Code「LEGO MINDSTORMS EV3 MicroPython」擴充套件)
# 接法:TOF8 八方位雷射插 1 號孔
# 這個範例會做什麼:八方位雷射的模式 0 會給你正前方(中間兩顆)的平均距離,最簡單好用。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.iodevices import Ev3devSensor
from pybricks.parameters import Port, Color
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = Ev3devSensor(Port.S1) # TOF8 八方位雷射插 1 號孔
def read_front():
# 正前方(第 4、5 顆平均)距離:0 ~ 100(1 格=1.2 公分,100=前面沒東西)
return sensor.read('IR-PROX')[0]
# ---------- 程式從這裡開始 ----------
# 清除螢幕
ev3.screen.clear()
# 一直重複
while True:
# 第 1 行顯示正前方距離(0~100)
ev3.screen.draw_text(0, 0, "FRONT " + str(read_front()) + " ", Color.BLACK, Color.WHITE)
# 第 2 行換算成公分:× 1.2
ev3.screen.draw_text(0, 16, "CM " + str(read_front() * 1.2) + " ", Color.BLACK, Color.WHITE)
# 等 0.1 秒
wait(100)一步一步看懂程式:
- 清除螢幕
- 一直重複
- 第 1 行顯示正前方距離(0~100)
- 第 2 行換算成公分:× 1.2
- 等 0.1 秒
跑起來應該看到: 手在正前方移動,數字跟著變;前面沒東西時是 100。
常見問題:
- 數字跟尺量的不一樣? EV3 上 1 格=1.2 公分(例如讀到 25=30 公分),100 代表前面 120 公分內沒有東西。
- 數字一直是 0 或不變? EV3 主機先開機再接感應器,或拔掉重插一次;確認雷射前面沒有貼保護膜。
範例 2:前方 30 公分停車
這個範例會做什麼: 車子往前開,正前方 30 公分(數字 25)以內有東西就停下來。
要準備什麼:
- EV3 主機+教育版基本車(左輪接 B、右輪接 C)
- TOF8 八方位雷射(EV3 版)
- 幾個盒子當障礙物
怎麼接: TOF8 八方位雷射插 1 號孔,裝在車頭、第 4、5 顆雷射朝正前方,離地約 5 公分。
下載程式(選你用的軟體):
⬇ Pybricks v4 | ⬇ EV3 MicroPython v2.0
Pybricks v4 程式碼
# ============================================================
# TOF8 八方位雷射測距感應器 EV3 新手範例 02:前方 30 公分停車
# 軟體:Pybricks v4(用 Chrome 打開 https://code.pybricks.com ,EV3 版目前是 Beta)
# 接法:TOF8 八方位雷射插 1 號孔;左輪馬達接 B、右輪馬達接 C
# 這個範例會做什麼:車子往前開,正前方 30 公分(數字 25)以內有東西就停下來。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = LUMPDevice(Port.S1) # TOF8 八方位雷射插 1 號孔
left_motor = Motor(Port.B) # 左輪
right_motor = Motor(Port.C) # 右輪
def read_front():
# 正前方(第 4、5 顆平均)距離:0 ~ 100(1 格=1.2 公分,100=前面沒東西)
return sensor.read(0)[0]
# ---------- 程式從這裡開始 ----------
# 兩輪往前開
left_motor.dc(30)
right_motor.dc(30)
# 等到正前方距離小於 25
while not (read_front() < 25):
wait(10)
# 停車
left_motor.brake()
right_motor.brake()
# 嗶一聲
ev3.speaker.beep()EV3 MicroPython v2.0 程式碼
#!/usr/bin/env pybricks-micropython
# ============================================================
# TOF8 八方位雷射測距感應器 EV3 新手範例 02:前方 30 公分停車
# 軟體:樂高官方 EV3 MicroPython v2.0(microSD 開機卡+VS Code「LEGO MINDSTORMS EV3 MicroPython」擴充套件)
# 接法:TOF8 八方位雷射插 1 號孔;左輪馬達接 B、右輪馬達接 C
# 這個範例會做什麼:車子往前開,正前方 30 公分(數字 25)以內有東西就停下來。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor
from pybricks.iodevices import Ev3devSensor
from pybricks.parameters import Port
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = Ev3devSensor(Port.S1) # TOF8 八方位雷射插 1 號孔
left_motor = Motor(Port.B) # 左輪
right_motor = Motor(Port.C) # 右輪
def read_front():
# 正前方(第 4、5 顆平均)距離:0 ~ 100(1 格=1.2 公分,100=前面沒東西)
return sensor.read('IR-PROX')[0]
# ---------- 程式從這裡開始 ----------
# 兩輪往前開
left_motor.dc(30)
right_motor.dc(30)
# 等到正前方距離小於 25
while not (read_front() < 25):
wait(10)
# 停車
left_motor.brake()
right_motor.brake()
# 嗶一聲
ev3.speaker.beep()一步一步看懂程式:
- 兩輪往前開
- 等到正前方距離小於 25
- 停車
- 嗶一聲
跑起來應該看到: 車子在障礙物前約 30 公分停下來並嗶一聲。
常見問題:
- 數字跟尺量的不一樣? EV3 上 1 格=1.2 公分(例如讀到 25=30 公分),100 代表前面 120 公分內沒有東西。
範例 3:一次看 8 個方向的距離
這個範例會做什麼: 模式 1 會一次送出 8 顆雷射各自的距離。這個範例把 8 個數字都顯示在螢幕上,拿手在四周晃一晃,就知道每顆雷射對應哪個方向。
要準備什麼:
- TOF8 八方位雷射(EV3 版)
- EV3 主機
怎麼接: TOF8 八方位雷射插 1 號孔。
下載程式(選你用的軟體):
⬇ Pybricks v4 | ⬇ EV3 MicroPython v2.0
Pybricks v4 程式碼
# ============================================================
# TOF8 八方位雷射測距感應器 EV3 新手範例 03:一次看 8 個方向的距離
# 軟體:Pybricks v4(用 Chrome 打開 https://code.pybricks.com ,EV3 版目前是 Beta)
# 接法:TOF8 八方位雷射插 1 號孔
# 這個範例會做什麼:模式 1 會一次送出 8 顆雷射各自的距離。這個範例把 8 個數字都顯示在螢幕上,拿手在四周晃一晃,就知道每顆雷射對應哪個方向。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port, Color
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = LUMPDevice(Port.S1) # TOF8 八方位雷射插 1 號孔
def read_d1():
# 第 1 顆雷射的距離:0 ~ 100(1 格=1.2 公分)
return sensor.read(1)[0]
def read_d2():
# 第 2 顆雷射的距離:0 ~ 100(1 格=1.2 公分)
return sensor.read(1)[1]
def read_d3():
# 第 3 顆雷射的距離:0 ~ 100(1 格=1.2 公分)
return sensor.read(1)[2]
def read_d4():
# 第 4 顆雷射的距離:0 ~ 100(1 格=1.2 公分)
return sensor.read(1)[3]
def read_d5():
# 第 5 顆雷射的距離:0 ~ 100(1 格=1.2 公分)
return sensor.read(1)[4]
def read_d6():
# 第 6 顆雷射的距離:0 ~ 100(1 格=1.2 公分)
return sensor.read(1)[5]
def read_d7():
# 第 7 顆雷射的距離:0 ~ 100(1 格=1.2 公分)
return sensor.read(1)[6]
def read_d8():
# 第 8 顆雷射的距離:0 ~ 100(1 格=1.2 公分)
return sensor.read(1)[7]
# ---------- 程式從這裡開始 ----------
# 清除螢幕
ev3.screen.clear()
# 一直重複
while True:
# 第 1 行顯示第 1 顆雷射的距離
ev3.screen.draw_text(0, 0, "D1 " + str(read_d1()) + " ", Color.BLACK, Color.WHITE)
# 第 2 行顯示第 2 顆雷射的距離
ev3.screen.draw_text(0, 16, "D2 " + str(read_d2()) + " ", Color.BLACK, Color.WHITE)
# 第 3 行顯示第 3 顆雷射的距離
ev3.screen.draw_text(0, 32, "D3 " + str(read_d3()) + " ", Color.BLACK, Color.WHITE)
# 第 4 行顯示第 4 顆雷射的距離
ev3.screen.draw_text(0, 48, "D4 " + str(read_d4()) + " ", Color.BLACK, Color.WHITE)
# 第 5 行顯示第 5 顆雷射的距離
ev3.screen.draw_text(0, 64, "D5 " + str(read_d5()) + " ", Color.BLACK, Color.WHITE)
# 第 6 行顯示第 6 顆雷射的距離
ev3.screen.draw_text(0, 80, "D6 " + str(read_d6()) + " ", Color.BLACK, Color.WHITE)
# 第 7 行顯示第 7 顆雷射的距離
ev3.screen.draw_text(0, 96, "D7 " + str(read_d7()) + " ", Color.BLACK, Color.WHITE)
# 第 8 行顯示第 8 顆雷射的距離
ev3.screen.draw_text(0, 112, "D8 " + str(read_d8()) + " ", Color.BLACK, Color.WHITE)
# 等 0.1 秒
wait(100)EV3 MicroPython v2.0 程式碼
#!/usr/bin/env pybricks-micropython
# ============================================================
# TOF8 八方位雷射測距感應器 EV3 新手範例 03:一次看 8 個方向的距離
# 軟體:樂高官方 EV3 MicroPython v2.0(microSD 開機卡+VS Code「LEGO MINDSTORMS EV3 MicroPython」擴充套件)
# 接法:TOF8 八方位雷射插 1 號孔
# 這個範例會做什麼:模式 1 會一次送出 8 顆雷射各自的距離。這個範例把 8 個數字都顯示在螢幕上,拿手在四周晃一晃,就知道每顆雷射對應哪個方向。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.iodevices import Ev3devSensor
from pybricks.parameters import Port, Color
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = Ev3devSensor(Port.S1) # TOF8 八方位雷射插 1 號孔
def read_d1():
# 第 1 顆雷射的距離:0 ~ 100(1 格=1.2 公分)
return sensor.read('IR-SEEK')[0]
def read_d2():
# 第 2 顆雷射的距離:0 ~ 100(1 格=1.2 公分)
return sensor.read('IR-SEEK')[1]
def read_d3():
# 第 3 顆雷射的距離:0 ~ 100(1 格=1.2 公分)
return sensor.read('IR-SEEK')[2]
def read_d4():
# 第 4 顆雷射的距離:0 ~ 100(1 格=1.2 公分)
return sensor.read('IR-SEEK')[3]
def read_d5():
# 第 5 顆雷射的距離:0 ~ 100(1 格=1.2 公分)
return sensor.read('IR-SEEK')[4]
def read_d6():
# 第 6 顆雷射的距離:0 ~ 100(1 格=1.2 公分)
return sensor.read('IR-SEEK')[5]
def read_d7():
# 第 7 顆雷射的距離:0 ~ 100(1 格=1.2 公分)
return sensor.read('IR-SEEK')[6]
def read_d8():
# 第 8 顆雷射的距離:0 ~ 100(1 格=1.2 公分)
return sensor.read('IR-SEEK')[7]
# ---------- 程式從這裡開始 ----------
# 清除螢幕
ev3.screen.clear()
# 一直重複
while True:
# 第 1 行顯示第 1 顆雷射的距離
ev3.screen.draw_text(0, 0, "D1 " + str(read_d1()) + " ", Color.BLACK, Color.WHITE)
# 第 2 行顯示第 2 顆雷射的距離
ev3.screen.draw_text(0, 16, "D2 " + str(read_d2()) + " ", Color.BLACK, Color.WHITE)
# 第 3 行顯示第 3 顆雷射的距離
ev3.screen.draw_text(0, 32, "D3 " + str(read_d3()) + " ", Color.BLACK, Color.WHITE)
# 第 4 行顯示第 4 顆雷射的距離
ev3.screen.draw_text(0, 48, "D4 " + str(read_d4()) + " ", Color.BLACK, Color.WHITE)
# 第 5 行顯示第 5 顆雷射的距離
ev3.screen.draw_text(0, 64, "D5 " + str(read_d5()) + " ", Color.BLACK, Color.WHITE)
# 第 6 行顯示第 6 顆雷射的距離
ev3.screen.draw_text(0, 80, "D6 " + str(read_d6()) + " ", Color.BLACK, Color.WHITE)
# 第 7 行顯示第 7 顆雷射的距離
ev3.screen.draw_text(0, 96, "D7 " + str(read_d7()) + " ", Color.BLACK, Color.WHITE)
# 第 8 行顯示第 8 顆雷射的距離
ev3.screen.draw_text(0, 112, "D8 " + str(read_d8()) + " ", Color.BLACK, Color.WHITE)
# 等 0.1 秒
wait(100)一步一步看懂程式:
- 清除螢幕
- 一直重複
- 第 1 行顯示第 1 顆雷射的距離
- 第 2 行顯示第 2 顆雷射的距離
- 第 3 行顯示第 3 顆雷射的距離
- 第 4 行顯示第 4 顆雷射的距離
- 第 5 行顯示第 5 顆雷射的距離
- 第 6 行顯示第 6 顆雷射的距離
- 第 7 行顯示第 7 顆雷射的距離
- 第 8 行顯示第 8 顆雷射的距離
- 等 0.1 秒
跑起來應該看到: 8 行數字分別對應 8 顆雷射,手靠近哪一顆,那一行數字就變小。
常見問題:
- 數字跟尺量的不一樣? EV3 上 1 格=1.2 公分(例如讀到 25=30 公分),100 代表前面 120 公分內沒有東西。
- 第 1 顆在左邊還是右邊? 請用手實際試一次並記下來,之後寫程式會用到。
範例 4:相撲追擊:轉向最近的東西衝過去
這個範例會做什麼: 模式 2 會直接告訴你「最近的東西在哪個方向、有多遠」,不用自己比 8 個數字。車子轉向最近的東西衝過去,看不到東西時原地轉圈找。
要準備什麼:
- EV3 主機+教育版基本車(左輪接 B、右輪接 C)
- TOF8 八方位雷射(EV3 版)
- 一個罐子當對手
怎麼接: TOF8 八方位雷射插 1 號孔,裝在車頭、第 4、5 顆雷射朝正前方,離地約 5 公分。
下載程式(選你用的軟體):
⬇ Pybricks v4 | ⬇ EV3 MicroPython v2.0
Pybricks v4 程式碼
# ============================================================
# TOF8 八方位雷射測距感應器 EV3 新手範例 04:相撲追擊:轉向最近的東西衝過去
# 軟體:Pybricks v4(用 Chrome 打開 https://code.pybricks.com ,EV3 版目前是 Beta)
# 接法:TOF8 八方位雷射插 1 號孔;左輪馬達接 B、右輪馬達接 C
# 這個範例會做什麼:模式 2 會直接告訴你「最近的東西在哪個方向、有多遠」,不用自己比 8 個數字。車子轉向最近的東西衝過去,看不到東西時原地轉圈找。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = LUMPDevice(Port.S1) # TOF8 八方位雷射插 1 號孔
left_motor = Motor(Port.B) # 左輪
right_motor = Motor(Port.C) # 右輪
def read_nearDist():
# 最近的東西有多遠:0 ~ 100
return sensor.read(2)[1]
def read_nearDir():
# 最近的東西在哪個方向:-7 ~ +7(負=左、正=右、0 附近=正前方;±8=沒有東西)
return sensor.read(2)[0]
# ---------- 程式從這裡開始 ----------
# 一直重複
while True:
# 如果最近的東西在 60 以內(約 72 公分)
if read_nearDist() < 60:
# 如果方向小於 -1(偏左)
if read_nearDir() < (-1):
# 東西在左邊:原地往左轉
left_motor.dc(-20)
right_motor.dc(20)
# 否則,如果方向大於 1(偏右)
elif read_nearDir() > 1:
# 東西在右邊:原地往右轉
left_motor.dc(20)
right_motor.dc(-20)
else:
# 東西在正前方:全力衝過去
left_motor.dc(60)
right_motor.dc(60)
else:
# 附近沒東西:原地轉圈找對手
left_motor.dc(25)
right_motor.dc(-25)EV3 MicroPython v2.0 程式碼
#!/usr/bin/env pybricks-micropython
# ============================================================
# TOF8 八方位雷射測距感應器 EV3 新手範例 04:相撲追擊:轉向最近的東西衝過去
# 軟體:樂高官方 EV3 MicroPython v2.0(microSD 開機卡+VS Code「LEGO MINDSTORMS EV3 MicroPython」擴充套件)
# 接法:TOF8 八方位雷射插 1 號孔;左輪馬達接 B、右輪馬達接 C
# 這個範例會做什麼:模式 2 會直接告訴你「最近的東西在哪個方向、有多遠」,不用自己比 8 個數字。車子轉向最近的東西衝過去,看不到東西時原地轉圈找。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor
from pybricks.iodevices import Ev3devSensor
from pybricks.parameters import Port
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = Ev3devSensor(Port.S1) # TOF8 八方位雷射插 1 號孔
left_motor = Motor(Port.B) # 左輪
right_motor = Motor(Port.C) # 右輪
def read_nearDist():
# 最近的東西有多遠:0 ~ 100
return sensor.read('IR-REMOTE')[1]
def read_nearDir():
# 最近的東西在哪個方向:-7 ~ +7(負=左、正=右、0 附近=正前方;±8=沒有東西)
return sensor.read('IR-REMOTE')[0]
# ---------- 程式從這裡開始 ----------
# 一直重複
while True:
# 如果最近的東西在 60 以內(約 72 公分)
if read_nearDist() < 60:
# 如果方向小於 -1(偏左)
if read_nearDir() < (-1):
# 東西在左邊:原地往左轉
left_motor.dc(-20)
right_motor.dc(20)
# 否則,如果方向大於 1(偏右)
elif read_nearDir() > 1:
# 東西在右邊:原地往右轉
left_motor.dc(20)
right_motor.dc(-20)
else:
# 東西在正前方:全力衝過去
left_motor.dc(60)
right_motor.dc(60)
else:
# 附近沒東西:原地轉圈找對手
left_motor.dc(25)
right_motor.dc(-25)一步一步看懂程式:
- 一直重複
- 如果最近的東西在 60 以內(約 72 公分)
- 如果方向小於 -1(偏左)
- 東西在左邊:原地往左轉
- 否則:
- 否則,如果方向大於 1(偏右)
- 東西在右邊:原地往右轉
- 否則:
- 東西在正前方:全力衝過去
- 否則,如果方向大於 1(偏右)
- 否則:
- 附近沒東西:原地轉圈找對手
- 如果方向小於 -1(偏左)
- 如果最近的東西在 60 以內(約 72 公分)
跑起來應該看到: 把罐子放在車子周圍,車子會轉向罐子並衝過去推它。
常見問題:
- 方向數字是 8 或 -8? ±8 代表那個方向 120 公分內沒有東西,不是「最左」「最右」。
- 轉過頭來回擺? 把轉向的 20 改小,或把 -1 和 1 改成 -2 和 2。
範例 5:往最空曠的方向走
這個範例會做什麼: 模式 2 也會告訴你「最空曠的方向」。車子用比例控制一直往最空的地方開,在箱子陣裡會自己找出口。
要準備什麼:
- EV3 主機+教育版基本車(左輪接 B、右輪接 C)
- TOF8 八方位雷射(EV3 版)
- 幾個盒子當障礙物
怎麼接: TOF8 八方位雷射插 1 號孔,裝在車頭、第 4、5 顆雷射朝正前方,離地約 5 公分。
下載程式(選你用的軟體):
⬇ Pybricks v4 | ⬇ EV3 MicroPython v2.0
Pybricks v4 程式碼
# ============================================================
# TOF8 八方位雷射測距感應器 EV3 新手範例 05:往最空曠的方向走
# 軟體:Pybricks v4(用 Chrome 打開 https://code.pybricks.com ,EV3 版目前是 Beta)
# 接法:TOF8 八方位雷射插 1 號孔;左輪馬達接 B、右輪馬達接 C
# 這個範例會做什麼:模式 2 也會告訴你「最空曠的方向」。車子用比例控制一直往最空的地方開,在箱子陣裡會自己找出口。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = LUMPDevice(Port.S1) # TOF8 八方位雷射插 1 號孔
left_motor = Motor(Port.B) # 左輪
right_motor = Motor(Port.C) # 右輪
def read_farDir():
# 最空曠的方向:-7 ~ +7(負=左、正=右)
return sensor.read(2)[2]
# ---------- 程式從這裡開始 ----------
# 一直重複
while True:
# 轉彎力量 turn = 最空方向 × 5(負數往左、正數往右)
turn = read_farDir() * 5
# 左輪=25+turn、右輪=25-turn
left_motor.dc(25 + turn)
right_motor.dc(25 - turn)EV3 MicroPython v2.0 程式碼
#!/usr/bin/env pybricks-micropython
# ============================================================
# TOF8 八方位雷射測距感應器 EV3 新手範例 05:往最空曠的方向走
# 軟體:樂高官方 EV3 MicroPython v2.0(microSD 開機卡+VS Code「LEGO MINDSTORMS EV3 MicroPython」擴充套件)
# 接法:TOF8 八方位雷射插 1 號孔;左輪馬達接 B、右輪馬達接 C
# 這個範例會做什麼:模式 2 也會告訴你「最空曠的方向」。車子用比例控制一直往最空的地方開,在箱子陣裡會自己找出口。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor
from pybricks.iodevices import Ev3devSensor
from pybricks.parameters import Port
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = Ev3devSensor(Port.S1) # TOF8 八方位雷射插 1 號孔
left_motor = Motor(Port.B) # 左輪
right_motor = Motor(Port.C) # 右輪
def read_farDir():
# 最空曠的方向:-7 ~ +7(負=左、正=右)
return sensor.read('IR-REMOTE')[2]
# ---------- 程式從這裡開始 ----------
# 一直重複
while True:
# 轉彎力量 turn = 最空方向 × 5(負數往左、正數往右)
turn = read_farDir() * 5
# 左輪=25+turn、右輪=25-turn
left_motor.dc(25 + turn)
right_motor.dc(25 - turn)一步一步看懂程式:
- 一直重複
- 轉彎力量 turn = 最空方向 × 5(負數往左、正數往右)
- 左輪=25+turn、右輪=25-turn
跑起來應該看到: 車子會避開箱子,往空的地方前進。
常見問題:
- 方向數字是 8 或 -8? ±8 代表那個方向 120 公分內沒有東西,不是「最左」「最右」。
- 一直往牆壁開? 方向的正負可能跟車子相反,把程式裡的「+turn」和「-turn」對調。
範例 6:最近的東西在哪、幾公釐
僅 Pybricks v4/EV3 MicroPython v2.0/clev3r(EV3-G、Classroom 的積木讀不到這個模式)
這個範例會做什麼: 模式 5 一次給兩個數字:最近的東西有幾公釐、在哪個方向(-7~+7)。比模式 2 的 1.2 公分一格準 12 倍。這個範例把兩個數字顯示在螢幕上,東西靠到 15 公分內就嗶一聲。
要準備什麼:
- TOF8 八方位雷射(EV3 版,韌體 v4.0 以上)
- EV3 主機
怎麼接: TOF8 八方位雷射插 1 號孔。
下載程式(選你用的軟體):
⬇ Pybricks v4 | ⬇ EV3 MicroPython v2.0
(程式碼即範例,不需截圖。)
Pybricks v4 程式碼
# ============================================================
# TOF8 八方位雷射測距感應器 EV3 新手範例 06:最近的東西在哪、幾公釐
# 軟體:Pybricks v4(用 Chrome 打開 https://code.pybricks.com ,EV3 版目前是 Beta)
# 接法:TOF8 八方位雷射插 1 號孔
# 這個範例會做什麼:模式 5 一次給兩個數字:最近的東西有幾公釐、在哪個方向(-7~+7)。比模式 2 的 1.2 公分一格準 12 倍。這個範例把兩個數字顯示在螢幕上,東西靠到 15 公分內就嗶一聲。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port, Color
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = LUMPDevice(Port.S1) # TOF8 八方位雷射插 1 號孔
def read_nearMm():
# 最近的東西有多遠(公釐):0 ~ 1200 mm
return sensor.read(5)[0]
def read_nearDir5():
# 最近的東西在哪個方向:-7 ~ +7(負=左、正=右、0 附近=正前方;±8=沒有東西)
return sensor.read(5)[1]
# ---------- 程式從這裡開始 ----------
# 清除螢幕
ev3.screen.clear()
# 一直重複
while True:
# 第 1 行顯示最近的東西有幾公釐
ev3.screen.draw_text(0, 0, "NEARMM " + str(read_nearMm()) + " ", Color.BLACK, Color.WHITE)
# 第 2 行顯示它在哪個方向(負=左、正=右、0=正前方)
ev3.screen.draw_text(0, 16, "DIR " + str(read_nearDir5()) + " ", Color.BLACK, Color.WHITE)
# 如果最近的東西不到 150 公釐(15 公分)
if read_nearMm() < 150:
# 不到 15 公分:嗶一聲
ev3.speaker.beep()
# 等 0.1 秒
wait(100)EV3 MicroPython v2.0 程式碼
#!/usr/bin/env pybricks-micropython
# ============================================================
# TOF8 八方位雷射測距感應器 EV3 新手範例 06:最近的東西在哪、幾公釐
# 軟體:樂高官方 EV3 MicroPython v2.0(microSD 開機卡+VS Code「LEGO MINDSTORMS EV3 MicroPython」擴充套件)
# 接法:TOF8 八方位雷射插 1 號孔
# 這個範例會做什麼:模式 5 一次給兩個數字:最近的東西有幾公釐、在哪個方向(-7~+7)。比模式 2 的 1.2 公分一格準 12 倍。這個範例把兩個數字顯示在螢幕上,東西靠到 15 公分內就嗶一聲。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.iodevices import Ev3devSensor
from pybricks.parameters import Port, Color
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = Ev3devSensor(Port.S1) # TOF8 八方位雷射插 1 號孔
def read_nearMm():
# 最近的東西有多遠(公釐):0 ~ 1200 mm
return sensor.read('IR-CAL')[0]
def read_nearDir5():
# 最近的東西在哪個方向:-7 ~ +7(負=左、正=右、0 附近=正前方;±8=沒有東西)
return sensor.read('IR-CAL')[1]
# ---------- 程式從這裡開始 ----------
# 清除螢幕
ev3.screen.clear()
# 一直重複
while True:
# 第 1 行顯示最近的東西有幾公釐
ev3.screen.draw_text(0, 0, "NEARMM " + str(read_nearMm()) + " ", Color.BLACK, Color.WHITE)
# 第 2 行顯示它在哪個方向(負=左、正=右、0=正前方)
ev3.screen.draw_text(0, 16, "DIR " + str(read_nearDir5()) + " ", Color.BLACK, Color.WHITE)
# 如果最近的東西不到 150 公釐(15 公分)
if read_nearMm() < 150:
# 不到 15 公分:嗶一聲
ev3.speaker.beep()
# 等 0.1 秒
wait(100)一步一步看懂程式:
- 清除螢幕
- 一直重複
- 第 1 行顯示最近的東西有幾公釐
- 第 2 行顯示它在哪個方向(負=左、正=右、0=正前方)
- 如果最近的東西不到 150 公釐(15 公分)
- 不到 15 公分:嗶一聲
- 等 0.1 秒
跑起來應該看到: 手在感應器周圍移動,第 1 行的公釐數跟著變,第 2 行告訴你手在左邊(負)還是右邊(正);手靠到 15 公分內 EV3 就一直嗶。
常見問題:
- 方向數字是 8 或 -8? ±8 代表那個方向 120 公分內沒有東西,不是「最左」「最右」。
- 數字一直是 0 或不會動? 感應器韌體要 v4.0(2026-10)以上才有這個模式,舊韌體請先更新。
- EV3-G/Classroom 怎麼沒有這個範例? 這個範例用的是新模式(2026-10 韌體 v4 起),EV3-G 和 Classroom 的紅外線積木讀不到,只有 Pybricks、EV3 MicroPython、clev3r 能用。
還有問題?歡迎到 聯絡我們 留言,附上你用的軟體和程式截圖,我們會幫你看。
其他問題
- EV3 顯示成紅外線感應器? 正常:感應器模擬成樂高原廠感應器,用原廠積木就能讀。
- 切換模式時卡一下? EV3 每次換模式要等約 1 秒。整趟任務盡量只用同一個模式的積木。
還有問題?到 聯絡我們 附上你用的軟體和程式截圖。
下載
本頁依據
- 主機與軟體清單:
_build/guides.json - 值與命令:
_build/protocol/tof8.json(單一真相來源) - 安裝與設定:
_build/guides/software/ev3-pybricks.zh.md、_build/guides/product/tof8/ev3-pybricks.zh.md - 範例:
sensors/tof8/ev3-examples.md