หน้าแรก ดูโปรเจกต์ทั้งหมด
Easy

โปรเจกต์ Smart Rural Triage Station

เปลี่ยน Arduino UNO Q ของคุณให้เป็นอุปกรณ์ Medical Screening พลัง AI ที่ช่วยบุคลากรทางการแพทย์ในพื้นที่ Rural ตรวจหาความผิดปกติของหัวใจและปอดแบบ Real-time โดยมีความเป็นส่วนตัวสูงสุดและไม่ต้องพึ่งพา Internet

โปรเจกต์ Smart Rural Triage Station
252 การดู
1 ถูกใจ

รายการอุปกรณ์และเครื่องมือ

1x Modulino® Buzzer
🛒 สั่งซื้อ
1x Modulino® Thermo
🛒 สั่งซื้อ
1x Modulino® Movement
🛒 สั่งซื้อ
1x Grove - OLED Display 0.96"
-

แอปพลิเคชันและแพลตฟอร์ม

1x Arduino App Lab
ค้นหา Google
1x Arduino IDE 2.3.7
เว็บ Official

รายละเอียดและวิธีทำ

Smart Rural Triage Station

เปลี่ยน Arduino UNO Q ของคุณให้เป็นอุปกรณ์คัดกรองทางการแพทย์ที่ขับเคลื่อนด้วย AI ซึ่งช่วยให้บุคลากรทางการแพทย์ในพื้นที่ห่างไกลสามารถระบุความผิดปกติของหัวใจและปอดได้แบบ Real-time โดยมีความเป็นส่วนตัวสูงสุดและไม่ต้องพึ่งพาอินเทอร์เน็ต

Components and Supplies

Tools and Machines

  1. 3D Printer (เลือกติดตั้งได้ - สำหรับทำตัวเคส)
  2. Soldering Iron (เลือกใช้ได้)

Apps and Platforms

  1. Arduino App Lab
  2. TensorFlow Lite
  3. Python 3.x
  4. Flask Web Framework

Project Description

ลองจินตนาการถึงคลินิกสุขภาพในพื้นที่ห่างไกลที่พยาบาลเพียงคนเดียวต้องดูแลคนไข้นับร้อยโดยไม่สามารถเข้าถึงแพทย์เฉพาะทางหรืออุปกรณ์วินิจฉัยขั้นสูงได้ โครงการนี้เปลี่ยน Arduino UNO Q ให้กลายเป็น Smart Rural Triage Station ซึ่งเป็นอุปกรณ์คัดกรองที่ขับเคลื่อนด้วย AI ทำหน้าที่ฟังเสียงหัวใจและปอดเพื่อตรวจหาความผิดปกติได้ในทันที

ด้วยการรวม Contact microphone เข้ากับโมเดล Machine learning ของ TensorFlow Lite ระบบจะประมวลผลเสียงแบบ Real-time บนอุปกรณ์โดยตรง เมื่อคนไข้วางไมโครโฟนลงบนหน้าอก AI จะวิเคราะห์เสียงและให้ผลลัพธ์ทันทีผ่านการเคลื่อนไหวของ Servo, เสียงเตือนจาก Buzzer และจอ OLED ที่แสดงผลการคัดกรอง (Triage)

แอปพลิเคชันนี้ทำงานบน Arduino UNO Q ทั้งหมด โดยการทำ AI inference จะเกิดขึ้นภายในบอร์ด ช่วยให้มั่นใจได้ว่าไม่มีความหน่วง (Zero latency) และมีความเป็นส่วนตัวสูงสุด เนื่องจากจะไม่มีการจัดเก็บหรือส่งต่อข้อมูลเสียงของคนไข้

Build the Triage Station

Arduino UNO Q ทำหน้าที่เป็นศูนย์กลางหลัก โดยรันทั้งการประมวลผล AI บน Linux core และการควบคุม Hardware แบบ Real-time บน MCU core

Hardware Lineup

The Dashboard

แอปพลิเคชันนี้ประกอบด้วย Dashboard บนเว็บที่โฮสต์อยู่บน Arduino UNO Q โดยตรง สามารถเข้าถึงได้จากอุปกรณ์ใดก็ได้ในเครือข่ายท้องถิ่นเดียวกันที่ http://192.168.7.2:5000

คุณสมบัติของ Dashboard

  1. Mode Selection : ดูโหมดปัจจุบัน (HEART/LUNG/CALIBRATION) ตามตำแหน่งของ Knob
  2. Live Sensor Data : ข้อมูล Sensor แบบ Real-time ทั้งอุณหภูมิ, ระดับเสียง และการตรวจจับความเคลื่อนไหว
  3. Examination Control : เริ่มต้นหรือ Reset การตรวจได้ในคลิกเดียว
  4. Triage Results : แสดงระดับความเสี่ยงอย่างชัดเจน (LOW/MEDIUM/HIGH)
  5. Connection Status : แสดงสถานะว่า Serial port ใดเชื่อมต่อกับ MCU อยู่

Risk Level Indicators

The AI Models

การจำแนกเสียงหัวใจและปอดขับเคลื่อนโดยโมเดล TensorFlow Lite ที่ได้รับการปรับแต่งเพื่อการใช้งานบน Edge device

Heart Sound Classification

  1. Input : 64x128 mel-spectrogram
  2. Architecture : CNN (3 conv blocks + dense layers)
  3. Output Classes : Normal, Murmur, Extrasystole
  4. Accuracy : >85%
  5. Model Size : <2MB (Quantized)

Lung Sound Classification

  1. Input : 64x128 mel-spectrogram
  2. Architecture : CNN (3 conv blocks + dense layers)
  3. Output Classes : Normal, Wheeze, Crackle, Both
  4. Accuracy : >96%
  5. Model Size : <2MB (Quantized)

โมเดลเหล่านี้ได้รับการฝึกฝนด้วยชุดข้อมูลทางการแพทย์จาก PhysioNet และ ICBHI จากนั้นจึงแปลงเป็นรูปแบบ TensorFlowLite เพื่อให้สามารถทำ Inference บนอุปกรณ์ได้อย่างมีประสิทธิภาพ

Software Architecture Overview

ซอฟต์แวร์นี้ใช้ประโยชน์จากสถาปัตยกรรมหน่วยประมวลผลคู่ของ Arduino UNO Q เพื่อแยกการประมวลผล AI ระดับสูงออกจากการควบคุม Hardware แบบ Real-time

Arduino UNO Q

├── Linux Side (QRB2210) - Python

│ ├── Audio Processing & Feature Extraction

│ ├── TensorFlow Lite Inference

│ ├── Flask Web Dashboard

│ └── Serial Communication to MCU


└── MCU Side (STM32U585) - Arduino Sketch

├── Real-time Sensor Polling (Modulino)

├── OLED Display Updates

├── Servo Motor Control

└── Buzzer & LED Control

Communication

ทั้งสองส่วนสื่อสารกันผ่าน Serial Bridge ที่ความเร็ว 115200 Baud โดยใช้ข้อความรูปแบบ JSON โดย MCU จะส่งข้อมูล Sensor และฝั่ง Linux จะส่งคำสั่งควบคุมกลับมา

A Quick Look into the Code

ฝั่ง Linux: การรันขั้นตอนการตรวจ

ในฝั่ง Linux ( app.py ) เซิร์ฟเวอร์ Flask จะจัดการลำดับการตรวจดังนี้:

def run_exam():

system_state["mode"] = "EXAMINING"

send_mcu_command({"progress": 0, "result": 90})


# Progress loop with movement detection

for i in range(0, 101, 2):

if system_state["movement"] == 1:

send_mcu_command({"buzzer": 2000}) # Alert if moving

system_state["diagnosis"] = f"Recording... {i}%"

send_mcu_command({"progress": int(i * 1.8)})

time.sleep(0.1)

# Analyze and determine risk

score = calculate_risk_score()

if score >= 2:

system_state["risk_level"] = "HIGH"

send_mcu_command({"result": 180, "buzzer": 1000})

# ... handle other levels

ฝั่ง MCU: จอแสดงผลและอุปกรณ์ Output

ในฝั่ง MCU (main.ino) เฟิร์มแวร์จะจัดการส่วน UI และ Hardware:

void updateDisplay() {

display.clearDisplay();


// Header Bar (Inverted text for mode)

display.setTextColor(SSD1306_BLACK, SSD1306_WHITE);

String modeStr = (currentSensorData.knobMode == 0) ? " HEART MODE " :

(currentSensorData.knobMode == 1) ? " LUNG MODE " : " CALIBRATION";

display.println(modeStr);


if (currentState == STATE_EXAMINING) {

display.setTextSize(2);

display.println("SCANNING");

// Animated progress bar

display.drawRect(10, 45, 108, 10, SSD1306_WHITE);

int fill = (millis() / 250) % 20;

display.fillRect(12, 47, fill * 5, 6, SSD1306_WHITE);

}


display.display();

}

JSON Communication Protocol

MCU → Linux (ข้อมูล Sensor):

{

"knob": 450,

"mode": 1,

"temp": 36.5,

"movement": 0,

"mic": 512

}

Linux → MCU (คำสั่ง):

{

"progress": 90,

"result": 180,

"buzzer": 1000,

"state": "EXAMINING"

}

Privacy & Security

  1. ไม่มีการเก็บข้อมูลเสียง : เสียงจะถูกประมวลผลแบบ Real-time และไม่ถูกบันทึกไว้
  2. การทำงานแบบ Offline : ไม่ต้องใช้อินเทอร์เน็ต และไม่ต้องพึ่งพา Cloud
  3. ประมวลผลภายในเครื่อง : การทำ AI inference ทั้งหมดเกิดขึ้นบนอุปกรณ์
  4. Log แบบนิรนาม : เก็บเฉพาะข้อมูลเวลาและผลลัพธ์ (ไม่มีข้อมูลส่วนตัวของคนไข้)
  5. การอัปเดตที่ปลอดภัย : อัปเดตโมเดลผ่าน USB ไม่ใช่ผ่านเครือข่าย

Clinical Impact

  1. การตรวจพบตั้งแต่เนิ่นๆ : ระบุความผิดปกติที่อาจหลุดรอดไปจากการใช้หูฟังทางการแพทย์ทั่วไป
  2. การสร้างมาตรฐาน : คัดกรองด้วยมาตรฐานเดียวกันไม่ว่าทักษะของผู้ตรวจจะอยู่ในระดับใด
  3. การเพิ่มประสิทธิภาพการส่งต่อ : ลดการส่งต่อเคสที่ไม่จำเป็น และดักจับเคสที่วิกฤตได้ทันท่วงที
  4. การสนับสนุนการฝึกอบรม : ช่วยสร้างขีดความสามารถในการดูแลสุขภาพในท้องถิ่น
  5. อำนาจเหนือข้อมูล : รักษาข้อมูลคนไข้ให้อยู่ภายใต้การควบคุมของท้องถิ่น

Code

GitHub Repository

Raja-89/Arduino-Triage

อุปกรณ์คัดกรองทางการแพทย์ที่ขับเคลื่อนด้วย AI สำหรับ Arduino UNO Q ที่ใช้โมเดล TensorFlow Lite และการรวมข้อมูลจาก Sensor หลายตัว เพื่อให้การตัดสินใจคัดกรองผู้ป่วยในพื้นที่ห่างไกลเป็นไปอย่างรวดเร็ว

Schematics

Pin Mapping (ฝั่ง STM32U585 MCU)

Quick Start

1. Clone the repository

git clone https://github.com/Raja-89/Arduino-Triage.git

cd Arduino-Triage

2. ติดตั้ง Python dependencies

pip install -r requirements.txt

3. Deploy ไปยัง Arduino UNO Q

scp -r * root@192.168.7.2:/opt/triage-station/

4. เริ่มต้นแอปพลิเคชัน

ssh root@192.168.7.2 "cd /opt/triage-station && python3 final_deployment/app.py"

5. เข้าใช้งาน Dashboard

เปิด http://192.168.7.2:5000 ในบราวเซอร์ของคุณ

License

Mozilla Public License 2.0 (MPL-2.0)

Acknowledgments

  1. Arduino x Qualcomm สำหรับแพลตฟอร์ม AI for All Hackathon
  2. PhysioNet และ ICBHI สำหรับชุดข้อมูลทางการแพทย์แบบเปิด
  3. ทีมงาน TensorFlow Lite สำหรับ Edge AI framework
  4. บุคลากรทางการแพทย์ในพื้นที่ห่างไกลที่เป็นแรงบันดันดาลใจให้กับโซลูชันนี้

Code

🔒 ปลดล็อก Code

สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้

รหัสอ้างอิงโปรเจกต์: afa2026-physicalai-smart-rural-triage-station-d6e280
2450 บาท
PromptPay QR Code