โฉมหน้าโปรเจกต์ Wearable อัจฉริยะที่ช่วยตรวจจับชีพจร ออกซิเจนในเลือด และวิเคราะห์การเคลื่อนไหว
สวัสดีชาว Maker สายรักสุขภาพทุกคนครับ! 🏃♂️ ยุคนี้ใครๆ ก็ใส่สมาร์ทวอทช์เพื่อแทร็กการออกกำลังกายและดูอัตราการเต้นของหัวใจกันทั้งนั้น แต่ในฐานะที่เราเป็นสายหาทำ (Maker) จะไปซื้อของสำเร็จรูปมาใส่ก็กระไรอยู่ มาลองสร้างอุปกรณ์สวมใส่ (Wearable Assistant) ของตัวเองกันดีกว่าครับ!
วันนี้เราจะพาไปดูโปรเจกต์สุดว้าวจาก DreamLab ที่จับเอาบอร์ดเทพอย่าง nRF5340-DK มาจับคู่กับเซนเซอร์การแพทย์ เพื่อสร้าง "ผู้ช่วยเฝ้าระวังสุขภาพและการเคลื่อนไหว" ที่สามารถวัดชีพจร, ค่าออกซิเจนในเลือด (SpO2) และมีระบบตรวจจับการล้ม (Fall Detection) ส่งแจ้งเตือนเข้ามือถือผ่าน Bluetooth ได้แบบเรียลไทม์เลยครับ!
แกะกล่องอุปกรณ์: สมองกลและเซนเซอร์คู่ใจ 🧠
โปรเจกต์นี้เป็นการนำอุปกรณ์อิเล็กทรอนิกส์ที่มีขายทั่วไปตามท้องตลาดมาประกอบร่างกันครับ ประกอบด้วย 3 ฮาร์ดแวร์หลัก:
-
สมองกล (nRF5340-DK): บอร์ดพัฒนาสุดทรงพลังจากค่าย Nordic ที่มาพร้อมซีพียู Dual-core ARM Cortex-M33 มี Bluetooth 5.4 ในตัว และกินไฟน้อยมากๆ (Low power consumption) เหมาะกับงาน Wearable สุดๆ
-
เซนเซอร์สุขภาพ (MAX30100): ตัวนี้คือพระเอกของเราครับ มันคือเซนเซอร์ Pulse Oximeter ที่ใช้ไฟ LED สีแดงและอินฟราเรด ส่องทะลุผิวหนังเพื่อวัดชีพจร (BPM) และค่าออกซิเจนในเลือด (SpO2)
-
เซนเซอร์ตรวจจับการเคลื่อนไหว (MPU6050): เซนเซอร์ 6 แกน (Accelerometer + Gyroscope) สำหรับคอยตรวจจับว่าเรากำลังเดิน วิ่ง หรือ "ล้ม" (Fall detection) นั่นเองครับ
💡 Maker's Tip: เซนเซอร์ MAX30100 และ MPU6050 สื่อสารผ่านโปรโตคอล I2C ทั้งคู่ครับ ซึ่งข้อดีคือเราสามารถใช้สายสัญญาณแค่ 2 เส้น (SDA, SCL) ต่อพ่วงเซนเซอร์หลายๆ ตัวเข้าด้วยกันได้เลย ประหยัดขาพินบนบอร์ดไปได้เยอะมากๆ!
หากเพื่อนๆ อยากเริ่มทำโปรเจกต์นี้ แวะมาช้อป บอร์ดไมโครคอนโทรลเลอร์ (มีรองรับ BLE), เซนเซอร์ MAX30100, MPU6050 และสายแพ ของแท้พร้อมส่งได้ที่ Globalbyte Shop เลยครับ ทัก LINE OA มาปรึกษาแอดมินให้ช่วยจัดอุปกรณ์ได้ตลอดเลยครับ!
ซอฟต์แวร์สุดเจ๋ง: Zephyr RTOS และแอปมือถือ 📱
ด้านซอฟต์แวร์ของโปรเจกต์นี้ เขาเลือกใช้ Zephyr RTOS ผ่านชุดคำสั่ง nRF Connect SDK ซึ่งเป็นระบบปฏิบัติการแบบเรียลไทม์ที่ช่วยให้บอร์ดทำงานหลายๆ อย่าง (Multitasking) ได้พร้อมกันโดยไม่หน่วงครับ
ส่วนการตั้งค่าต่างๆ และเขียนโค้ด สามารถทำผ่านโปรแกรม Visual Studio Code (VS Code) ได้เลย ยิ่งไปกว่านั้น ผู้พัฒนายังได้สร้างแอปพลิเคชันบนมือถือที่เขียนด้วย Flutter เพื่อรับค่าจากบอร์ดผ่าน BLE มาแสดงเป็นกราฟสวยๆ บนจอสมาร์ทโฟนได้ทั้ง iOS และ Android อีกด้วยครับ โคตรล้ำ!
ผังวงจรและการต่อสาย (System Diagram & I2C) 🔌
ผังการต่อสาย I2C จากบอร์ด nRF5340-DK ไปยังเซนเซอร์ MAX30100 และ MPU6050
Address ของเซนเซอร์แต่ละตัว เพื่อให้บอร์ดแยกแยะได้ว่ากำลังคุยกับใครอยู่
หน้าตาแอปพลิเคชันบนมือถือ (Flutter App) 📊
หน้าแอปพลิเคชันที่แสดงค่า Heart Rate, SpO2 และสถานะการเคลื่อนไหวแบบเรียลไทม์
ตัวอย่างโค้ด: การตรวจจับการล้ม (Fall Detection) ⚠️
การตรวจจับการล้มใช้ค่าความเร่งจากแกน X, Y, Z (Accelerometer) มาคำนวณหาผลรวม (Magnitude) หากค่าเกิน 25000 แปลว่ามีการกระแทกอย่างแรง! โค้ดจะเตือนว่า "FALL DETECTED" ครับ:
// ฟังก์ชันอ่านค่าและแยกแยะกิจกรรม
int magnitude = abs(ax) + abs(ay) + abs(az);
if (magnitude < 5000) {
printk("Idle\n");
}
else if (magnitude < 15000) {
printk("Walking\n");
}
else {
printk("Running\n");
}
// ตรวจจับการล้ม
#define FALL_THRESHOLD 25000
if (magnitude > FALL_THRESHOLD) {
printk("FALL DETECTED\n");
}
ตัวอย่างโค้ด: การวัดชีพจรและการกรองสัญญาณ (Moving Average Filter) 💓
สัญญาณชีพจรที่อ่านได้มักจะมีสัญญาณรบกวน (Noise) จึงต้องใช้เทคนิค Moving average filter เข้ามาช่วยกรองกราฟให้เรียบเนียนขึ้นก่อนนำไปคำนวณครับ:
#define FILTER_SIZE 8
uint16_t moving_average_filter(uint16_t input)
{
static uint16_t samples[FILTER_SIZE];
static uint8_t index = 0;
uint32_t sum = 0;
samples[index++] = input;
if (index >= FILTER_SIZE)
index = 0;
for (int i = 0; i < FILTER_SIZE; i++) {
sum += samples[i];
}
return sum / FILTER_SIZE;
}
📚 แหล่งข้อมูลศึกษาเพิ่มเติม:
*คำเตือนและข้อแนะนำ: เนื้อหาบทความนี้สรุปและแปลมาจากบทความเทคโนโลยีบนเว็บ Hackster.io โปรเจกต์นี้เป็นการจำลองการทำงานสำหรับการศึกษาและเรียนรู้ (Educational purposes) การวัดผลทางการแพทย์ด้วยเซนเซอร์ MAX30100 อาจมีความคลาดเคลื่อน ไม่สามารถนำไปใช้แทนอุปกรณ์ทางการแพทย์เพื่อการวินิจฉัยโรคจริงได้ครับ หากสนใจการพัฒนาซอร์สโค้ดและแอปพลิเคชัน แนะนำให้ศึกษาข้อมูลเชิงลึกจาก
ผู้พัฒนาโปรเจกต์ (DreamLab) โดยตรงครับ