TY桃園智造感測器教學庫
感測器教學庫/距離感測器/超音波(HC-SR04)
TEMPLATE 01 · 樣板確認中

SENSOR / ULTRASONIC

HC-SR04 超音波距離感測器讓機器用回聲看見距離

HC-SR04 先發出超音波,再量測聲波碰到物體後返回的時間。這一課使用桃園版 Blockly 的實際積木,把距離值顯示在序列埠監控視窗。

入門1 節課(45–50 分鐘)Arduino UNO
48.6CM
SIGNAL STABLE
HC-SR04
VCC / 5VTRIG / D7
01 / PREPARE

課前準備

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

學習目標

  1. 能分辨 VCC、TRIG、ECHO、GND 四個腳位的用途。
  2. 能在桃園版 Blockly 設定 TRIG 與 ECHO 腳位。
  3. 能用序列埠觀察距離數值,並判斷異常讀值。
  4. 能解釋距離公式為什麼要除以 2。

材料清單

1Arduino UNO 相容控制板本篇接線與腳位以 UNO 為準
1HC-SR04 超音波感測器確認板上標示 VCC/TRIG/ECHO/GND
4公對母杜邦線顏色不同較容易檢查
1USB 資料線需可傳輸資料,不只是充電線
適用對象國中生活科技/第一次使用感測器
建議課時1 節課(45–50 分鐘)
示範平台Arduino UNO
02 / HOW IT WORKS

HC-SR04 超音波距離感測器如何運作?

控制板送出短暫的觸發訊號後,模組會發射一串 40 kHz 超音波。ECHO 腳位維持高電位的時間,代表聲波往返物體所花的時間。

01

觸發

TRIG 維持高電位至少 10 微秒,要求模組開始量測。

02

發射

模組送出人耳聽不到的 40 kHz 超音波。

03

反射

聲波碰到物體後返回接收端,ECHO 脈波長度記錄往返時間。

04

換算

程式以聲速換算距離,並除以 2 取得單程距離。

DISTANCE FORMULA距離(cm)= ECHO 時間(μs)× 0.0343 ÷ 2

0.0343 cm/μs 是約略聲速;除以 2 是因為聲波走了去程與回程。

03 / WIRING

接線配置

以下採用 Arduino UNO;積木參數必須與實際接線相同。

MODULEHC-SR04VCCTRIGECHOGND
CONTROLArduino UNO5VD7D8GND
模組腳位接到控制板訊號方向檢查重點
VCC5V電源HC-SR04 使用 5V 供電
TRIGD7控制板輸出對應積木的 TRIG 7
ECHOD8控制板輸入對應積木的 ECHO 8
GNDGND共同接地未共地會造成讀值不穩
✓ WIRING ROWS ALIGNED

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

04 / BLOCK GUIDE

本課會用到的積木

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

啟動序列埠 鮑率 9600
BLOCK 01arduino_serial_begin

啟動序列埠 鮑率 9600

設定控制板與電腦的通訊速度,放在程式開始區。

位置:通訊 → 序列埠
鮑率
9600序列埠監控視窗也要選相同速度。
超音波距離 TRIG 7 ECHO 8(公分)
BLOCK 02arduino_ultrasonic

超音波距離 TRIG 7 ECHO 8(公分)

送出觸發脈波、讀取 ECHO 時間並回傳公分數值。這是有回傳值的積木,要嵌入需要數字的插槽。

位置:感測器 → 距離感測器 → 超音波(HC-SR04)
TRIG
7必須和接線的 D7 相同。
ECHO
8必須和接線的 D8 相同。
序列埠 印出並換行 [距離值]
BLOCK 03arduino_serial_print

序列埠 印出並換行 [距離值]

把超音波積木回傳的數值送到電腦,方便觀察與除錯。

位置:通訊 → 序列埠
等待 100 毫秒時間 100 ms
BLOCK 04arduino_delay

等待 100 毫秒

控制量測頻率,避免序列埠訊息更新太快。

位置:時間
時間
100 ms每秒約更新 10 次,適合課堂觀察。
LEGACY COMPATIBILITY

分類資料同時保留舊版 ultrasonic_distance 與現行 arduino_ultrasonic。本篇主範例採現行積木;開啟舊專案時仍可辨識舊版型別。

05 / BLOCK EXAMPLE

範例 1|在序列埠連續顯示距離

移動手掌靠近或遠離感測器,監控視窗中的公分數值會跟著變化。

桃園版 BLOCKLY / WORKSPACE● BLOCK STYLE
Arduino 程式
初始化
啟動序列埠 鮑率 9600arduino_serial_begin
重複執行
序列埠 印出並換行arduino_serial_print
超音波距離 TRIG 7 ECHO 8(公分)arduino_ultrasonic
等待 100 毫秒時間 100 msarduino_delay
X / 010Y / 024

組合步驟

01
啟動通訊

把「啟動序列埠 9600」放進開始區。

為什麼:只需要初始化一次,不要放在重複區。
02
建立輸出

把「序列埠 印出並換行」放進重複區。

為什麼:每輪會送出一筆新數值,換行後比較容易閱讀。
03
嵌入感測值

將「超音波距離 TRIG 7 ECHO 8」塞進序列埠積木的數值插槽。

為什麼:超音波積木是數值積木,不能單獨接在上下堆疊中。
04
控制更新速度

在輸出積木下方接上「等待 100 毫秒」。

為什麼:保留穩定觀察時間,也避免訊息塞滿監控視窗。
05
上傳並觀察

上傳後打開序列埠監控視窗,速度設為 9600。

為什麼:鮑率不一致時,文字可能變成亂碼。
積木使用重點先辨認積木是「回傳值」還是「執行動作」,再放到正確的拼接位置。

arduino_ultrasonic送出觸發脈波、讀取 ECHO 時間並回傳公分數值。這是有回傳值的積木,要嵌入需要數字的插槽。

預期觀察結果

測試情境可能讀值判讀
手掌正對感測器約 10 cm約 9–12 cm可接受少量波動
手掌逐漸遠離數值逐漸增加感測方向與程式正常
前方沒有可反射物可能出現 -1 或異常值逾時,並非距離為負數
06 / CODE EXPLAINED

範例程式逐段解說

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

GENERATED LOGIC / EXCERPT積木背後的程式碼收合程式碼 −
TAOYUAN BLOCKLY / ARDUINO C++READ ONLY
float readUltrasonicCm(int trigPin, int echoPin) {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  unsigned long duration = pulseIn(echoPin, HIGH, 30000);
  if (duration == 0) return -1;
  return duration * 0.0343 / 2.0;
}
SELF STUDY GUIDE先看哪一段、為什麼?
01
先載入函式庫與建立裝置// HC-SR04 超音波距離感測器 library

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

02
把程式腳位對回接線表pinMode(trigPin, OUTPUT);

本頁接線是 VCC → 5V、TRIG → D7、ECHO → D8、GND → GND。程式常數、積木欄位與實體線材必須使用同一組設定;若改了其中一邊,另外兩邊也要一起改。

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

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

04
在 loop 更新並取得資料float readUltrasonicCm(int trigPin, int echoPin) {

重複執行區先讓感測器更新,再讀取 超音波距離 TRIG 7 ECHO 8(公分)。若元件有 data ready、可用性或逾時條件,先判斷狀態再使用數值,避免把無效資料當成真實測量。

05
輸出結果並控制取樣速度delayMicroseconds(2);

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

自學檢查
  • 實體接線:VCC → 5V、TRIG → D7、ECHO → D8、GND → GND。
  • 主要積木:arduino_ultrasonic;先確認它是回傳值還是執行動作。
  • 本課板子:Arduino UNO;更換控制板或模組版本時,電壓、腳位與函式庫都要重新確認。
07 / DEBUG

常見問題與故障排除

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

ERR 01

一直顯示 -1

先檢查:確認 ECHO 是否接到 D8,感測器前方是否有平整物體。

處理方式:重新插緊杜邦線,讓紙板或手掌正對兩個圓形探頭。

ERR 02

數值固定不變

先檢查:確認 TRIG、ECHO 沒有接反,積木腳位是否為 7、8。

處理方式:逐線比對接線表,再重新上傳程式。

ERR 03

數值跳動很大

先檢查:檢查物體角度、材質與量測間隔。

處理方式:改用平整硬紙板,正對探頭並保留 100 ms 等待。

ERR 04

監控視窗是亂碼

先檢查:檢查程式與監控視窗的鮑率。

處理方式:兩邊都設為 9600。

08 / NEXT MISSION

延伸挑戰

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

任務 A

距離警戒線

題目:加入判斷積木:距離小於 15 cm 時顯示「太近」。

解題方向

這題要延伸「超音波距離 TRIG 7 ECHO 8(公分)」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。把結果接到題目指定的輸出元件。

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

三段式提示

題目:把距離分成近、中、遠三段,控制紅、黃、綠 LED。

解題方向

這題要延伸「超音波距離 TRIG 7 ECHO 8(公分)」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。把結果接到題目指定的輸出元件。

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

雷達掃描器

題目:加入伺服馬達,記錄不同角度的距離資料。

解題方向

這題要延伸「超音波距離 TRIG 7 ECHO 8(公分)」的基本讀值:先保留已驗證的接線與初始化,再把題目要求的資料處理加在重複執行區。把結果接到題目指定的輸出元件。

  1. 先匯入本頁 Blockly 範例,確認感測器在沒有加入挑戰功能時能穩定讀值。
  2. 保留 arduino_ultrasonic,先把讀值送到序列埠,建立正常範圍或基準值。
  3. 依題目「加入伺服馬達,記錄不同角度的距離資料。」加入比較、分類、累計或時間判斷;門檻要用實測資料決定,不要直接猜一個數字。
  4. 用至少三種不同情境測試,記錄輸入、程式判斷與輸出結果,再修正門檻或取樣間隔。
完成檢核:完成後應能指出:哪一個積木取得資料、哪一段負責判斷或換算、把結果接到題目指定的輸出元件是否在所有測試情境都正確反應。
教師快速檢核4 POINT CHECK
  • 學生能在不看答案時完成四條接線。
  • 學生能說明 TRIG 是輸出、ECHO 是輸入。
  • 學生能指出積木中的 7、8 必須與實際接線一致。
  • 學生能用序列埠讀值判斷至少一種故障原因。
09 / EVIDENCE資料來源與版本展開查看 +
LAST REVIEWED / 2026-08-12

這是零件圖鑑的標準範本;其他零件教學會沿用相同欄位、閱讀順序與積木範例呈現方式。

返回教學庫 →