學習目標
- ✓理解一維距離與二維距離矩陣的差異。
- ✓設定矩陣 ToF 的 I2C 位址並更新 64 筆資料。
- ✓讀取指定座標與中心點,做出簡單空間判斷。
SENSOR / LIDAR
SEN0628 將 ToF 距離量測排列成 8×8 矩陣,可取得 64 個位置的毫米距離。它適合做距離熱點、手勢方向與空間分布的入門活動。
先確認這一課要學會什麼,以及桌面上需要哪些材料。
矩陣 ToF 感測器會在 8×8 的座標上回傳距離;資料陣列需要先更新,之後讀取的 X、Y 值才代表最新狀態。
以積木選擇 0x30–0x33 其中一個位址。
呼叫 getAllData 取得 64 個距離值。
X 與 Y 都限制在 0–7,可檢查中心點或自訂位置。
桃園版積木會將 X、Y 限制在 0–7,資料單位為毫米。
SEN0628 使用 I2C 與多個距離區域資料;若同一條 I2C 上有其他裝置,請確認位址不要衝突。
| 模組腳位 | 接到控制板 | 訊號方向 | 檢查重點 |
|---|---|---|---|
| VCC | 依模組規格 | 電源 | 使用有穩壓與電平轉換的模組版本。 |
| GND | GND | 地線 | 與 Arduino 共地。 |
| SDA | A4 / SDA | I2C 資料 | UNO 的 SDA 腳位。 |
| SCL | A5 / SCL | I2C 時脈 | UNO 的 SCL 腳位。 |
已將 4 條線路依同一筆資料逐列對齊;電壓仍須依手上模組版本確認。
積木名稱與型別以桃園版 Blockly 現行程式為準,不以通用積木替代。
playrobot_matrix_tof_setup設定 I2C 位址並啟動矩陣感測器
位置:感測器 → 距離感測器 → 光達(SEN0628)playrobot_matrix_tof_update讀取全部 64 個距離值
位置:感測器 → 距離感測器 → 光達(SEN0628)playrobot_matrix_tof_point讀取 X、Y 位置的距離
位置:感測器 → 距離感測器 → 光達(SEN0628)playrobot_matrix_tof_center快速讀取中心區域距離
位置:感測器 → 距離感測器 → 光達(SEN0628)每次更新 8×8 資料後,讀取中心點並在小於門檻時亮燈。
playrobot_matrix_tof_setuparduino_delayplayrobot_matrix_tof_updateplayrobot_matrix_tof_centerarduino_serial_printplayrobot_matrix_tof_setuparduino_delayplayrobot_matrix_tof_updateplayrobot_matrix_tof_centerarduino_serial_print在紙上標出感測器的 X/Y 方向。
為什麼:矩陣座標方向會隨安裝方向改變。把更新積木放在任何 point 或 center 積木之前。
為什麼:否則讀到的是上一輪資料。改讀四個角落,觀察物體在不同區域的距離。
為什麼:把單點感測延伸成空間分布問題。playrobot_matrix_tof_setup:設定 I2C 位址並啟動矩陣感測器
下載桃園版 Blockly 專案或對應的文字程式。
| 測試情境 | 可能讀值 | 判讀 |
|---|---|---|
| 手放在中心前方 | 中心點距離變小 | 該區域的 ToF 回波變近。 |
| 手移到左側 | 左側座標的距離先變化 | 64 點資料可以辨識位置變化。 |
這段程式把「8×8 矩陣 ToF 光達(SEN0628)」的實體接線、桃園版 Blockly 積木與 Arduino 執行流程接在一起。先對照腳位,再看初始化、讀值、輸出與等待的順序;每一步都可以回到本頁的積木範例實測。
#include <DFRobot_MatrixLidar.h>
DFRobot_MatrixLidar_I2C lidar(0x33);
uint16_t data[64] = {0};
void setup() {
Serial.begin(115200);
while (lidar.begin() != 0) delay(500);
while (lidar.setRangingMode(eMatrix_8x8) != 0) delay(500);
}
void loop() {
lidar.getAllData(data);
Serial.println(data[3 * 8 + 3]);
delay(200);
}#include <DFRobot_MatrixLidar.h>函式庫提供桃園版 Blockly 產生器所需的底層功能;若這裡的函式庫或物件名稱不對,後面的 playrobot_matrix_tof_setup 就算接線正確也無法使用。
// VCC → 依模組規格、GND → GND、SDA → A4 / SDA、SCL → A5 / SCL本頁接線是 VCC → 依模組規格、GND → GND、SDA → A4 / SDA、SCL → A5 / SCL。程式常數、積木欄位與實體線材必須使用同一組設定;若改了其中一邊,另外兩邊也要一起改。
void setup() {啟動序列埠、I²C/UART 或感測器初始化通常只需要做一次,所以要放在「初始化」區,不要每一圈重複建立裝置。這也對應範例中的啟動積木。
uint16_t data[64] = {0};重複執行區先讓感測器更新,再讀取 8×8 矩陣 ToF 初始化。若元件有 data ready、可用性或逾時條件,先判斷狀態再使用數值,避免把無效資料當成真實測量。
while (lidar.begin() != 0) delay(500);先把原始值、單位或狀態送到序列埠,才能和預期結果比較;等待時間則決定更新速度。若看到亂碼,先檢查鮑率;若數值跳動,先增加合理的取樣間隔或做校正。
先從「電源、接線、腳位、物體」四個方向檢查,再修改程式。
先檢查:確認 I2C 位址、供電與 SDA/SCL。
處理方式:將積木位址改成模組實際設定,並移除衝突的 I2C 裝置。
先檢查:確認是否先放更新資料積木。
處理方式:在讀取 point/center 前每輪呼叫更新積木。
先檢查:檢查模組安裝方向。
處理方式:在學習單畫出實際 X/Y 方向,必要時在程式中交換座標。
從顯示數值,逐步走向條件判斷、燈號回饋與雷達專題。
題目:用序列埠連續列印中心點距離。
這題要延伸「8×8 矩陣 ToF 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。先把資料整理成可觀察的序列埠或表格結果。
題目:讀取四個角落與中心,找出距離最小的位置。
這題要延伸「8×8 矩陣 ToF 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。先把資料整理成可觀察的序列埠或表格結果。
題目:將 8×8 距離資料分成近、中、遠三種顏色顯示。
這題要延伸「8×8 矩陣 ToF 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。把結果接到題目指定的輸出元件。
確認 64 點、I2C/UART/USB 介面與使用情境。
對照預設 I2C 0x33、eMatrix_8x8、getAllData 與毫米單位。
對照 setup、update、point 與 center 積木。