ทำสมาร์ทวอทช์เองได้ง่ายๆ! โปรเจกต์ผู้ช่วยดูแลสุขภาพจากบอร์ด nRF5340

Health and Activity Assistant Wearable Project
โฉมหน้าโปรเจกต์ 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) 🔌

Schematic and System Diagram for nRF5340 Wearable
ผังการต่อสาย I2C จากบอร์ด nRF5340-DK ไปยังเซนเซอร์ MAX30100 และ MPU6050
I2C Addresses Table
Address ของเซนเซอร์แต่ละตัว เพื่อให้บอร์ดแยกแยะได้ว่ากำลังคุยกับใครอยู่

หน้าตาแอปพลิเคชันบนมือถือ (Flutter App) 📊

Flutter App Screen 1 Flutter App Screen 3
หน้าแอปพลิเคชันที่แสดงค่า 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) โดยตรงครับ

 


Blog posts

เข้าสู่ระบบ

ลืมรหัสผ่านใช่ไหม?

ยังไม่มีบัญชีใช่ไหม?
สร้างบัญชี