OpenHRStrap: ทำสายคาดอก Heart Rate ด้วย ESP32

สายคาดอก Heart Rate ดูเหมือนอุปกรณ์ที่ทำหน้าที่แค่ส่งเลข BPM ไปมือถือ แต่ก่อนจะได้ตัวเลขนั้น ระบบต้องเริ่มจากสัญญาณไฟฟ้าขนาดเล็กบนร่างกาย ผ่านวงจร ECG, กรอง Noise, หา R-peak และแปลงช่วงห่างระหว่าง Heartbeat ให้กลายเป็น Heart Rate ที่ส่งผ่าน Bluetooth ได้

OpenHRStrap เป็น Prototype แบบ Open Source ที่พยายามทำ Flow ทั้งหมดนี้ด้วย XIAO ESP32 S3 และ AD8232 พร้อมใช้ Pan-Tompkins Algorithm สำหรับตรวจหา QRS / R-peaks และส่ง Heart Rate ผ่าน BLE ในรูปแบบที่ Smartphone App สามารถมองเห็นเป็น Heart Rate Device ได้

สำคัญ: OpenHRStrap เป็น Project สำหรับการศึกษา ทดลอง และงาน Hobby เท่านั้น ผู้สร้างระบุชัดว่าไม่ใช่ Medical Device, ไม่ได้รับ Certification และห้ามใช้สำหรับ Diagnosis, Monitoring Medical Conditions หรือ Health-critical Applications

OpenHRStrap V1 สายคาดอกวัด Heart Rate แบบ DIY ที่ใช้ ESP32
OpenHRStrap V1 — Prototype สายคาดอก Heart Rate แบบ Open Source ที่ใช้ ESP32 และ ECG Front End

Key Takeaways

  • OpenHRStrap เป็น Open-source DIY Chest Strap Heart-rate Tracker
  • V1 ใช้ XIAO ESP32 S3 เป็น MCU
  • Analog Front End ใช้ AD8232 ECG Module
  • ผู้สร้างเพิ่ม Reference Electrode ให้ Commercial Chest Strap
  • Enclosure ต้นฉบับใช้ PLA และ TPU
  • Power Source ที่ผู้สร้างระบุคือ 1S Li-ion Cell + Boost Converter ไป 5V
  • Heart Rate Detection ใช้แนวคิด Pan-Tompkins Algorithm
  • Pipeline หลักคือ Band-pass → Derivative → Squaring → Moving Window Integration
  • Algorithm วิเคราะห์ทั้ง FILT Peaks และ INT Peaks
  • มี Adaptive Threshold ผ่าน SPK, NPK, TH1 และ TH2
  • Search-back ถูกกระตุ้นเมื่อไม่มี R-peak นานกว่า 166% ของ RR Average ตาม README
  • Current ESP32 Firmware ใช้ Sample Rate 200 Hz
  • Current Firmware ตั้ง ADC Resolution เป็น 12-bit
  • ECG Input ใน Firmware ปัจจุบันใช้ D0
  • BLE ใช้ Heart Rate Service UUID 180D
  • Heart Rate Measurement Characteristic ใช้ 2A37
  • Repo มี BLE Test Code ที่ส่ง Fake BPM 50→60→50 เพื่อทดสอบ BLE โดยเฉพาะ
  • Main Tracker Firmware คำนวณ BPM จาก R-peak / RR Interval แล้วจึงส่ง BLE
  • Static-data Pan-Tompkins Test ให้ผลดีตามผู้สร้าง แต่ Real-time Detection ขณะวิ่งยังเป็น WIP
  • V1 Running Test 5K พบว่าข้อมูลจาก DIY Device ยังแตกต่างจาก Smartwatch ในหลายช่วง

OpenHRStrap คืออะไร?

เป้าหมายของ V1 คือสร้าง Module ที่สามารถติดกับ Commercial Chest Strap แล้วทำงานใกล้เคียงแนวคิดของ Heart-rate Chest Strap ทั่วไป:

  1. รับ Biosignal จาก Electrode
  2. ประมวลผล ECG
  3. ตรวจหา Heartbeat
  4. คำนวณ Heart Rate
  5. ส่ง BPM ไป Smartphone ผ่าน BLE
Electrode บน Chest Strap
↓
AD8232 ECG Module
↓
XIAO ESP32 S3
↓
Signal Filtering
↓
R-peak Detection
↓
RR Interval → BPM
↓
Bluetooth Low Energy

จุดที่ทำให้ Project นี้น่าสนใจ: ผู้สร้างไม่ได้หยุดแค่การอ่าน Analog Signal แต่พยายามทำตั้งแต่ Signal Processing ไปจนถึง BLE Heart Rate Device ในระบบเดียว

Hardware ของ OpenHRStrap V1

Schematic ของ OpenHRStrap V1 ที่ใช้ ESP32 และ AD8232
Schematic V1 จาก Official Repository แสดง Hardware Architecture ของ OpenHRStrap
ส่วนประกอบ ข้อมูลที่ Source ระบุ
MCU XIAO ESP32 S3
Analog Front End AD8232 ECG Module
Sensor Interface Electrodes บน Chest Strap
Reference Electrode ผู้สร้างเพิ่ม Button อีกหนึ่งจุดด้านหลัง Strap
Interface กับ Strap Steel Push Buttons ที่ต่อสายเข้ากับตัว Circuit
Enclosure Material PLA + TPU
Power Source 1S Li-ion Cell ที่ผู้สร้างนำกลับมาใช้
Power Conversion Boost Converter Step-up ไป 5V ตามคำอธิบายใน README
แบบร่าง Device Design ของ OpenHRStrap
Drawing ของ Device Design ที่ผู้สร้างใช้วางแนวคิดการประกอบ OpenHRStrap

Source ไม่ได้ให้รายละเอียด Battery ครบ: ไม่มี Battery Capacity, Runtime, Charging Current, Charge Controller, Protection Circuit หรือขั้นตอนชาร์จ จึงไม่ควรสร้าง Battery Wiring หรือ Charging Procedure เพิ่มเอง

แม้ Enclosure จะใช้ PLA และ TPU แต่ Repository ที่ตรวจไม่มี STL/CAD สำหรับพิมพ์ตาม: Source ไม่ได้ให้ Layer Height, Infill, Nozzle, Support หรือ Printing Temperature

จาก ECG Signal ไปเป็น Heart Rate ไม่ได้มีแค่คำสั่งเดียว

สัญญาณที่ออกจาก ECG Front End ยังไม่ใช่ตัวเลข BPM ที่จะส่งไปมือถือได้ทันที

ต้องผ่าน Signal-processing Pipeline เพื่อทำให้ลักษณะของ QRS Complex และ R-peaks ชัดพอสำหรับ Detection Logic

Raw ECG
↓
Band-pass Filtering
↓
Derivative
↓
Squaring
↓
Moving Window Integration
↓
Peak Detection
↓
R-peak Classification
↓
RR Interval
↓
Heart Rate

Pan-Tompkins ทำงานอย่างไร?

แผนภาพ Pan-Tompkins Algorithm ที่ใช้ใน OpenHRStrap
Drawing จากผู้สร้าง อธิบาย Flow ของ Pan-Tompkins ตั้งแต่ Filtering ไปจนถึง R-peak Classification

ผู้สร้างเลือกใช้ Pan-Tompkins ซึ่งมาจาก Paper “A Real-Time QRS Detection Algorithm” โดย Jiapu Pan และ Willis J. Tompkins ในปี 1985

Algorithm ติดตามค่าหลักหลายตัว เช่น:

  • SPK — Running Estimate ของ Signal Peak
  • NPK — Running Estimate ของ Noise Peak
  • TH1 — Threshold หลักสำหรับ Peak Detection
  • TH2 — Threshold ที่สอง ซึ่ง README อธิบายโดยทั่วไปว่าใช้ประมาณ TH1 / 2

Parameter เหล่านี้มี Variant สำหรับทั้ง Filtered Signal และ Integrated Signal

INT Peaks กับ FILT Peaks

Source แยก Peak ออกเป็นสองกลุ่ม:

  • FILT Peaks — Peak จาก Band-pass Filtered Signal
  • INT Peaks — Peak จาก Signal หลัง Processing จนถึง Moving Window Integration

Logic จะเริ่มพิจารณา INT Peak ที่ผ่าน Threshold แล้วค้นหา FILT Peak ที่สอดคล้องกันภายในช่วงเวลาใกล้เคียง ก่อน Classify เป็น R-peak

Search-back เมื่ออาจพลาด Heartbeat

README ระบุว่า หากไม่มี R-peak ถูก Classify เป็นเวลามากกว่า 166% ของ RR Average Distance Algorithm จะเริ่ม Search-back และใช้ Threshold ที่ต่ำกว่า เพื่อหา Peak ที่อาจถูก Noise ทำให้พลาด

เริ่มจาก Raw ECG ก่อน Filtering

Raw ECG signal ที่บันทึกจาก OpenHRStrap
Full ECG Signal ที่ผู้สร้างใช้เป็น Dataset เพื่อทดสอบ Signal Processing และ Pan-Tompkins

ก่อนทำ Filter ผู้สร้างเริ่มจากดู Raw Signal และเลือก Segment บางช่วง มาใช้ติดตามว่าแต่ละ Processing Stage เปลี่ยนรูป Signal อย่างไร

ช่วงตัวอย่างของ Raw ECG signal สำหรับวิเคราะห์แต่ละ filter
ECG Segment ที่ถูกใช้เปรียบเทียบผลของ Filter Stage ต่อ ๆ ไป

Band-pass Filter: ลดสิ่งที่ไม่ต้องการก่อนหา Peak

ECG signal หลังผ่าน band-pass filter
Signal หลัง Band-pass Filtering ซึ่งเป็นหนึ่งใน Signal ที่ใช้หา FILT Peaks

README ระบุว่า เพื่อให้ตาม Algorithm ใน Paper ผู้สร้าง Implement Band-pass ด้วยการใช้:

Low-pass Filter
↓
High-pass Filter
↓
Band-pass Signal
ECG signal หลังผ่าน low-pass filter
ผลหลัง Low-pass Stage ก่อนเข้าสู่ขั้นตอน High-pass เพื่อสร้าง Band-pass Signal

Derivative: เน้นการเปลี่ยนแปลงของ Signal

ECG signal หลังผ่าน derivative stage ของ Pan-Tompkins
Signal หลัง Derivative Stage ก่อนเข้าสู่ Squaring

หลัง Band-pass Signal ถูกส่งผ่าน Derivative Stage ตาม Filtering Pipeline ที่ผู้สร้างใช้ใน Pan-Tompkins Implementation

Squaring: ยกกำลัง Signal ก่อน Integration

ECG signal หลังขั้นตอน squaring
Signal หลัง Squaring ตาม Processing Pipeline ของ Project

หลัง Derivative Project ทำ Squaring ก่อนส่ง Signal เข้าสู่ Moving Window Integration

Moving Window Integration: Stage สุดท้ายก่อน Peak Detection

ECG signal หลัง moving window integration
Integrated Signal หลัง Moving Window Integration ซึ่งใช้สร้าง INT Peaks

หลัง Stage นี้ Signal พร้อมสำหรับการค้นหา Peak และเข้าสู่ Adaptive Threshold Logic

ใน Current ESP32 Firmware Source ตั้ง MWI_WIN = 30 และ Sample Rate 200 Hz โดย Comment ใน Code ระบุว่า Window นี้เท่ากับ 150 ms สำหรับ Implementation ปัจจุบัน

30 Samples / 150 ms เป็นค่าของ Current Firmware: ไม่ควรสรุปว่าเป็น Universal Setting สำหรับ Pan-Tompkins ทุก Implementation

Peak Detection: ต้องดูทั้ง INT และ FILT Signal

INT peaks ที่ตรวจพบจาก integrated ECG signal
INT Peaks ที่ตรวจจาก Integrated Signal ก่อนนำไปเทียบกับ Filtered Signal

ผู้สร้างอธิบายว่า Signal ที่ Noise ไม่สูงมาก สามารถมีทั้ง:

  • R-peaks
  • T waves
  • Noise peaks

จึงไม่สามารถถือว่า Peak ทุกจุด คือ Heartbeat ได้ทันที

FILT peaks ที่ตรวจจาก band-pass filtered ECG signal
FILT Peaks จาก Band-pass Filtered Signal ซึ่งใช้ประกอบการตัดสิน R-peak

ตัวอย่าง Full Pan-Tompkins Detection

ผลการตรวจ R peaks บน INT signal ด้วย Pan-Tompkins
ตัวอย่าง Detection บน INT Signal หลังใช้ Pan-Tompkins Logic
ผล Pan-Tompkins detection บน FILT signal
Detection Result บน FILT Signal
ผลตรวจ peak ตลอด dataset ฝั่ง integrated signal
ผล Peak Detection ตลอด Dataset ฝั่ง Integrated Signal
ผลตรวจ peak ตลอด dataset ฝั่ง filtered signal
ผล Peak Detection ตลอด Dataset ฝั่ง Filtered Signal

Detection ไม่ได้สมบูรณ์ 100%: ผู้สร้างระบุว่าใน Full Dataset สังเกตเห็น R-peak ที่พลาดหนึ่งจุดหลังช่วง 80+ วินาที และ 10 วินาทีแรกของ Dataset ไม่ได้ใช้ตรวจ Peak เพราะถูกใช้สำหรับ Initialization

ESP32 Firmware ทำ Real-time Processing อย่างไร?

Repository มี Main Tracker Firmware ที่อ่าน ECG ผ่าน ADC และทำ Filtering / Detection แบบ Per-sample

ค่าหลักใน Current Firmware

Setting ค่าจาก Current Firmware
Sampling Rate 200 Hz
ECG Input D0
ADC Resolution 12-bit
Buffer Length 1000
MWI Window 30 Samples
Current Detection Mode Mode 3
Rate-limit Constant 1.0 BPM ต่อวินาทีตาม Constant ใน Current Code
ESP32_HR_Tracker.ino — Current Constants
#define BAUDRATE        115200
#define ECG_PIN         D0
#define ADC_RES         12
#define SIM_USE         false

#define DETECTION_MODE  3
#define MAX_BPM_DELTA_PER_SEC  1.0f

#define SAMPLE_HZ       200
#define PERIOD_US       (1000000 / SAMPLE_HZ)
#define BUFFER_LEN      1000

const int MWI_WIN = 30;

Startup Period

Current Firmware แบ่งช่วงเริ่มต้นเป็น:

  • 0–5 วินาที: Filter Warm-up
  • 5–10 วินาที: Collect Initial Statistics เพื่อ Initialize Threshold
  • หลัง 10 วินาที: เริ่ม Detection / Heart-rate Logic

นี่เป็น Implementation Detail ของ Current Firmware: ไม่ควรถือว่า Warm-up 5 วินาที, Initialization 10 วินาที หรือ Detection Mode 3 เป็น Requirement ของ Pan-Tompkins ทุกระบบ

ความแตกต่างระหว่าง README Algorithm กับ Current Firmware

Current ESP32 Code มี Logic เพิ่มเติมจากคำอธิบาย Algorithm ระดับภาพรวม เช่น:

  • Refractory Period
  • QRS Width Validation
  • Detection Modes หลายแบบ
  • Rate-limited Output
  • Adaptive Threshold

ดังนั้นควรเรียกสิ่งเหล่านี้ว่า OpenHRStrap Firmware Implementation ไม่ใช่กฎมาตรฐานของ Original Pan-Tompkins ทั้งหมด

ส่ง Heart Rate ไปมือถือผ่าน BLE

OpenHRStrap ใช้ BLE Heart Rate Service เพื่อให้ Device Advertise ตัวเองในรูปแบบ Heart Rate Monitor

BLE Item ค่าจาก Official Code
Device Name ESP32 HRM
Heart Rate Service 180D
Heart Rate Measurement 2A37
Characteristic Notify
Advertising Appearance 832 ใน Source Code
Standard Heart Rate BLE UUIDs
#define HEART_RATE_SERVICE_UUID        "180D"
#define HEART_RATE_MEASUREMENT_UUID    "2A37"

BLEDevice::init("ESP32 HRM");

BLEService* hrService =
    pServer->createService(HEART_RATE_SERVICE_UUID);

pHeartRateChar = hrService->createCharacteristic(
    HEART_RATE_MEASUREMENT_UUID,
    BLECharacteristic::PROPERTY_NOTIFY
);

Main Tracker ส่ง BPM อย่างไร?

เมื่อ Main Firmware คำนวณ BPM ได้ และมี BLE Device เชื่อมต่ออยู่ จะสร้าง Heart Rate Measurement Packet แล้ว Notify

Main Tracker — Heart Rate Notification
uint8_t hrmPacket[2];
hrmPacket[0] = 0x00;
hrmPacket[1] = (uint8_t)bpm;

pHeartRateChar->setValue(hrmPacket, 2);
pHeartRateChar->notify();

ระวัง BLE Test File — มันส่ง Fake BPM

Repository มีไฟล์ XIAO_WorkingBLE_HR.ino ที่มีหน้าที่ทดสอบ BLE Heart Rate Device แยกจาก ECG Algorithm

Test Code เริ่มจาก:

bpm = 50

แล้วไล่ค่า:

50 → 60 → 50

ทุกประมาณ 1 วินาที เพื่อทดสอบว่า BLE Notification และ App Integration ทำงาน

ห้ามเอา BLE Demo มาปนกับ ECG Detection: File ทดสอบ BLE ใช้ Fake Heart Rate ส่วน ESP32_HR_Tracker.ino จึงเป็น Code ที่อ่าน ECG, ตรวจ Peak, คำนวณ BPM และส่งค่าที่คำนวณผ่าน BLE

ดู OpenHRStrap และ Pan-Tompkins ทำงานจริง

Video ของผู้สร้างอธิบายทั้ง Prototype และแนวคิด Pan-Tompkins ที่ใช้ใน Project

Real-world 5K Test: Prototype ยังมี Gap ที่ต้องแก้

ผู้สร้างนำ V1 ไปทดลองวิ่ง 5K พร้อมใส่ Smartwatch ที่ใช้ PPG เป็น Comparison Device

ข้อมูลจากทั้งสอง Device ถูกนำออกจาก Strava แล้ว Align ตาม Timestamp เพื่อดู Trend

สิ่งที่ผู้สร้างสังเกต

  • ช่วงเริ่มวิ่ง ทั้งสอง Signal ใกล้กันค่อนข้างดี
  • เมื่อ Heart Rate สูงขึ้น Gap เริ่มมากขึ้น
  • บางช่วงที่ Pace เปลี่ยน Signal กลับมาใกล้กัน
  • บางช่วงแตกต่างกันมาก
  • โดยรวม DIY Device มักแสดง Heart Rate ต่ำกว่า Smartwatch ใน Test นั้น

ยังสรุป Root Cause ไม่ได้: ผู้สร้างระบุว่า V1 ไม่มี Proper Raw Data Logging ระหว่าง Running Test จึงย้อนดูไม่ได้ว่า Raw ECG และ Algorithm ทำอะไรในช่วงที่ Heart Rate Diverge

Smartwatch ไม่ใช่ Medical Ground Truth: ผู้สร้างใช้ Smartwatch PPG เป็น Reference สำหรับ Comparison เท่านั้น และระบุเองว่าสัญญาณจาก Smartwatch ถูก Filter มาก

Static Data กับ Real-time Running ต้องแยกกัน

README Update ระบุว่า Pan-Tompkins Integration บน Static Data ทำงานได้ดีตามการทดสอบของผู้สร้าง

แต่:

Real-time Detection ระหว่างวิ่งยังเป็น Work in Progress

นี่เป็น Lesson สำคัญของ Project: Algorithm ที่ดูดีบน Recorded Dataset ยังต้องผ่าน Motion, Electrode Contact, Noise, Real-time Timing และ Data Logging ก่อนจะประเมิน Performance ในสถานการณ์จริงได้

V2 วางแผนแก้อะไรต่อ?

README ระบุว่า V2 อยู่ระหว่างพัฒนา และมีแนวทางหลักคือ:

  • Custom PCB
  • Upgraded AFE
  • Proper Data Logging

Data Logging มีความสำคัญโดยเฉพาะกับ Running Test เพราะช่วยให้ย้อนกลับไปดู Raw Signal และ Algorithm State ในช่วงที่ Heart Rate ผิดจากที่คาด

Source ไม่ได้ให้ Final V2 Schematic, Final AFE Part Number, Release Date, Performance หรือ Accuracy Target จึงไม่ควรเติมข้อมูลเหล่านี้เอง

สิ่งที่ Source ยืนยัน และสิ่งที่ยังห้ามเดา

Source ยืนยัน Source ไม่ได้ระบุ / ยังไม่ Validate
XIAO ESP32 S3 + AD8232 Clinical Accuracy
ECG-based Heart Rate Prototype Medical Certification
Static-data Pan-Tompkins Test Validated Real-time Running Accuracy
Current Firmware Sample Rate 200 Hz Universal Optimal Sample Rate
Current Firmware ECG Pin D0 Compatibility กับ Board Revision อื่น
Case ใช้ PLA + TPU STL / Print Settings
1S Li-ion + Boost to 5V Battery Capacity / Runtime / Charging Spec
BLE Heart Rate Service Compatibility กับทุก App / Phone
5K Running Comparison Root Cause ของ Divergence
Prototype / Hobby Project ใช้วินิจฉัยหรือ Monitor โรค

โปรเจกต์นี้มีหลายขั้น แนะนำอ่านต้นฉบับควบคู่กัน

OpenHRStrap มีทั้ง Hardware, Python Analysis, ESP32 Firmware, Pan-Tompkins Notebook และ BLE Test Code การอ่าน Repository ต้นฉบับ จะช่วยแยกได้ชัดว่า ส่วนไหนเป็น Algorithm Test, ส่วนไหนเป็น Main Firmware และส่วนไหนเป็น BLE Compatibility Test

FAQ: OpenHRStrap และ ESP32 Heart Rate Monitor

OpenHRStrap คืออะไร?

เป็น Open-source DIY Chest-strap Heart-rate Tracker ที่ผู้สร้างพัฒนาขึ้นเพื่อทดลอง ECG, Heart-rate Detection และ BLE บน ESP32

Project ใช้ ESP32 รุ่นไหน?

README ของ V1 ระบุ XIAO ESP32 S3

ใช้ ECG Module อะไร?

V1 ใช้ AD8232 ECG Module เป็น Analog Front End

ทำไม Chest Strap ต้องมี Reference Electrode เพิ่ม?

ผู้สร้างระบุว่า AD8232 Setup ทำให้ต้องมี Reference Electrode เพิ่ม จึงเย็บ Button เพิ่มที่ด้านหลัง Strap

Enclosure พิมพ์จากวัสดุอะไร?

Source ระบุ PLA และ TPU

Repository มี STL ให้พิมพ์ Case ตามหรือไม่?

จาก Repository ที่ตรวจ ไม่พบ STL / CAD Enclosure File มี Drawing และรูปประกอบ แต่ Source ไม่ได้ให้ Print Settings

Pan-Tompkins ใช้ทำอะไร?

Project ใช้สำหรับประมวลผล ECG และช่วยตรวจหา QRS / R-peaks ซึ่งนำไปใช้คำนวณ Heart Rate

Filtering Pipeline มีอะไรบ้าง?

README ระบุ Band-pass Filtering, Derivative, Squaring และ Moving Window Integration

INT Peak กับ FILT Peak ต่างกันอย่างไร?

FILT Peaks มาจาก Band-pass Filtered Signal ส่วน INT Peaks มาจาก Signal หลัง Processing จนถึง Moving Window Integration

Search-back ทำงานเมื่อไร?

README ระบุว่า Search-back ถูกใช้เมื่อไม่มี R-peak ถูก Classify นานกว่า 166% ของ RR Average Distance

Current ESP32 Firmware Sampling กี่ Hz?

Source Code ปัจจุบันกำหนดไว้ที่ 200 Hz

Current Firmware อ่าน ECG จาก Pin ไหน?

Source Code ปัจจุบันกำหนด ECG_PIN D0

OpenHRStrap ส่ง Heart Rate ผ่าน BLE อย่างไร?

Code ใช้ Heart Rate Service UUID 180D และ Heart Rate Measurement Characteristic 2A37 แบบ Notify

BLE Test Code ใช้ ECG จริงหรือไม่?

ไม่ File XIAO_WorkingBLE_HR.ino สร้าง Fake BPM ไล่จาก 50 ถึง 60 แล้วกลับไป 50 เพื่อทดสอบ BLE Heart Rate Service

Main Firmware ใช้ Fake BPM หรือไม่?

Main Tracker Firmware มี Logic อ่าน ECG, Filtering, Peak Detection, RR Interval และคำนวณ BPM ก่อนส่ง BLE

Real-time Detection ขณะวิ่งพร้อมใช้งานแล้วหรือยัง?

README Update ระบุว่ายังเป็น Work in Progress แม้ Static-data Integration จะให้ผลดีตามการทดสอบของผู้สร้าง

5K Running Test ได้ผลอย่างไร?

ช่วงเริ่มต้น OpenHRStrap และ Smartwatch มี Trend ใกล้กัน แต่เมื่อ Heart Rate สูงขึ้น Gap เพิ่มขึ้นในหลายช่วง และ DIY Device มักรายงานค่าต่ำกว่า Smartwatch ใน Test นั้น

OpenHRStrap แม่นเท่า Medical ECG หรือไม่?

Source ไม่ได้ให้ Clinical Accuracy, Sensitivity, Specificity หรือ Medical Validation และระบุชัดว่า Project ไม่ใช่ Medical Device

สามารถใช้ OpenHRStrap วินิจฉัยโรคได้ไหม?

ไม่ ผู้สร้างระบุชัดว่า Project นี้ไม่ควรใช้สำหรับ Diagnosis, Medical-condition Monitoring หรือ Health-critical Applications

V2 จะเพิ่มอะไร?

README ระบุแผน Custom PCB, upgraded AFE และ Proper Data Logging แต่ Source ยังไม่ได้ให้ Final V2 Specification

สรุป: คุณค่าของ OpenHRStrap อยู่ที่การเห็น Signal ทั้งเส้นทาง

OpenHRStrap ไม่ได้เป็นแค่ Project ที่ต่อ AD8232 เข้า ESP32 แล้วอ่านค่าจาก Analog Pin

สิ่งที่ทำให้มันน่าสนใจ คือการพา Signal ผ่านทั้งเส้นทาง:

Electrode
↓
ECG Front End
↓
Raw Signal
↓
Pan-Tompkins Processing
↓
R-peak
↓
RR Interval
↓
BPM
↓
BLE Heart Rate Device

ในขณะเดียวกัน Running Test ของ V1 ก็แสดงชัดว่า Algorithm ที่ดูดีบน Recorded Data ยังไม่เท่ากับระบบที่พร้อมใช้งาน ระหว่างการเคลื่อนไหวจริง

และนั่นทำให้แผนของ V2 อย่าง Proper Data Logging, Custom PCB และ AFE ใหม่ มีความสำคัญต่อการ Debug มากกว่าแค่การปรับเลข BPM ให้ดูสวยขึ้น

สำหรับ Maker: Project นี้เป็น Case Study ที่ดี ในการเรียนรู้ Analog Biosignal, Digital Signal Processing, Embedded Real-time Code และ BLE ภายใน Project เดียว โดยต้องรักษาขอบเขตว่าเป็นงานทดลอง ไม่ใช่อุปกรณ์ทางการแพทย์

References / แหล่งข้อมูลต้นฉบับ

กำลังทำ ESP32, Sensor หรือ Embedded Project?

Project แบบ OpenHRStrap ต้องมองทั้ง Development Board, Analog Sensor, Signal Processing, Power และ Wireless Communication ไปพร้อมกัน

ถ้ากำลังทำ ESP32, Biosignal Experiment, Sensor หรือ Embedded Project สามารถสอบถามทีม Globalbyte เรื่อง Development Board, Sensor Module และ Maker Accessories ที่เหมาะกับงานทดลองได้

บทความนี้ไม่ได้ยืนยันว่า XIAO ESP32 S3, AD8232 หรืออุปกรณ์รุ่นเดียวกับ Project มี Stock อยู่ที่ Globalbyte กรุณาสอบถามรุ่นและ Availability ก่อนสั่งซื้อ

อุปกรณ์และ Module ที่พูดถึงในบริบทนี้ ไม่ได้หมายความว่า Globalbyte รับรองให้ใช้งานทางการแพทย์

 

แท็ก


Blog posts