TY桃園智造感測器教學庫
感測器教學庫/距離感測器/紅外線光中斷(940 nm)
BATCH 01 · 已發布

SENSOR / PHOTOINTERRUPTER

紅外線光中斷感測器(940 nm)用光束被遮住的瞬間計數、測速與辨識位置

光中斷模組由紅外線發射端與接收端形成一條光路;物體通過並遮住光束時,數位輸出會切換。它適合做輪盤計數、門片通過偵測與簡單轉速實驗。

入門45 分鐘Arduino UNO
READYDATA
SIGNAL STABLE
紅外線光中斷感測器(940 nm
VCC / 5VGND / GND
01 / PREPARE

課前準備

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

學習目標

  1. 理解光束遮蔽造成數位狀態改變。
  2. 使用主動電位設定讀取遮光事件。
  3. 以事件計數推估物體通過次數或轉速。

材料清單

1 個940 nm 紅外線光中斷模組確認發射端與接收端相對位置。
1 組Arduino UNO 與 USB 線使用 D2 作為數位輸入示範。
1 個帶缺口的圓盤或紙片用來製造規律遮光事件。
適用對象國中生活科技與 Arduino 初學者
建議課時45 分鐘
示範平台Arduino UNO
02 / HOW IT WORKS

光路被切斷就是一個事件

模組把接收到的紅外線轉成數位高低電位;實際遮光時是 HIGH 或 LOW,取決於模組電路與 ACTIVE_LEVEL 設定。

01

建立光路

發射端持續送出 940 nm 紅外線,接收端收到光。

02

物體通過

輪盤缺口、紙片或手指遮住光路。

03

讀取狀態

Blockly 依設定的主動電位回傳是否被遮住。

DISTANCE FORMULAcount = count + 1(每次遮光邊緣)

若在整段遮光期間重複加一,會得到大量重複計數;教學時應加入邊緣判斷或解除遮光等待。

03 / WIRING

接線配置

本篇以數位輸出示範;如果使用不同模組,請先用序列埠確認遮光時的 HIGH/LOW,再調整 ACTIVE_LEVEL。

MODULE紅外線光中斷感測器(940 nmVCCGNDOUT
CONTROLArduino UNO5VGNDD2
模組腳位接到控制板訊號方向檢查重點
VCC5V電源依模組標示供電。
GNDGND地線建立共同參考電位。
OUTD2數位輸出接到光中斷積木的 PIN。
✓ WIRING ROWS ALIGNED

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

04 / BLOCK GUIDE

本課會用到的積木

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

紅外線光中斷:是否遮光?PIN 2ACTIVE_LEVEL LOW
BLOCK 01playrobot_ir_breakbeam

紅外線光中斷:是否遮光?

讀取遮光後的布林狀態

位置:感測器 → 距離感測器 → 紅外線光中斷
PIN
2設定 OUT 所接的數位腳位。
ACTIVE_LEVEL
LOW選擇模組在遮光時的有效電位。
如果…那麼
BLOCK 02controls_if

如果…那麼

把遮光狀態轉成計數事件

位置:控制
變數增加
BLOCK 03math_change

變數增加

每次事件將計數器加一

位置:數學/變數
序列埠列印
BLOCK 04serial_println

序列埠列印

觀察遮光狀態與計數結果

位置:輸出
05 / BLOCK EXAMPLE

數一數輪盤通過幾次

讓紙盤上的缺口每通過一次光路,計數器只增加一次。

桃園版 BLOCKLY / WORKSPACE● BLOCK STYLE
Arduino 程式
初始化
重複執行arduino_delay
光中斷:是否遮光?(D2,LOW)sensor_block
如果遮光arduino_delay
計數器增加 1arduino_serial_print
等待直到解除遮光arduino_delay
重複執行
重複執行arduino_delay
光中斷:是否遮光?(D2,LOW)sensor_block
如果遮光arduino_delay
計數器增加 1arduino_serial_print
等待直到解除遮光arduino_delay
X / 010Y / 024

組合步驟

01
先確認有效電位

手動遮住光路並查看序列埠。

為什麼:避免把 HIGH/LOW 方向設定反。
02
加入解除遮光

事件計數後等待 OUT 回到非有效狀態。

為什麼:同一個物體停在光路中時不會被重複計數。
03
換算轉速

在固定時間內統計通過次數,再換算 RPM。

為什麼:計數資料可以延伸成簡單的速度測量。
積木使用重點先辨認積木是「回傳值」還是「執行動作」,再放到正確的拼接位置。

playrobot_ir_breakbeam讀取遮光後的布林狀態

預期觀察結果

測試情境可能讀值判讀
光路暢通狀態保持未遮光接收端持續收到紅外線。
紙片通過光路狀態切換並觸發一次計數遮光邊緣代表一個通過事件。
06 / CODE EXPLAINED

範例程式逐段解說

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

GENERATED LOGIC / EXCERPT積木背後的程式碼收合程式碼 −
TAOYUAN BLOCKLY / ARDUINO C++READ ONLY
const int BREAKBEAM_PIN = 2;
unsigned long count = 0;

void setup() {
  pinMode(BREAKBEAM_PIN, INPUT);
  Serial.begin(115200);
}

void loop() {
  if (digitalRead(BREAKBEAM_PIN) == LOW) {
    count++;
    Serial.println(count);
    while (digitalRead(BREAKBEAM_PIN) == LOW) delay(2);
  }
}
SELF STUDY GUIDE先看哪一段、為什麼?
01
先載入函式庫與建立裝置// 紅外線光中斷感測器(940 nm) library

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

02
把程式腳位對回接線表const int BREAKBEAM_PIN = 2;

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

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

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

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

重複執行區先讓感測器更新,再讀取 紅外線光中斷:是否遮光?。若元件有 data ready、可用性或逾時條件,先判斷狀態再使用數值,避免把無效資料當成真實測量。

05
輸出結果並控制取樣速度if (digitalRead(BREAKBEAM_PIN) == LOW) {

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

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

常見問題與故障排除

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

ERR 01

一直顯示遮光

先檢查:確認發射端與接收端是否對準,以及 ACTIVE_LEVEL。

處理方式:調整模組間距與角度,並在積木中切換 HIGH/LOW。

ERR 02

一次通過卻增加很多次

先檢查:檢查程式是否等待解除遮光。

處理方式:加入解除遮光等待或以邊緣偵測取代電位偵測。

ERR 03

環境光干擾

先檢查:在室內燈光與陽光下比較狀態。

處理方式:固定遮光罩與模組位置,避免接收端直接面向強光。

08 / NEXT MISSION

延伸挑戰

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

L1

做一個通過計數器

題目:每遮光一次讓 LED 閃爍一次,並列印累計次數。

解題方向

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

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

測量輪盤 RPM

題目:使用 10 秒視窗統計次數,顯示每分鐘轉數。

解題方向

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

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

判斷方向

題目:加入第二組錯開的光中斷,利用先後順序判斷旋轉方向。

解題方向

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

  1. 先匯入本頁 Blockly 範例,確認感測器在沒有加入挑戰功能時能穩定讀值。
  2. 保留 playrobot_ir_breakbeam,先把讀值送到序列埠,建立正常範圍或基準值。
  3. 依題目「加入第二組錯開的光中斷,利用先後順序判斷旋轉方向。」加入比較、分類、累計或時間判斷;門檻要用實測資料決定,不要直接猜一個數字。
  4. 用至少三種不同情境測試,記錄輸入、程式判斷與輸出結果,再修正門檻或取樣間隔。
完成檢核:完成後應能指出:哪一個積木取得資料、哪一段負責判斷或換算、先把資料整理成可觀察的序列埠或表格結果是否在所有測試情境都正確反應。
教師快速檢核4 POINT CHECK
  • 能說明遮光如何轉成數位事件。
  • 能依實測結果設定 ACTIVE_LEVEL。
  • 能避免同一段遮光造成重複計數。
09 / EVIDENCE資料來源與版本展開查看 +
官方教學
Gravity: ITR9608 Infrared Light Photo InterrupterDFRobot

確認 940 nm、數位輸出、5 mm 間隙與計數/轉速應用。

桃園版 Blockly
桃園版 Blockly 光中斷積木桃園版 Blockly

對照 playrobot_ir_breakbeam 的 PIN 與 ACTIVE_LEVEL 欄位。

LOCAL
LAST REVIEWED / 2026-08-13

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

返回教學庫 →