TY桃園智造感測器教學庫
感測器教學庫/生醫感測器/MAX30101 光學/心率血氧
BATCH 03 · 已完成

SENSOR / MAX30101

MAX30101 光學/心率感測器用紅光、紅外線與綠光觀察光學脈搏資料

MAX30101 以 I2C 輸出紅光、紅外線、綠光與晶片溫度的原始資料。本課先把它當成光學資料感測器,練習手指遮光、更新資料與比較不同 LED 通道,不直接宣稱醫療量測結果。

入門45 分鐘Arduino UNO(I2C,SparkFun MAX3010x Library)
READYDATA
SIGNAL STABLE
MAX30101 光學/心率感測
VCC/VIN / 依模組規格GND / GND
01 / PREPARE

課前準備

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

學習目標

  1. 理解光學感測器以反射光變化觀察脈搏的概念。
  2. 使用固定 0x57 位址初始化並更新 MAX30101。
  3. 比較紅光、紅外線、綠光原始值與晶片溫度。

材料清單

1 個MAX30101 breakout確認模組是否含穩壓與邏輯電平轉換。
1 組Arduino UNO 與 I2C 線材UNO 使用 A4/SDA、A5/SCL。
1 個紙片或指尖只做教學觀察,不作醫療診斷。
適用對象國中生活科技與 Arduino 初學者
建議課時45 分鐘
示範平台Arduino UNO(I2C,SparkFun MAX3010x Library)
02 / HOW IT WORKS

光照到皮膚,反射量會隨血流改變

MAX30101 內含多色 LED 與光電接收器。手指放上去後,紅光、紅外線與綠光通道會收到隨時間變化的反射訊號;原始值要先濾波與校準,不能直接當作醫療數值。

01

建立 I2C

接妥 3.3V、GND、SDA、SCL,位址固定為 0x57。

02

啟動 LED

由 MAX3010x 函式庫設定 LED 與取樣參數。

03

比較波形

以固定壓力放置手指,觀察紅光與紅外線原始值。

DISTANCE FORMULAopticalSample = red / ir / green raw count

原始 count 不是心率或血氧;要做可靠估算必須進行訊號處理、校準與驗證。

03 / WIRING

接線配置

MAX30101 使用 I2C;供電與邏輯電平請以所用 breakout 的規格為準。

MODULEMAX30101 光學/心率感測VCC/VINGNDSDASCL
CONTROLArduino UNO(I2C,SparkFun MAX3010x Library)依模組規格GNDA4 / SDAA5 / SCL
模組腳位接到控制板訊號方向檢查重點
VCC/VIN依模組規格電源確認模組是否接受 UNO 的 5V。
GNDGND地線I2C 裝置要共地。
SDAA4 / SDAI2C 資料UNO SDA。
SCLA5 / SCLI2C 時脈UNO SCL。
✓ WIRING ROWS ALIGNED

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

04 / BLOCK GUIDE

本課會用到的積木

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

MAX30101 初始化I2C_ADDR 0x57
BLOCK 01playrobot_max30101_setup

MAX30101 初始化

設定 I2C 位址 0x57 並啟動感測器。

位置:感測器 → 生醫感測器 → MAX30101 光學/心率血氧
I2C_ADDR
0x57依桃園版 Blockly 的固定位址選項設定。
MAX30101 更新資料
BLOCK 02playrobot_max30101_update

MAX30101 更新資料

讀取一筆新的感測資料。

位置:感測器 → 生醫感測器 → MAX30101 光學/心率血氧
紅光原始值
BLOCK 03playrobot_max30101_red

紅光原始值

讀取紅光 LED 通道。

位置:感測器 → 生醫感測器 → MAX30101 光學/心率血氧
紅外線原始值
BLOCK 04playrobot_max30101_ir

紅外線原始值

讀取紅外線 LED 通道。

位置:感測器 → 生醫感測器 → MAX30101 光學/心率血氧
綠光原始值
BLOCK 05playrobot_max30101_green

綠光原始值

讀取綠光 LED 通道。

位置:感測器 → 生醫感測器 → MAX30101 光學/心率血氧
晶片溫度(°C)
BLOCK 06playrobot_max30101_temperature

晶片溫度(°C)

讀取感測晶片內部溫度。

位置:感測器 → 生醫感測器 → MAX30101 光學/心率血氧
MAX30101 已初始化
BLOCK 07playrobot_max30101_initialized

MAX30101 已初始化

確認初始化是否成功。

位置:感測器 → 生醫感測器 → MAX30101 光學/心率血氧
05 / BLOCK EXAMPLE

觀察手指遮光造成的光學變化

每次更新資料後列印紅光與紅外線原始值,觀察手指放上與移開的差異。

桃園版 BLOCKLY / WORKSPACE● BLOCK STYLE
Arduino 程式
初始化
MAX30101 初始化I2C_ADDR 0x57playrobot_max30101_setup
重複執行arduino_delay
MAX30101 更新資料playrobot_max30101_update
MAX30101 紅光原始值playrobot_max30101_red
序列埠列印arduino_serial_print
重複執行
MAX30101 初始化I2C_ADDR 0x57playrobot_max30101_setup
重複執行arduino_delay
MAX30101 更新資料playrobot_max30101_update
MAX30101 紅光原始值playrobot_max30101_red
序列埠列印arduino_serial_print
X / 010Y / 024

組合步驟

01
先看環境值

不放手指,記錄紅光與紅外線值。

為什麼:了解背景光與感測器零點。
02
固定手指

輕放指尖,不要壓迫或晃動。

為什麼:壓力與移動都會改變反射光。
03
比較通道

列印 red、ir、green 三組原始資料。

為什麼:不同波長對皮膚與血流的反應不同。
積木使用重點先辨認積木是「回傳值」還是「執行動作」,再放到正確的拼接位置。

playrobot_max30101_setup設定 I2C 位址 0x57 並啟動感測器。

預期觀察結果

測試情境可能讀值判讀
手指放上感測器原始值出現變化光路由環境光轉為皮膚反射光。
手指晃動數值波動變大動作雜訊會影響光學量測。
06 / CODE EXPLAINED

範例程式逐段解說

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

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

MAX30105 sensor;

void setup() {
  Serial.begin(115200);
  Wire.begin();
  if (sensor.begin(Wire, I2C_SPEED_STANDARD, 0x57)) sensor.setup();
}

void loop() {
  sensor.check();
  Serial.print(sensor.getRed());
  Serial.print(",");
  Serial.println(sensor.getIR());
  delay(100);
}
SELF STUDY GUIDE先看哪一段、為什麼?
01
先載入函式庫與建立裝置#include <Wire.h>

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

02
把程式腳位對回接線表// VCC/VIN → 依模組規格、GND → GND、SDA → A4 / SDA、SCL → A5 / SCL

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

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

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

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

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

05
輸出結果並控制取樣速度if (sensor.begin(Wire, I2C_SPEED_STANDARD, 0x57)) sensor.setup();

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

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

常見問題與故障排除

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

ERR 01

找不到感測器

先檢查:確認 0x57、供電與 SDA/SCL。

處理方式:使用 I2C 掃描器,並依模組規格改用 3.3V。

ERR 02

數值飽和

先檢查:手指是否壓太緊或 LED 電流過高。

處理方式:先輕放指尖,調整函式庫的 LED 電流與取樣設定。

ERR 03

資料忽高忽低

先檢查:手指是否移動、環境光是否直射。

處理方式:固定模組與手指,並遮蔽強烈環境光。

08 / NEXT MISSION

延伸挑戰

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

L1

光學值記錄器

題目:把 red 與 ir 每 100 ms 列印到序列埠。

解題方向

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

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

穩定度比較

題目:比較輕放與用力按壓時的波動。

解題方向

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

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

簡易波形圖

題目:把資料送到序列繪圖器觀察週期變化。

解題方向

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

  1. 先匯入本頁 Blockly 範例,確認感測器在沒有加入挑戰功能時能穩定讀值。
  2. 保留 playrobot_max30101_setup,先把讀值送到序列埠,建立正常範圍或基準值。
  3. 依題目「把資料送到序列繪圖器觀察週期變化。」加入比較、分類、累計或時間判斷;門檻要用實測資料決定,不要直接猜一個數字。
  4. 用至少三種不同情境測試,記錄輸入、程式判斷與輸出結果,再修正門檻或取樣間隔。
完成檢核:完成後應能指出:哪一個積木取得資料、哪一段負責判斷或換算、先把資料整理成可觀察的序列埠或表格結果是否在所有測試情境都正確反應。
教師快速檢核4 POINT CHECK
  • 能說明原始光學資料與醫療數值的差別。
  • 能正確使用 0x57 I2C 初始化與更新。
  • 能提出降低動作與環境光雜訊的方法。
09 / EVIDENCE資料來源與版本展開查看 +
官方資料
MAX30101 product and datasheetAnalog Devices

確認紅光、紅外線、綠光 LED 與光電接收架構。

桃園版 Blockly
桃園版 Blockly MAX30101 積木桃園版 Blockly

確認 setup、update、red、ir、green、temperature 積木。

LOCAL
LAST REVIEWED / 2026-08-13

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

返回教學庫 →