TY桃園智造感測器教學庫
感測器教學庫/距離感測器/雷射(VL53L0X)
BATCH 01 · 已發布

SENSOR / LASER

雷射距離感測器(VL53L0X)用 940 nm ToF 測量物體與模組之間的距離

VL53L0X 透過 940 nm VCSEL 與飛行時間(ToF)原理測量距離,資料經 I2C 傳給 Arduino。它與反射式紅外線不同,教學重點是距離數值與量測限制。

入門45 分鐘Arduino UNO(需安裝 Adafruit VL53L0X Library)
READYDATA
SIGNAL STABLE
雷射距離感測器(VL53L0X)
VIN/VCC / 5V 或依模組標示GND / GND
01 / PREPARE

課前準備

先確認這一課要學會什麼,以及桌面上需要哪些材料。

學習目標

  1. 理解 ToF 與反射光強弱量測的差異。
  2. 使用初始化與距離讀取積木取得毫米值。
  3. 比較不同物體距離與表面材質對量測的影響。

材料清單

1 個VL53L0X 雷射 ToF 模組確認模組已具備穩壓與 I2C 電平轉換,否則需依規格供電。
1 組Arduino UNO 與 USB 線UNO 的 I2C 為 A4/SDA、A5/SCL。
3 種不同材質的目標物例如白紙、黑紙與手掌。
適用對象國中生活科技與 Arduino 初學者
建議課時45 分鐘
示範平台Arduino UNO(需安裝 Adafruit VL53L0X Library)
02 / HOW IT WORKS

用光的飛行時間估算距離

感測器發出紅外線脈衝並量測回波到達時間,再轉換成距離;它不是可見光雷射測距儀,量測仍會受到目標大小、角度與環境影響。

01

初始化 I2C

啟動 Wire 與 VL53L0X 驅動程式。

02

執行量測

感測器發出 940 nm 光並等待回波。

03

取得毫米值

Blockly 距離積木回傳最新測量值。

DISTANCE FORMULAdistance_mm ≈ (light round-trip time) × c / 2

實際數值由感測器內部校正與演算法處理;學生只需把回傳值視為毫米距離。

03 / WIRING

接線配置

VL53L0X 使用 I2C,只需要供電、接地、SDA 與 SCL;若模組有 XSHUT 或 GPIO1,本篇先不使用。

MODULE雷射距離感測器(VL53L0X)VIN/VCCGNDSDASCL
CONTROLArduino UNO(需安裝 Adafruit VL53L0X Library)5V 或依模組標示GNDA4 / SDAA5 / SCL
模組腳位接到控制板訊號方向檢查重點
VIN/VCC5V 或依模組標示電源裸晶片模組不可直接接 5V,先看模組規格。
GNDGND地線建立共同地線。
SDAA4 / SDAI2C 資料UNO 使用 A4 作為 SDA。
SCLA5 / SCLI2C 時脈UNO 使用 A5 作為 SCL。
✓ WIRING ROWS ALIGNED

已將 4 條線路依同一筆資料逐列對齊;電壓仍須依手上模組版本確認。

04 / BLOCK GUIDE

本課會用到的積木

積木名稱與型別以桃園版 Blockly 現行程式為準,不以通用積木替代。

VL53L0X 初始化
BLOCK 01taoyuan_vl53l0x_init

VL53L0X 初始化

啟動 I2C 與距離感測器

位置:感測器 → 距離感測器 → 雷射(VL53L0X)
VL53L0X 距離(mm)
BLOCK 02taoyuan_vl53l0x_distance

VL53L0X 距離(mm)

取得目前距離值

位置:感測器 → 距離感測器 → 雷射(VL53L0X)
單位
mm回傳值以毫米表示。
序列埠列印
BLOCK 03serial_println

序列埠列印

觀察距離是否隨目標物移動而改變

位置:輸出
等待
BLOCK 04controls_delay

等待

控制量測更新頻率

位置:控制
05 / BLOCK EXAMPLE

做一把簡易電子尺

將 VL53L0X 距離值每 200 毫秒列印一次。

桃園版 BLOCKLY / WORKSPACE● BLOCK STYLE
Arduino 程式
初始化
VL53L0X 初始化taoyuan_vl53l0x_init
重複執行arduino_delay
VL53L0X 距離(mm)taoyuan_vl53l0x_distance
序列埠列印距離serial_println
等待 200 毫秒controls_delay
重複執行
VL53L0X 初始化taoyuan_vl53l0x_init
重複執行arduino_delay
VL53L0X 距離(mm)taoyuan_vl53l0x_distance
序列埠列印距離serial_println
等待 200 毫秒controls_delay
X / 010Y / 024

組合步驟

01
只初始化一次

把初始化積木放在啟動區。

為什麼:I2C 與感測器設定不需要每圈重設。
02
改變物體距離

讓白紙、黑紙與手掌慢慢靠近或遠離。

為什麼:可觀察距離讀值對目標物的反應。
03
討論量測範圍

記錄太近、太遠或斜放時的異常值。

為什麼:知道感測器的有效量測條件比只看一個數字重要。
積木使用重點先辨認積木是「回傳值」還是「執行動作」,再放到正確的拼接位置。

taoyuan_vl53l0x_init啟動 I2C 與距離感測器

預期觀察結果

測試情境可能讀值判讀
目標物前後移動距離毫米值大致跟著改變ToF 感測器將回波時間轉換成距離。
目標物太斜或太小讀值可能不穩或超出範圍回波能量與幾何角度會影響量測。
06 / CODE EXPLAINED

範例程式逐段解說

這段程式把「雷射距離感測器(VL53L0X)」的實體接線、桃園版 Blockly 積木與 Arduino 執行流程接在一起。先對照腳位,再看初始化、讀值、輸出與等待的順序;每一步都可以回到本頁的積木範例實測。

GENERATED LOGIC / EXCERPT積木背後的程式碼收合程式碼 −
TAOYUAN BLOCKLY / ARDUINO C++READ ONLY
#include <Wire.h>
#include <Adafruit_VL53L0X.h>

Adafruit_VL53L0X lox;

void setup() {
  Serial.begin(115200);
  if (!lox.begin()) Serial.println("VL53L0X init failed");
}

void loop() {
  VL53L0X_RangingMeasurementData_t measure;
  lox.rangingTest(&measure, false);
  if (measure.RangeStatus != 4) Serial.println(measure.RangeMilliMeter);
  delay(200);
}
SELF STUDY GUIDE先看哪一段、為什麼?
01
先載入函式庫與建立裝置#include <Wire.h>

函式庫提供桃園版 Blockly 產生器所需的底層功能;若這裡的函式庫或物件名稱不對,後面的 taoyuan_vl53l0x_init 就算接線正確也無法使用。

02
把程式腳位對回接線表// VIN/VCC → 5V 或依模組標示、GND → GND、SDA → A4 / SDA、SCL → A5 / SCL

本頁接線是 VIN/VCC → 5V 或依模組標示、GND → GND、SDA → A4 / SDA、SCL → A5 / SCL。程式常數、積木欄位與實體線材必須使用同一組設定;若改了其中一邊,另外兩邊也要一起改。

03
在 setup 只做一次初始化void setup() {

啟動序列埠、I²C/UART 或感測器初始化通常只需要做一次,所以要放在「初始化」區,不要每一圈重複建立裝置。這也對應範例中的啟動積木。

04
在 loop 更新並取得資料void loop() {

重複執行區先讓感測器更新,再讀取 VL53L0X 初始化。若元件有 data ready、可用性或逾時條件,先判斷狀態再使用數值,避免把無效資料當成真實測量。

05
輸出結果並控制取樣速度if (!lox.begin()) Serial.println("VL53L0X init failed");

先把原始值、單位或狀態送到序列埠,才能和預期結果比較;等待時間則決定更新速度。若看到亂碼,先檢查鮑率;若數值跳動,先增加合理的取樣間隔或做校正。

自學檢查
  • 實體接線:VIN/VCC → 5V 或依模組標示、GND → GND、SDA → A4 / SDA、SCL → A5 / SCL。
  • 主要積木:taoyuan_vl53l0x_init;先確認它是回傳值還是執行動作。
  • 本課板子:Arduino UNO(需安裝 Adafruit VL53L0X Library);更換控制板或模組版本時,電壓、腳位與函式庫都要重新確認。
07 / DEBUG

常見問題與故障排除

先從「電源、接線、腳位、物體」四個方向檢查,再修改程式。

ERR 01

初始化失敗

先檢查:確認 SDA/SCL、供電與函式庫是否正確。

處理方式:依模組規格供電,並掃描 I2C 或重新插接 A4/A5。

ERR 02

距離一直是 0 或很大

先檢查:確認目標物在感測器視野內且不是太斜。

處理方式:使用較大的平面目標,正對感測器測試。

ERR 03

讀值偶爾跳動

先檢查:檢查目標物表面、環境光與固定方式。

處理方式:放慢更新速度並取多次讀值平均。

08 / NEXT MISSION

延伸挑戰

從顯示數值,逐步走向條件判斷、燈號回饋與雷達專題。

L1

距離警示燈

題目:距離小於 100 mm 時點亮 LED。

解題方向

這題要延伸「VL53L0X 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。把結果接到題目指定的輸出元件。

  1. 先匯入本頁 Blockly 範例,確認感測器在沒有加入挑戰功能時能穩定讀值。
  2. 保留 taoyuan_vl53l0x_init,先把讀值送到序列埠,建立正常範圍或基準值。
  3. 依題目「距離小於 100 mm 時點亮 LED。」加入比較、分類、累計或時間判斷;門檻要用實測資料決定,不要直接猜一個數字。
  4. 用至少三種不同情境測試,記錄輸入、程式判斷與輸出結果,再修正門檻或取樣間隔。
完成檢核:完成後應能指出:哪一個積木取得資料、哪一段負責判斷或換算、把結果接到題目指定的輸出元件是否在所有測試情境都正確反應。
L2

量測反應時間

題目:比較不同延遲時間對資料更新速度的影響。

解題方向

這題要延伸「VL53L0X 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。先把資料整理成可觀察的序列埠或表格結果。

  1. 先匯入本頁 Blockly 範例,確認感測器在沒有加入挑戰功能時能穩定讀值。
  2. 保留 taoyuan_vl53l0x_init,先把讀值送到序列埠,建立正常範圍或基準值。
  3. 依題目「比較不同延遲時間對資料更新速度的影響。」加入比較、分類、累計或時間判斷;門檻要用實測資料決定,不要直接猜一個數字。
  4. 用至少三種不同情境測試,記錄輸入、程式判斷與輸出結果,再修正門檻或取樣間隔。
完成檢核:完成後應能指出:哪一個積木取得資料、哪一段負責判斷或換算、先把資料整理成可觀察的序列埠或表格結果是否在所有測試情境都正確反應。
L3

雙距離感測器

題目:使用不同 I2C 位址與 XSHUT 控制兩個 VL53L0X。

解題方向

這題要延伸「VL53L0X 初始化」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。先把資料整理成可觀察的序列埠或表格結果。

  1. 先匯入本頁 Blockly 範例,確認感測器在沒有加入挑戰功能時能穩定讀值。
  2. 保留 taoyuan_vl53l0x_init,先把讀值送到序列埠,建立正常範圍或基準值。
  3. 依題目「使用不同 I2C 位址與 XSHUT 控制兩個 VL53L0X。」加入比較、分類、累計或時間判斷;門檻要用實測資料決定,不要直接猜一個數字。
  4. 用至少三種不同情境測試,記錄輸入、程式判斷與輸出結果,再修正門檻或取樣間隔。
完成檢核:完成後應能指出:哪一個積木取得資料、哪一段負責判斷或換算、先把資料整理成可觀察的序列埠或表格結果是否在所有測試情境都正確反應。
教師快速檢核4 POINT CHECK
  • 能說明 ToF 與單純反射強度判斷的差異。
  • 能完成 I2C 接線與初始化。
  • 能以毫米值設計一個距離條件。
09 / EVIDENCE資料來源與版本展開查看 +
LAST REVIEWED / 2026-08-13

本頁使用零件圖鑑標準範本,內容可由網站編輯模式持續維護。

返回教學庫 →