MBC 測距者 8 路 × EV3 Pybricks

三個步驟在 EV3 上用 MicroPython 讀測距者 8 路

在 EV3 上寫 MicroPython 一定照這個順序:先匯入,再建立物件、幫感應器取名字,最後才用這個名字去讀值。上面先選你用的是 Pybricks v4 還是 EV3 MicroPython v2,左邊一步一步做,右邊的程式會跟著長出來;拖動模擬感應器下面的障礙物方向和距離,就能看到程式會印出什麼。

你用的軟體:
1

匯入函式庫

程式的第一件事是告訴 Pybricks「我要用測距者 8 路的函式庫」。沒有這行,後面寫的 MBC_LASER8 主機看不懂,會出現 NameError。

選一種函式庫(兩種寫法完全一樣,只差 import 那一行):

  1. 下載函式庫(存成檔案,檔名不要改):MBC_laser8.py(只接測距者 8 路)或 MBC_sensors.py(統一函式庫);你選的是 MBC_laser8.py。
  2. 用 Chrome 打開 code.pybricks.com,照網站說明把 EV3 換成 Pybricks 韌體(正式版已內建 EV3 韌體)。
  3. 在左邊檔案區按「Import a file」,把函式庫匯入同一個專案。
  4. 檔名不要改,也不要放進子資料夾。
  5. 回到主程式,在最上面寫下面這幾行(右邊程式標 ① 的地方)。
2

建立物件:幫感應器取名字

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

感應器接在哪個孔?

要不要開啟多工?

程式裡的 1 就是孔位編號:EV3 1~4 = S1~S4。也可以寫成 Port.S1,但要多匯入 from pybricks.parameters import Port。

3

使用功能

寫法都是「laser8.功能名稱()」:名字+小數點+功能。點一個功能,程式和輸出會換成它的範例。

模擬感應器(從上面看,車頭朝上):拖動障礙物,看右邊的輸出怎麼變

模擬畫面是示意:方向和距離用畫面上的位置簡單換算,實際感應器可能差一兩格。紅色扇形 = 那一路量到東西;灰色扇形 = 讀到 120(那個方向沒有東西)。第 4、5 路都朝正前方。

每個功能的範例

完整範例


        

!


        

!


        

!

使用注意

  1. 拔線時兩種軟體不一樣。Pybricks v4 的 MBC 函式庫:讀不到時回傳上一次讀到的值(從來沒讀到過就回傳 None),電腦畫面印一行提醒,程式不會停;插回去自動恢復,要知道有沒有接好就用 sensor_ok()。避障時拔線,車子會照最後的距離繼續開,要小心。EV3 MicroPython v2 的 Ev3devSensor:讀不到會出現 OSError,程式停下來,要插回去再重新執行。在右邊勾「拔掉感應器」可以看到這兩種情形。
  2. EV3 換一個模式要約 1.1 秒。同一個迴圈裡盡量只用同一個模式(卡片上標的「模式 N」):min_direction()、min_distance()、max_direction()、max_distance() 是模式 2(避障最常用);distances()、ch() 是模式 1;nearest_mm()、nearest_dir() 是模式 5;front_mm() 是模式 3。
  3. 單位要看清楚。EV3 的公分值感應器是用「1 格 = 1.2 公分」(0 ~ 100)送來的,MBC 函式庫幫你換回公分(0 ~ 120,大約每 1 ~ 2 公分跳一次);EV3 MicroPython v2 直接讀模式 0、1、2 拿到的是格數,公分 = 格數 × 1.2。模式 3、5 是毫米。
  4. 方向:站在車後面往前看,左邊是負數、右邊是正數;第 1 顆朝正左邊、第 4、5 顆朝正前方、第 8 顆朝正右邊。有東西時方向是 −7 ~ +7;±8 = 四周沒有東西。所以判斷「有沒有東西」看距離有沒有到最大(120 公分、100 格、1200 毫米)。
  5. EV3 讀不到的:read_all()、is_ok()、init_status()、fault_status()、device_id()、firmware_version() 只有 SPIKE 有。毫米(模式 3、5)要感應器韌體 v4.0 以後。