閒置中 — 等待 ESP32 操作
elapsed
00:00
phase
等待校正...
data points
0
sample rate
-- Hz
calib time
--s
綜合原始數據
HR
GSR
Resp
校正區間
當前緊張指數(由 ESP32 計算)
--
--
0255075100
Score = S_HR×0.45 + S_GSR×0.30 + S_RR×0.25(由 ESP32 計算後回傳)
Heart Rate BPM
current BPM
--
raw: --
baseline avg
--
raw: --
基準值當前均值最大最小點數波峰
---- ---- ----
GSR raw ADC
current
--
change: --
baseline
--
threshold +15%
基準值當前均值最大最小點數觸發
---- ---- --0
Respiration RPM
current RPM
--
raw: --
baseline avg
--
raw: --
基準值當前均值最大最小點數波峰
---- ---- ----
原始數據紀錄 0 rows
Time (s)GSR rawHR rawResp rawBPMRPMScore
尚無數據。請先進行測量,或從上方匯入 CSV 檔案。
基準線範圍 s s
HR 權重 0.45 GSR 權重 0.30 RR 權重 0.25
進階圖表
滾輪縮放 · 拖拉平移時間軸
統計摘要
指標基準值均值最大最小標準差波峰數BPM/RPM
數據比較 — 可匯入多筆 CSV
輔助線 @t(s):
統計摘要比較
檔案時長(s) Score均值Score最大事件(≥60) HR均值GSR均值Resp均值
壓力指數比較
HR raw 比較
GSR raw 比較
Resp raw 比較
使用瀏覽器「另存為 PDF」匯出 A4 報告
ESP32 BioMonitor — Analysis Report
生理訊號壓力監測報告
靜息基準值 / Baseline
緊張指數統計 / Stress Statistics
公式:
全程緊張指數走勢 / Full-session Stress Index Timeline
紅色虛線 = 緊張閾值 60 | 橘色區塊 = 偵測到緊張事件
0–30 放鬆 30–60 輕度緊張 60–80 中度緊張 80–100 高度緊張
心率 HR raw
膚電 GSR raw
呼吸 Resp raw
緊張事件偵測 / Stress Events (Score ≥ 60)
ESP32 BioMonitor — Auto-generated Report
錄影回放
自動保存最近 5 次量測錄影 · 點擊緊張時刻直接跳轉
尚無錄影資料
開始量測並啟用鏡頭後,錄影將自動儲存在此
實驗範本(可複製)
【實驗標題】ESP32 生理訊號壓力監測實驗 【副標題】以 BLE 無線傳輸進行壓力指數即時監測 【實驗目的】 本實驗透過 ESP32 微控制器讀取心率(HR)、膚電(GSR)及呼吸(Resp)三項生理訊號,以波峰偵測演算法即時計算心率(BPM)與呼吸率(RPM),並依據個人基準線動態計算壓力指數(0–100 分)。 【實驗器材】 - ESP32-WROOM 開發板 × 1 - 心率感測模組(PPG 光電容積描記)× 1 - 膚電感測模組(GSR)× 1 - 呼吸感測模組(導電橡皮筋應變規)× 1 - LCD I2C 1602 顯示模組 × 1 - 輕觸按鈕 × 2,LED × 1 【實驗步驟】 1. 確認裝置通電,LCD 顯示 Waiting... 2. 點擊網頁「BLE 連線」,配對 ESP32_Biometric_System。 3. 點擊「校正」,靜息狀態等待校正秒數(預設 10 秒)完成基準線採集。 ESP32 自動計算 baseGSR、baseHR、baseResp 並回傳前端。 4. 校正完成後自動進入量測,或手動點擊「開始測量」。 5. 進行實驗刺激(如閱讀複雜題目、認知負荷任務)。 6. 完成後點擊「停止並分析」,系統自動切換至數據中心頁面。 7. 確認異常區間偵測結果,匯出 CSV 留存。 【注意事項】 - 校正期間受試者需保持靜息狀態,避免說話或移動。 - GSR 為反向指標,導電性上升(緊張)時 ADC 數值下降。 - 壓力分數由 ESP32 即時計算後回傳,確保基準線精確性。 - 若中途需暫停,可按 Button 1 或網頁「暫停接收」按鈕。
演算法說明
1. 基準線採集
校正階段每秒讀取一次 ADC 原始值,累加後平均,存為基準值。
baseGSR = sum(gsrRaw[0..N-1]) / N baseHR = sum(hrRaw[0..N-1]) / N baseResp = sum(respRaw[0..N-1])/ N
2. 波峰偵測(上升沿觸發)
動態閾值 = 基準值 + 偏移量。訊號由低於閾值上升至超過閾值時記錄一次波峰,計算兩波峰間隔換算頻率。
BPM = 60000 / interval_ms (合理範圍 300–2000 ms) RPM = 60000 / interval_ms (合理範圍 1500–10000 ms)
3. 壓力得分
S_GSR = constrain((baseGSR - gsrRaw) / baseGSR / (gsr_thresh/100) * 100, 0, 100) S_HR = constrain((BPM - restHR) / (restHR * hr_sens/100) * 100, 0, 100) ← restHR 自動由 BASELINE 帶入 S_Resp = constrain((RPM - calmResp) / (stressResp - calmResp) * 100, 0, 100) ← calmResp=BASELINE,stressResp=calmResp×1.20 Score = S_HR*0.45 + S_GSR*0.30 + S_Resp*0.25 ← 預設權重(可在參數設定頁調整)
4. 操作流程
步驟觸發系統行為
1. 待機通電LCD: Waiting...,等待 BTN2 或 BLE CALIB
2. 校正BTN2 / BLE CALIB採集 N 秒基準線,完成後回傳 BASELINE 封包
3. 量測自動 / BLE START每秒發送 DATA 封包,波峰偵測持續執行
4. 暫停BTN1 / BLE PAUSE停止 BLE 發送,背景波峰偵測繼續
5. 停止BTN2 / BLE STOP發送 END 封包,前端自動跳轉數據中心
5. BLE 封包格式
DATA,<sec>,<gsrRaw>,<hrRaw>,<respRaw>,<BPM>,<RPM>,<Score> BASELINE,<baseGSR>,<baseHR>,<baseResp> STATUS,<CALIBRATING|RUNNING|PAUSED|STOPPED> END
壓力指數權重(自動正規化為總和 1.00)
HR 權重
心率佔壓力指數比例
GSR 權重
膚電佔壓力指數比例
Resp 權重
呼吸佔壓力指數比例
總和:1.00 ✓
心率參數
restHR 自動由校正基準值帶入(BASELINE / 60 s)
公式:S_HR = (BPM − restHR) / (restHR × HR靈敏度%) × 100
HR 靈敏度 (%)
高於基準幾 % → S_HR = 100(例:50 = 超出基準 50% 即滿分)
Apple Watch 心率校正
若發現 ESP32 測得的 BPM 與 Apple Watch 有誤差,可輸入 Apple Watch 的實際心率來計算校正係數。
使用時機:校正完成後,同時查看 Apple Watch 的心率,輸入進行校正。
Apple Watch BPM
在 Apple Watch 上看到的即時心率(例如:75)
呼吸參數
calmResp = BASELINE 基準呼吸率(自動帶入)
stressResp = calmResp × 壓力倍率(預設 1.25)
S_Resp = (RPM − calmResp) / (stressResp − calmResp) × 100
Resp 壓力倍率
stressResp = 基準 × 此值(達到此呼吸率 → S_Resp = 100)
GSR 參數
感測器輸出方向
皮膚出汗時導電性上升。但 ADC 原始值是上升還是下降,取決於你的電路接法:
・電阻分壓(R上/皮膚下):出汗 → 電阻降低 → ADC 上升
・電阻分壓(皮膚上/R下):出汗 → 電阻降低 → ADC 下降
・導電橡膠帶:拉伸/壓縮時電阻改變,方向依接法而定
不確定時:校正後放鬆→緊張,觀察 ADC 是升還是降。
壓力時 ADC 方向
出汗(皮膚導電上升)時,感測器 raw 值往哪個方向走
目前公式:S_GSR = (gsrRaw − baseGSR) / (baseGSR × 20%) × 100(ADC 上升 = 壓力上升)
GSR 緊張閾值 (%)
ADC 相對基準變化此百分比 → S_GSR = 100
🆕 進階濾波功能(v26新增)
Butterworth 濾波器 + FFT 頻譜驗證
Butterworth:二階帶通濾波器(0.7-3.5Hz),保留心率頻段,抑制高頻雜訊
FFT 驗證:快速傅立葉變換,檢測並校正諧波誤判
⚠️ 實驗功能:可能影響效能,建議資料穩定後再啟用
啟用進階濾波
開啟後將套用 Butterworth 濾波和 FFT 驗證於心率訊號
系統參數
校正時間 (秒)
基準線採集持續時間(在 ESP32 按 BTN2 開始)
封包傳入速率
每秒資料封包數(packets/s)。ESP32 最高約 50 Hz,建議 30。
傳入速率 (Hz)
ESP32 每秒發送封包次數(預設 30)
緊張判定閾值預覽
S_HR = (BPM − restHR) / (restHR × 40%) × 100  → 100 當 BPM 超出靜息 40%(靜息70 → 滿分98 BPM)
S_GSR = (baseGSR − gsrRaw) / (baseGSR × 0.20) × 100  → 100 當感測器值相對基準下降 20%(電導上升)
S_Resp = (RPM − calmResp) / (calmResp × (1.20 − 1)) × 100  → 100 當 RPM 達到基準 × 1.20
緊張指數 Score = S_HR×0.45 + S_GSR×0.30 + S_Resp×0.25
LTI = Peak×0.4 + Avg×0.4 + 事件密度×0.2  (報告頁顯示)
未連線
IDLE
00:00
等待開始
--
BPM
--
GSR
--
RPM
--
壓力
0
選擇連線方式後按「開始校正」
BLE
USB
Demo
Heart Rate — raw
GSR — raw
Respiration — raw