เรื่องราว
ยายของผมชอบออกไปเดินเล่นตอนกลางคืนมาก แต่ตอนนี้อายุ 90 แล้ว สุขภาพก็เริ่มไม่ค่อยดี มีอยู่ครั้งหนึ่งยายเดินพลาดล้มในทุ่งนาตอนกลางคืน ครอบครัวผมกับผมต้องตามหากันทั้งคืน จนสุดท้ายต้องแจ้งตำรวจช่วยตามหา พ่อแม่ผมเป็นห่วงมาก บอกยายว่าถ้าจะออกไปเดินกลางคืน ต้องมีคนไปเป็นเพื่อน
พอถึงวันหยุดสุดสัปดาห์ที่ผ่านมา ผมเล่าเรื่องนี้ให้เพื่อนในทีมฟังตอนอยู่ที่งาน Hackathon หลังจากช่วยกันคิดแล้ว เราก็เห็นว่า ทำไมไม่สร้างอุปกรณ์สวมใส่ที่สามารถตรวจจับภาวะฉุกเฉินทางสุขภาพของผู้สูงอายุ แล้วส่งการแจ้งเตือนไปยังครอบครัวและเพื่อนๆ ล่ะ? นั่นแหละที่มาของโปรเจกต์ Cura ไง

ค้นคว้า
ตอนที่ผมค้นคว้าข้อมูล ผมพบว่าไม่ใช่แค่ยายผมเท่านั้น แต่ผู้สูงอายุอีกมากมายก็มีความกังวลในเรื่องภาวะสุขภาพฉุกเฉินเหมือนกัน ภาวะฉุกเฉินหลักๆ มีสองแบบคือ การล้ม กับ ภาวะหัวใจเต้นผิดจังหวะ (Arrhythmia) ซึ่งเกิดจากร่างกายและอวัยวะที่เสื่อมสภาพตามวัย

จากข้อมูลทางสถิติ พบว่าผู้สูงอายุมีรายงานการล้มประมาณ 36 ล้านครั้งต่อปี ส่งผลให้ต้องเข้ารับการรักษาในห้องฉุกเฉินกว่า 3 ล้านครั้ง และมีผู้เสียชีวิตมากกว่า 32,000 ราย และประมาณ 70% ของผู้สูงอายุมีภาวะความดันโลหิตสูง ซึ่งนำไปสู่โรคหลอดเลือดสมอง หัวใจล้มเหลว หรือแม้กระทั่งการเสียชีวิตกะทันหัน
ยิ่งไปกว่านั้น ยังมีงานวิจัยที่ชี้ให้เห็นว่า 60 นาทีแรก หลังจากได้รับบาดเจ็บรุนแรงคือช่วงเวลาที่มีโอกาสรอดชีวิตสูงสุด หากได้รับการดูแลทางการแพทย์ทันท่วงที นี่แหละที่พิสูจน์ว่าไอเดียของเราสามารถช่วยชีวิตผู้สูงอายุได้ ด้วยการรายงานภาวะฉุกเฉินทางสุขภาพของพวกเขาให้ทันเวลา เราจึงเริ่มต้นสร้างมันขึ้นมา
การตรวจจับภาวะสุขภาพฉุกเฉิน
เราใช้ Arduino Uno เป็นบอร์ดหลัก (เพราะลองใช้ Nano R3 แล้วมันดันไม่ค่อยเข้ากับ MacOS เวอร์ชันใหม่ซะงั้น) พร้อมกับเซ็นเซอร์ MPU6050 accelerometer, เซ็นเซอร์วัดชีพจร (Pulse Sensor), โมดูล WiFi ESP-8266 12-e, ปุ่มกด, หลอด LED และแบตเตอรี่ 3.7V
โค้ดและแผนภาพการต่อสายทั้งหมดอยู่ท้ายหน้านี้เลยจ้า พวก MPU6050 กับเซ็นเซอร์ชีพจรต้องบัดกรีก่อนนะ อย่าลืม!

ตรวจจับการล้ม
เราใช้ accelerometer ตรวจจับการล้ม เพราะการล้มก็คือ "ฟรีฟอลแบบลงทุนน้อย" ไง มันให้ค่าความเร่งเนื่องจากแรงโน้มถ่วงที่ต่ำกว่าปกติ (G < 9.8 - ค่าขีดเริ่มต้นการล้ม) มีบางโปรเจกต์ที่ใช้ DPS310 ตรวจจับการล้มโดยวัดความสูงที่ลดลงของคนใส่ แต่เราว่าวิธีนั้นไม่แม่นยำพอ (เช่น ตอนเดินลงเนินหรือลงบันได) และไม่ตรงไปตรงมาเท่าการวัดความเร่ง
เราทำให้การตรวจจับการล้มแม่นยำขึ้นและหลีกเลี่ยงการแจ้งเตือนผิดพลาด โดยนำโค้ดจากโปรเจกต์อื่นมาประยุกต์ใช้ หลักการคือ accelerometer ต้องได้รับค่า G ที่ต่ำลงตอนกำลังล้ม ตามด้วยค่าการกระแทกย้อนกลับ (spike) สูงๆ ตอนกระทบพื้น และหลังจากนั้นค่า G ไม่เปลี่ยนแปลงเป็นระยะเวลาหนึ่ง ซึ่งบ่งชี้ว่าผู้ใช้ล้มลงและนอนนิ่งอยู่บนพื้นแล้ว
รายละเอียดเทคนิคเพิ่มเติม:
MPU6050 Accelerometer/Gyroscope Matrix จะคอยตรวจสอบค่าสเกลาร์ของแรงทางกายภาพรวมแบบสัมบูรณ์ (sqrt(x^2 + y^2 + z^2)) อย่างต่อเนื่อง ถ้าค่านี้ตกลงไปใกล้ 0g (ภาวะฟรีฟอล) แล้วตามมาด้วยการพุ่งสูงขึ้นอย่างรุนแรงไปที่ 3g+ (การกระแทก) มันจะกำหนดให้เป็นเวกเตอร์ความผิดปกติแบบ "ฟรีฟอล / กระแทก" ที่ชัดเจน ซึ่งจะทริกเกอร์ให้เกิดการแจ้งเตือน
ตรวจจับภาวะหัวใจเต้นผิดจังหวะ (Arrhythmia)
เราใช้เซ็นเซอร์วัดชีพจร (Pulse Sensor) ในการตรวจจับอัตราการเต้นของหัวใจผู้สวมใส่ จากงานวิจัยพบว่า ถ้าหัวใจเต้นเร็วกว่า 200 หรือช้ากว่า 27 ครั้งต่อนาที (BPM) ถือว่าอันตรายถึงชีวิตเลยนะตัวนี้! แม้ว่าผู้สวมใส่จะออกกำลังกายหรือนอนหลับอยู่ อัตราการเต้นในระดับนี้ก็ถือว่าผิดปกติไม่ว่ายังไงก็ตาม สู้งานนะน้อง!
รายละเอียดเทคนิคแบบจัดเต็ม: หลักการวัดออกซิเจนในเลือดด้วยแสง (Blood Oxygenation Optics) การตรวจจับอัตราการเต้นของหัวใจนี่ไม่ได้วัดจากกระแสไฟฟ้านะจ๊ะ มันอาศัยฟิสิกส์ของการดูดกลืนแสงของร่างกายมนุษย์ล้วนๆ!
- ตัวโมดูล Pulse Oximeter จะยิงแสง สีแดง (660nm) และ อินฟราเรด (880nm) เข้าไปที่เส้นเลือดฝอยใต้ผิวหนังแบบจัดเต็ม
- ฮีโมโกลบินที่มีออกซิเจน (Oxygenated hemoglobin) จะดูดกลืนแสงในสเปกตรัมที่ต่างจากเลือดที่ไม่มีออกซิเจนโดยสิ้นเชิง
- ตัวตรวจจับแสง (Photodetector) ที่ไวมากจะจับการสะท้อนของแสงที่กระเด็นกลับมา
- โดยใช้อัลกอริทึมทางคณิตศาสตร์ที่ฝังอยู่ในไลบรารีอย่าง
<MAX30105.h>Arduino จะแยกสัญญาณ AC/DC ของการเปลี่ยนแปลงของแสงและคำนวณหาอัตราการเต้นของหัวใจ (BPM) ออกมาได้อย่างแม่นยำ
ปุ่มกดฉุกเฉิน (Emergency Button)
เนื่องจากภาวะฉุกเฉินอย่างโรคหลอดเลือดสมองหรือหัวใจวายอาจไม่แสดงอาการเปลี่ยนแปลงของอัตราการเต้นหัวใจชัดเจน เราจึงเพิ่มปุ่มกดฉุกเฉินเข้าไป เพื่อให้ผู้สวมใส่สามารถส่งสัญญาณขอความช่วยเหลือได้ทันทีเมื่อรู้สึกไม่สบายตัว
เมื่อเกิดภาวะฉุกเฉิน ไม่ว่าจะจากหัวใจเต้นผิดจังหวะหรือการกดปุ่ม หลอดไฟ LED ฉุกเฉินจะติดสว่างขึ้นมา แสงนี้จะส่งสัญญาณให้คนรอบข้างรู้ว่าผู้สวมใส่กำลังมีภาวะฉุกเฉิน ห้ามเข้าใจผิดว่าแค่นอนหลับหรือพักผ่อนนะจ๊ะ
ส่งข้อความ SMS พร้อมตำแหน่งที่ตั้ง
เมื่อเกิดภาวะฉุกเฉิน Arduino Uno จะส่งสัญญาณ HIGH ไปที่ ESP8266 จากนั้น ESP8266 จะส่งข้อความ SMS ไปยังเบอร์ติดต่อฉุกเฉินของเจ้าของ พร้อมกับตำแหน่งที่ตั้งในขณะนั้น

Twilio SMS API
Twilio รองรับการส่ง SMS ผ่านการเชื่อมต่อ WiFi โดยใช้ ESP8266 เราได้ศึกษาวิธีการและนำมาประยุกต์ใช้ในโปรเจคนี้
UnwiredLab Geolocation API
จากการค้นคว้า เราพบว่าการระบุตำแหน่งด้วยสัญญาณ WiFi (WiFi Positioning System - WPS) ช่วยให้เราสามารถหาตำแหน่งปัจจุบันของผู้สวมใส่ได้โดยใช้ข้อมูลจากเครือข่ายที่เชื่อมต่ออยู่ UnwiredLab มี Geolocation API ที่ใช้หลักการ WPS ในการส่งคืนข้อมูลตำแหน่ง เมื่อแนบตำแหน่งนี้ใน SMS แล้ว ผู้ติดต่อฉุกเฉินจะสามารถตามหาผู้สวมใส่ได้ก่อนที่อาการจะทรุดหนักลง
รายละเอียดเทคนิคแบบจัดเต็ม: วิกฤตพลังงานของโมดูล Cellular
ถ้าใช้โมดูล GSM เช่น SIM800L การจัดการพลังงานเป็นเรื่องสำคัญมาก! โมดูลพวกนี้สามารถดึงกระแสพุ่งสูงสุดได้ถึง 2.0 แอมป์ (2000mA) ตอนเชื่อมต่อกับเสาสัญญาณมือถือ การจ่ายไฟจากขา 5V ของ Arduino โดยตรงอาจทำให้ระบบรีบูตหรือเสียหายได้ ต้องใช้แหล่งจ่ายไฟแยก เช่น วงจร LM2596 Buck Converter เพื่อลดแรงดันจากแบตเตอรี่ลิเธียมลงมาที่ 4.0 โวลต์ และต้องต่อตรงไปที่ขาไฟของโมดูล GSM พร้อมกับตัวเก็บประจุขนาดใหญ่ (เช่น 1000µF) เพื่อรองรับกระแสสูงชั่วขณะเวลาที่โมดูลส่งสัญญาณ RF ห้ามช็อตนะตัวนี้!
เดโม

งานต่อยอดในอนาคต
- ใช้ Arduino Nano R3 กับ ESP8266-01 เพื่อลดขนาดอุปกรณ์ให้เล็กจิ๋ว
- ออกแบบเคส 3D Printing หุ้มฮาร์ดแวร์ให้ดูเท่และปลอดภัยขึ้น
- กดปุ่มฉุกเฉินซ้ำเพื่อยกเลิกสถานะฉุกเฉินและส่ง SMS ยืนยัน
- เพิ่มฟีเจอร์สุขภาพ เช่น นับก้าวและเวลาออกกำลังกายจากตัวเร่งความเร็ว (Accelerometer)
- ต่อจอแสดงผลหรือใช้แอป Blynk เพื่อดูข้อมูลสุขภาพ, ประวัติการแจ้งเตือน และแก้ไขรายชื่อติดต่อฉุกเฉิน
หวังว่าน้องจะได้ไอเดียดีๆ ไปต่อยอดนะครับ สู้งานนะน้อง!