- MAX30100 เซนเซอร์
- ส่วนประกอบที่จำเป็น
- การเชื่อมต่อ MAX30100 Oximeter กับ ESP32
- Adafruit IO พร้อม ESP32 สำหรับการตรวจสอบอัตราการเต้นของหัวใจ
- คำอธิบายรหัส
- การสาธิต Pulse Oximeter โดยใช้ IoT
Pulse oximetry เป็นเครื่องมือวัดทางการแพทย์ที่ใช้กันอย่างแพร่หลายและเป็นการทดสอบที่ไม่รุกรานและไม่เจ็บปวดซึ่งจะวัดระดับความอิ่มตัวของออกซิเจนในเลือดของเราซึ่งสามารถตรวจจับการเปลี่ยนแปลงเล็กน้อยของออกซิเจนได้อย่างง่ายดาย ในสถานการณ์ Covid-19 ในปัจจุบันการติดตามระดับออกซิเจนของผู้ป่วยหลายรายในเวลาเดียวกันจากระยะไกลเป็นสิ่งสำคัญโดยไม่ต้องสัมผัสกับผู้ป่วย
ดังนั้นในโครงการนี้เราจึงสร้างเครื่องวัดความอิ่มตัวของออกซิเจนโดยใช้MAX30100 Pulse oximeterและ ESP32 ซึ่งจะติดตามระดับออกซิเจนในเลือดและส่งข้อมูลผ่านอินเทอร์เน็ตโดยเชื่อมต่อกับเครือข่าย Wi-Fi ด้วยวิธีนี้เราสามารถตรวจสอบผู้ป่วยหลายรายจากระยะไกลโดยรักษาระยะห่างทางสังคมกับผู้ป่วย ข้อมูลที่ได้จะแสดงเป็นกราฟซึ่งช่วยให้ติดตามและวิเคราะห์อาการของผู้ป่วยได้ง่ายขึ้น ก่อนหน้านี้เราได้สร้างเครื่องวัดอัตราการเต้นของหัวใจอื่น ๆ โดยใช้เซ็นเซอร์ชีพจร และหากคุณสนใจโครงการอื่น ๆ ที่เกี่ยวข้องกับ Covid-19 คุณสามารถตรวจสอบเครื่องวัดอุณหภูมิร่างกายมนุษย์, เครื่องวัดอุณหภูมิ IR อัจฉริยะสำหรับการตรวจวัดไข้และเครื่องสแกนอุณหภูมิแบบติดผนังที่เราสร้างขึ้นก่อนหน้านี้
นอกจากการประยุกต์ใช้ Covid-19 แล้วโครงการนี้ยังสามารถใช้กันอย่างแพร่หลายในโรคปอดอุดกั้นเรื้อรัง (COPD) โรคหอบหืดปอดบวมมะเร็งปอดโรคโลหิตจางหัวใจวายหรือหัวใจล้มเหลวหรือความบกพร่องของหัวใจพิการ แต่กำเนิด
โปรดทราบว่าเซ็นเซอร์ที่ใช้ในโครงการนี้ไม่ได้รับการจัดอันดับทางการแพทย์และโครงการนี้ไม่ได้รับการทดสอบสำหรับการใช้งานที่ป้องกันความล้มเหลว ใช้เครื่องวัดความอิ่มตัวของออกซิเจนที่ได้รับการจัดอันดับทางการแพทย์เพื่อตรวจสอบระดับชีพจรและออกซิเจนของผู้ป่วยและปรึกษาแพทย์ โครงการที่กล่าวถึงนี้จัดทำขึ้นเพื่อการศึกษาเท่านั้น
MAX30100 เซนเซอร์
เซ็นเซอร์ MAX30100 เป็นเครื่องวัดความอิ่มตัวของออกซิเจนในตัวและโมดูลตรวจวัดอัตราการเต้นของหัวใจ จะสื่อสารกับสายข้อมูล I2C และให้ข้อมูลSpO2 และ Pulseไปยังหน่วยไมโครคอนโทรลเลอร์ของโฮสต์ มันใช้ตัวตรวจจับแสงซึ่งเป็นองค์ประกอบออปติคอลที่ LED IR สีแดงและสีเขียวปรับสัญญาณพัลส์ LED กระแสไฟ LED สามารถกำหนดค่าได้ตั้งแต่ 0 ถึง 50mA ภาพด้านล่างแสดงเซ็นเซอร์ MAX30100
โมดูลเซ็นเซอร์ด้านบนใช้งานได้กับ 1.8V ถึงช่วง 5.5V ตัวต้านทานแบบดึงขึ้นสำหรับพิน I2C รวมอยู่ในโมดูล
ส่วนประกอบที่จำเป็น
- การเชื่อมต่อ WiFi
- ESP32
- MAX30100 เซนเซอร์
- ID ผู้ใช้ Adafruit IO และแดชบอร์ดที่สร้างขึ้นเอง (จะปรับปรุงเพิ่มเติม)
- 5V แหล่งจ่ายไฟเพียงพอที่มีกระแสไฟฟ้าอย่างน้อย 1A
- สาย USB Micro USB เป็น USBA
- พีซีที่มี Arduino IDE พร้อมสภาพแวดล้อมการเขียนโปรแกรม ESP32
การเชื่อมต่อ MAX30100 Oximeter กับ ESP32
แผนภาพวงจรที่สมบูรณ์สำหรับ MAX30100 พร้อม ESP32มีดังต่อไปนี้
นี่เป็นแผนผังที่เรียบง่ายมาก ขา 21 และ 22 ของ ESP32 devkit C เชื่อมต่อกับเซ็นเซอร์วัดความอิ่มตัวของออกซิเจน MAX30100 พร้อมขา SDA และ SCL Oximeter ยังใช้พลังงานจากขา 5V บนบอร์ดพัฒนา ESP32 ฉันทำการเชื่อมต่อโดยใช้เขียงหั่นขนมและสายเชื่อมต่อและการตั้งค่าการทดสอบของฉันมีลักษณะดังนี้ -
Adafruit IO พร้อม ESP32 สำหรับการตรวจสอบอัตราการเต้นของหัวใจ
ก่อนหน้านี้เราได้สร้างโครงการ Adafruit IO สำหรับแอปพลิเคชัน IoT ต่างๆ Adafruit IO เป็นแพลตฟอร์มที่ยอดเยี่ยมที่สามารถสร้างแดชบอร์ดแบบกำหนดเองได้ ในการสร้างแดชบอร์ดที่กำหนดเองสำหรับเซ็นเซอร์ Pulse-Oximeter ที่ใช้ IoT ให้ใช้ขั้นตอนด้านล่าง -
ขั้นตอนที่ 1: ลงทะเบียนครั้งแรกใน adafruit IO หลังจากระบุชื่อ Fist นามสกุลที่อยู่อีเมลชื่อผู้ใช้และรหัสผ่าน
ขั้นตอนที่ 2: หน้าต่างแดชบอร์ดว่างจะเปิดขึ้นหลังจากเสร็จสิ้นกระบวนการลงชื่อเข้าใช้ ในส่วนนี้เราจะต้องสร้างแดชบอร์ดเพื่อแสดงข้อมูลในรูปแบบต่างๆ ดังนั้นถึงเวลาสร้างแดชบอร์ดใหม่และระบุชื่อแดชบอร์ดและคำอธิบาย
ขั้นตอนที่ 3:หลังจากกรอกแบบฟอร์มด้านบนแล้วก็ได้เวลาสร้างกราฟและส่วนควบคุมสำหรับเซ็นเซอร์
เลือกบล็อกสวิตช์ จำเป็นสำหรับการเปิดหรือปิดเซ็นเซอร์วัดความอิ่มตัวของออกซิเจน
ขั้นตอนที่ 4:จดชื่อบล็อก ดังที่เราเห็นในภาพด้านบนฟังก์ชันสลับจะมีสองสถานะคือเปิดและปิด ในขั้นตอนเดียวกันให้เลือกบล็อกกราฟ
ส่วนกราฟนี้จำเป็นต้องเลือกสองครั้งเนื่องจากกราฟจะแสดงสองกราฟ Heart bit และ SpO2 ทั้งสองส่วนถูกสร้างขึ้น อย่างที่เราเห็นเราได้เลือกฟังก์ชันอินพุตและเอาต์พุตทั้งหมด
ขั้นตอนที่ 5: ขั้นตอนต่อไปและขั้นสุดท้ายคือการมีคีย์ adafruit อย่างที่เราเห็นเราได้รับคีย์ adafruit และจำเป็นต้องเพิ่มในโค้ด
ตอนนี้ Adafruit IO ได้รับการกำหนดค่าแล้ว ได้เวลาเตรียมฮาร์ดแวร์และสร้างเฟิร์มแวร์สำหรับโครงการนี้
คำอธิบายรหัส
รหัสนี้ใช้หลายไลบรารีและทั้งหมดมีความสำคัญ ไลบรารีคือไลบรารีเซ็นเซอร์ MAX30100 Pulse oximeter, Wire.h สำหรับ I2C, WiFi.h สำหรับการสนับสนุนที่เกี่ยวข้องกับ WiFi ใน ESP32, Adafruit MQTT และไลบรารี ไคลเอ็นต์ MQTT โปรแกรมที่สมบูรณ์สามารถพบได้ที่ด้านล่างของหน้านี้
ไลบรารีที่กล่าวถึงข้างต้นจะรวมอยู่ที่จุดเริ่มต้นของโค้ด
# รวม
คำจำกัดความสองคำถัดไปคือ WLAN SSID และ WLAN Password สิ่งนี้จะต้องเป็นที่แน่นอนและจะใช้โดย ESP32 เพื่อเชื่อมต่อกับเครือข่าย WiFi
#define WLAN_SSID "xxxxxxxxx" #define WLAN_PASS "2581xxxxx2"
ต่อไปเราได้กำหนดคำจำกัดความของ Adafruit io
#define AIO_UPDATE_RATE_SEC 5 #define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883 #define AIO_USERNAME "xxxxxxxxxxxxx" #define AIO_KEY "abcdefgh"
อัตราการอัปเดตจะอัปเดตข้อมูลทุก ๆ 5 วินาทีเซิร์ฟเวอร์จะเป็น io.adafruit.com พร้อมพอร์ตเซิร์ฟเวอร์ 1883 ชื่อผู้ใช้และรหัสผ่านจะเป็นชื่อผู้ใช้และรหัสผ่านที่สร้างขึ้นจากแดชบอร์ด IO ของ adafruit มันจะแตกต่างกันสำหรับทุกคนและจำเป็นต้องสร้างขึ้นตามที่อธิบายไว้ในส่วนการตั้งค่า adafruit
หลังจากนั้นพอร์ต I2C จะถูกกำหนดดังแสดงในแผนผัง
#define I2C_SDA 21 # กำหนด I2C_SCL 22
จากนั้นจะใช้ตัวแปรสามตัวในการจัดเก็บรายงานล่าสุดและค่า bpm และ spo2
uint32_t tsLastReport = 0; ลอย bpm_dt = 0; ลอย spo2_dt = 0;
MQTT ทำงานร่วมกับโมเดลย่อย (เผยแพร่และสมัครรับข้อมูล) ในรูปแบบการทำงานนี้อุปกรณ์ที่ส่งข้อมูลไปยังเซิร์ฟเวอร์ Adafruit จะอยู่ในโหมดเผยแพร่โดยที่เซิร์ฟเวอร์ Adafruit IO สมัครรับข้อมูลจุดเดียวกัน ในผลดังกล่าวเมื่อใดก็ตามที่อุปกรณ์เผยแพร่ข้อมูลใหม่ใด ๆ เซิร์ฟเวอร์ที่สมัครรับข้อมูลเดียวกันจะได้รับข้อมูลและดำเนินการที่จำเป็น
สิ่งเดียวกันนี้เกิดขึ้นเมื่อเซิร์ฟเวอร์เผยแพร่ข้อมูลและอุปกรณ์สมัครรับข้อมูล ในแอปพลิเคชันของเราอุปกรณ์จะส่งข้อมูลของ SPO2 และ BPM ไปยังเซิร์ฟเวอร์ดังนั้นจึงเผยแพร่เหมือนกันและได้รับสถานะเปิด - ปิดจากเซิร์ฟเวอร์จึงสมัครรับข้อมูลนี้ สิ่งนี้กำหนดค่าไว้ในข้อมูลโค้ดที่อธิบายไว้ด้านล่าง -
ไคลเอนต์ WiFiClient; Adafruit_MQTT_Client mqtt (& ลูกค้า, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY); Adafruit_MQTT_Subscribe sw_sub = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / switch"); // สังเกตเส้นทาง MQTT สำหรับ AIO ตามแบบฟอร์ม:
ในฟังก์ชั่น การตั้งค่า เรากำลังเริ่ม I2C โดยเชื่อมต่อ WiFi กับ SSID และรหัสผ่านที่กำหนดไว้ล่วงหน้าและเริ่มกระบวนการสมัครสมาชิก MQTT สำหรับสถานะสวิตช์ (ปุ่มสวิตช์ที่สร้างขึ้นในแดชบอร์ด Adafruit IO)
การตั้งค่าเป็นโมฆะ () {Serial.begin (115200); Wire.begin (I2C_SDA, I2C_SCL); WiFi.begin (WLAN_SSID, WLAN_PASS); ในขณะที่ (WiFi.status ()! = WL_CONNECTED) {ล่าช้า (500); Serial.print ("."); } Serial.println (); Serial.println ("เชื่อมต่อ WiFi แล้ว"); Serial.println ("ที่อยู่ IP:"); Serial.println (WiFi.localIP ()); mqtt.subscribe (& sw_sub); Serial.print ("การเริ่มต้นชีพจร oximeter.. "); // เริ่มต้นอินสแตนซ์ PulseOximeter // ความล้มเหลวโดยทั่วไปเกิดจากการเดินสาย I2C ที่ไม่เหมาะสมแหล่งจ่ายไฟขาดหายไป // หรือชิปเป้าหมายผิดถ้า (! pox.begin ()) {Serial.println ("FAILED"); สำหรับ(;;); } else {Serial.println ("SUCCESS"); } // กระแสเริ่มต้นสำหรับ IR LED คือ 50mA และสามารถเปลี่ยนแปลงได้ // โดยไม่ใส่เครื่องหมายในบรรทัดต่อไปนี้ ตรวจสอบ MAX30100_Registers.h สำหรับ // ตัวเลือกที่มีทั้งหมด โรคฝีsetIRLedCurrent (MAX30100_LED_CURR_7_6MA); // ลงทะเบียนการโทรกลับสำหรับการตรวจจับจังหวะ pox.setOnBeatDetectedCallback (onBeatDetected); stopReadPOX (); }
หลังจากทั้งหมดนี้ max30100 จะเริ่มต้นด้วยการตั้งค่ากระแสไฟ led การตั้งค่าปัจจุบันที่แตกต่างกันยังมีอยู่ในไฟล์ส่วนหัว MAX30100 สำหรับการกำหนดค่าต่างๆ ฟังก์ชันเรียกกลับการตรวจจับการเต้นของหัวใจจะเริ่มทำงานด้วย หลังจากการตั้งค่าทั้งหมดนี้เซ็นเซอร์ oximeter จะหยุดทำงาน
ใน วง ฟังก์ชั่นการเชื่อมต่อ MQTT จะเริ่มต้นและรูปแบบการสมัครมีการตรวจสอบในทุก 5000 มิลลิวินาที ในสถานการณ์เช่นนี้ถ้าสวิทช์เปิดอยู่ก็จะเริ่มที่จะอ่านเซ็นเซอร์ oximeter และเผยแพร่ข้อมูลของการเต้นของหัวใจและความคุ้มค่า SPO2 หากปิดสวิตช์สวิตช์จะระงับงานทั้งหมดที่เกี่ยวข้องกับเซ็นเซอร์วัดความอิ่มตัวของออกซิเจน
ห่วงเป็นโมฆะ () {MQTT_connect (); Adafruit_MQTT_Subscribe * สมัครสมาชิก; ในขณะที่ ((subscription = mqtt.readSubscription (5000))) (if (subscription == & sw_sub) {Serial.print (F ("Got:")); Serial.println ((ถ่าน *) sw_sub.lastread); ถ้า (! strcmp ((ถ่าน *) sw_sub.lastread, "ON")) {Serial.print (("เริ่ม POX… ")); startReadPOX (); BaseType_t xReturned; if (poxReadTaskHld == NULL) {xReturned = xTaskCreate (poxReadTask, / * ฟังก์ชันที่ใช้งาน * / "pox_read", / * ชื่อข้อความสำหรับงาน * / 1024 * 3, / * ขนาดกองเป็นคำไม่ใช่ ไบต์. * / NULL, / * พารามิเตอร์ที่ส่งผ่านไปยังงาน * / 2, / * ลำดับความสำคัญที่งานถูกสร้างขึ้น * / & poxReadTaskHld); / * ใช้เพื่อส่งต่อหมายเลขอ้างอิงของงานที่สร้างขึ้น * /} ล่าช้า (100); ถ้า (mqttPubTaskHld == NULL) {xReturned = xTaskCreate (mqttPubTask,/ * ฟังก์ชันที่ใช้ในการทำงาน * / "mqttPub", / * ชื่อข้อความสำหรับงาน * / 1024 * 3, / * ขนาดกองเป็นคำไม่ใช่ไบต์ * / NULL, / * พารามิเตอร์ที่ส่งเข้าไปในงาน * / 2, / * ลำดับความสำคัญที่สร้างงาน * / & mqttPubTaskHld); / * ใช้เพื่อส่งต่อหมายเลขอ้างอิงของงานที่สร้างขึ้น * /}} else {Serial.print (("หยุด POX… ")); // Detele POX อ่านงานถ้า (poxReadTaskHld! = NULL) vTaskDelete (poxReadTaskHld); poxReadTaskHld = NULL; } // ลบงาน MQTT Pub ถ้า (mqttPubTaskHld! = NULL) {vTaskDelete (mqttPubTaskHld); mqttPubTaskHld = NULL; } stopReadPOX (); }}}}/ * ใช้เพื่อส่งต่อหมายเลขอ้างอิงของงานที่สร้างขึ้น * /}} else {Serial.print (("หยุด POX… ")); // Detele POX อ่านงานถ้า (poxReadTaskHld! = NULL) vTaskDelete (poxReadTaskHld); poxReadTaskHld = NULL; } // ลบงาน MQTT Pub ถ้า (mqttPubTaskHld! = NULL) {vTaskDelete (mqttPubTaskHld); mqttPubTaskHld = โมฆะ; } stopReadPOX (); }}}}/ * ใช้เพื่อส่งต่อหมายเลขอ้างอิงของงานที่สร้างขึ้น * /}} else {Serial.print (("หยุด POX… ")); // Detele POX อ่านงานถ้า (poxReadTaskHld! = NULL) vTaskDelete (poxReadTaskHld); poxReadTaskHld = NULL; } // ลบงาน MQTT Pub ถ้า (mqttPubTaskHld! = NULL) {vTaskDelete (mqttPubTaskHld); mqttPubTaskHld = โมฆะ; } stopReadPOX (); }}}}
การสาธิต Pulse Oximeter โดยใช้ IoT
วงจรเชื่อมต่ออย่างถูกต้องใน breadboard และโปรแกรมที่ระบุด้านล่างจะถูกอัปโหลดไปยัง ESP32 ตรวจสอบให้แน่ใจว่าคุณได้เปลี่ยนข้อมูลรับรอง Wi-Fi และ Adafruit ให้สอดคล้องกันในรหัสของคุณเพื่อให้ใช้งานได้สำหรับคุณ
หลังจากการเชื่อมต่อกับเซิร์ฟเวอร์ WiFi และ Adafruit IO ก็เริ่มทำงานตามที่คาดไว้
ดังที่เราเห็นว่าระดับ SPO2 กำลังแสดง 96% และการเต้นของหัวใจกำลังแสดง 78 ถึง 81 บิตต่อนาที นอกจากนี้ยังให้เวลาในการจับข้อมูล
ดังที่เราเห็นในภาพด้านบนสวิตช์จะปิดและข้อมูลเป็น 0 คุณสามารถดูวิดีโอการทำงานทั้งหมดของโครงการได้ที่ด้านล่างของหน้านี้
หวังว่าคุณชอบบทความและเรียนรู้สิ่งที่มีประโยชน์ถ้าคุณมีคำถามใด ๆ โปรดปล่อยให้พวกเขาในการแสดงความคิดเห็นด้านล่างหรือโพสต์ไว้บนของเราฟอรั่ม