官方 SPIKE App 專區 (EXP6)
+
警告
請注意:您目前觀看的是 【官方 SPIKE App (Python 模式)】 教學。 如果您使用的是 Pybricks 專業環境,請點擊 這裡切換至 Pybricks 教學。
本頁適用於在 官方 SPIKE App (SPIKE 3) 中使用 Python 進行開發的使用者。 在官方環境中,EXP6 程式庫採用純 Python 撰寫(不支援多工作業 async),所有指令皆採用「同步 (Sync) 且直覺的物件導向設計」,非常適合循序漸進的程式教學。
下載專屬程式庫與範例
安裝函式庫 (Install)
在執行任何擴充板程式前,請務必先將下載包中的 Install_MBC_exp6_Lib.py 程式碼貼入 SPIKE App 中並執行一次。腳本會自動將核心程式庫寫入到主機韌體中。安裝成功後,您就可以在任何新專案中直接 from MBC_exp6_SPIKE_App_Lib import MBC_EXP6,不需再複製貼上一長串的原始碼!
解除安裝 (Uninstall)
如果未來不再需要使用擴充板,或是想要清除主機空間,請執行下載包中的 Uninstall_MBC_exp6_Lib.py 腳本。執行後即可將擴充板程式庫從 SPIKE 主機的內部韌體中完全且乾淨地移除。
基礎初始化
在使用任何功能前,必須先在 setup 階段建立擴充板物件。假設您的 EXP6 擴充板接在主機的 Port F:
步驟一:建立連線物件
在主程式中引入函式庫,並使用 port.A ~ port.F 來指定擴充板實際連接的孔位。
核心控制與讀取指令
在官方 App 中,所有的控制指令都是同步 (Sync) 執行的。以下是完整的 API 參考手冊。
馬達控制 (Motor Control)
控制接在 EXP6 擴充板上的 SPIKE 馬達,支援指定轉速、角度、PID 閉迴路控制、煞車以及雙馬達同步驅動。
啟動馬達 (Power)
使用純粹的電力 (開迴路 PWM) 驅動馬達。沒有速度補償,但反應最直接快速。
# exp6.motor_power(孔位, 動力 -100~100)
exp6.motor_power(1, 50)
閉迴路轉動 (Run)
使用 PID 閉迴路控制,擴充板會自動根據負載調整力量,確保轉速維持在設定值。
# exp6.motor_run(孔位, 速度 -100~100)
exp6.motor_run(2, 75)
角度精準控制 (Angle Control)
設定馬達旋轉特定的相對角度,或是移動到指定的絕對角度。擴充板內建的 PID 控制與角度累積器可以確保動作精準。參數 stop 填寫 1(滑行), 2(煞車), 3(鎖死), 4(續轉)。
# 相對角度:讓孔 1 馬達以速度 30 轉動 360 度,到達後鎖死 (3)
exp6.motor_run_degrees(1, 30, 360, 3)
# 角度指令送出就往下執行、不會等轉完;還在轉時送下一個角度指令會被丟掉,所以先等它轉完
time.sleep(1.5)
# 絕對角度:讓孔 1 馬達以速度 30 轉動到 90 度的位置,到達後鎖死
exp6.motor_track_target(1, 30, 90, 3)
停止與煞車 (Stop)
選擇讓馬達自然滑行停止,或是用力咬死煞車。
exp6.motor_stop(1, 1) # 1: 滑行
exp6.motor_stop(1, 3) # 3: 鎖定目前位置
exp6.stop_all(1) # 全域緊急滑行停止
雙輪底盤同步 (Drive Base)
保證兩顆馬達精準同步啟動,不會出現一快一慢導致車子偏向的問題。
# 直行 (左輪 孔1, 右輪 孔2)
exp6.drive(1, 2, 50, 50)
# 雙馬達煞車鎖定 (3)
exp6.drive_stop(1, 2, 3)
讀取角度與設定轉向
隨時讀取馬達內部的編碼器資訊,或是反轉硬體安裝方向。
exp6.get_motor_angle(1) # 累積角度
exp6.get_motor_abs_angle(1) # 絕對角度 0~359
exp6.get_motor_speed(1) # 目前轉速 deg/s
exp6.reset_angle(1) # 累積角度歸零
exp6.set_motor_inverted(1, True) # 將馬達方向反轉
exp6.get_port_raw(1) # 該孔未解析的原始資料(uint16)
感測器讀取 (Sensor)
所有讀取指令都會從擴充板即時取得感測器狀態,非常適合用於回圈中做邏輯判斷。
超音波與力量感測器
# 讀取前方障礙物距離 (毫米 mm)
dist = exp6.get_ultrasonic_distance(3)
# 讀取力量感測器按壓百分比 (0~100%)
force = exp6.get_touch_force(4)
顏色感測器進階讀取
# 官方 0~10 顏色代碼 與 反射光
color_id = exp6.get_color_color(5)
reflection = exp6.get_color_reflection(5)
# RGB 三原色讀取 (0~100)
r, g, b = exp6.get_color_rgb(5)
# HSV 色彩空間 (色相, 飽和度, 明度)
h, s, v = exp6.get_color_hsv(5)
停止保護與其他功能
停止馬達(官方 App 沒有看門狗)
在官方 SPIKE App 使用時,擴充板沒有斷線自動停止(看門狗)的功能:程式當掉或主機斷線時,馬達會一直維持最後一道指令。所以程式最後一定要寫 exp6.stop_all(1)。等待直接用 time.sleep() 即可,不需要心跳指令。(只有 Pybricks 環境有看門狗:約 0.5 秒沒收到訊號,馬達會滑行停止。)
# 官方 App:等待直接用 time.sleep
time.sleep(3) # 秒
# 程式結束前一定要讓所有馬達停止(1 = 滑行)
exp6.stop_all(1)
系統數據
# 取得擴充板的即時電池電壓
v = exp6.get_voltage()
# 取得連接在該孔位的裝置代碼 (馬達=5)
id = exp6.get_device_id(1)