壓力監測 / Live
IDLE
未錄製
閒置中 — 等待 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 raw | HR raw | Resp raw | BPM | RPM | Score |
|---|
數據中心 / Analysis
尚無數據。請先進行測量,或從上方匯入 CSV 檔案。
靜息基準值(由 ESP32 校正後傳送)
尚無基準值
全程緊張指數 / Full-Session Stress Index
來源:ESP32 即時計算值 | 紅虛線 = 緊張閾值 60
■ 0–30 放鬆
■ 30–60 輕度
■ 60–80 中度緊張
■ 80+ 高度緊張
心率 HR raw(完整紀錄)
膚電 GSR raw(完整紀錄)
呼吸 Resp raw(完整紀錄)
異常區間偵測
基準線範圍
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 次量測錄影 · 點擊緊張時刻直接跳轉
尚無錄影資料
開始量測並啟用鏡頭後,錄影將自動儲存在此
開始量測並啟用鏡頭後,錄影將自動儲存在此
實驗手冊 / Manual
實驗範本(可複製)
【實驗標題】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
參數設定 / Settings
壓力指數權重(自動正規化為總和 1.00)
HR 權重
心率佔壓力指數比例
GSR 權重
膚電佔壓力指數比例
Resp 權重
呼吸佔壓力指數比例
總和:1.00 ✓
心率參數
restHR 自動由校正基準值帶入(BASELINE / 60 s)
公式:S_HR = (BPM − restHR) / (restHR × HR靈敏度%) × 100
公式:S_HR = (BPM − restHR) / (restHR × HR靈敏度%) × 100
HR 靈敏度 (%)
高於基準幾 % → S_HR = 100(例:50 = 超出基準 50% 即滿分)
Apple Watch 心率校正
若發現 ESP32 測得的 BPM 與 Apple Watch 有誤差,可輸入 Apple Watch 的實際心率來計算校正係數。
使用時機:校正完成後,同時查看 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
stressResp = calmResp × 壓力倍率(預設 1.25)
S_Resp = (RPM − calmResp) / (stressResp − calmResp) × 100
Resp 壓力倍率
stressResp = 基準 × 此值(達到此呼吸率 → S_Resp = 100)
GSR 參數
感測器輸出方向
皮膚出汗時導電性上升。但 ADC 原始值是上升還是下降,取決於你的電路接法:
・電阻分壓(R上/皮膚下):出汗 → 電阻降低 → ADC 上升
・電阻分壓(皮膚上/R下):出汗 → 電阻降低 → ADC 下降
・導電橡膠帶:拉伸/壓縮時電阻改變,方向依接法而定
不確定時:校正後放鬆→緊張,觀察 ADC 是升還是降。
皮膚出汗時導電性上升。但 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:二階帶通濾波器(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 (報告頁顯示)