ตลอดเวลานี้เราได้แสดงให้เห็นเป็นจำนวนมาก ชิ้นส่วนอิเล็กทรอนิกส์ เข้ากันได้กับ บอร์ดเช่น Arduino หรือเข้ากันได้รวมถึงงานช่างทำหรืองาน DIY อื่นๆ อีกมากมาย ตอนนี้เราจะมาแนะนำคุณกับโมดูล MAX30102ซึ่งมีเซ็นเซอร์วัดชีพจรและออกซิเจนในเลือด
ด้วยวิธีนี้ คุณสามารถสร้างอุปกรณ์สวมใส่ได้ เช่น กำไลข้อมือหรือฮาร์ดแวร์สำหรับกิจกรรมทำเอง ติดตามสถานะสุขภาพ ของบุคคล การให้ข้อมูลไบโอเมตริกซ์หรือการวัดทางไกลของบุคคลดังกล่าว เนื่องจากการผสานรวมเครื่องวัดอัตราการเต้นของหัวใจและเครื่องวัดออกซิเจนในเลือดในอุปกรณ์นี้...
เครื่องวัดอัตราการเต้นของหัวใจคืออะไร? มันทำงานอย่างไร?
Un เซ็นเซอร์ชีพจรหรือเครื่องวัดอัตราการเต้นของหัวใจ เป็นอุปกรณ์อิเล็กทรอนิกส์ที่ใช้ในการวัดอัตราการเต้นของหัวใจของบุคคลแบบเรียลไทม์ ส่วนใหญ่จะใช้ในสนามกีฬาเพื่อติดตามประสิทธิภาพและความพยายามระหว่างการฝึกซ้อมหรือในชีวิตประจำวัน เครื่องวัดอัตราการเต้นของหัวใจเป็นที่นิยมในหมู่นักกีฬา แต่ก็เป็นอุปกรณ์พื้นฐานในศูนย์การแพทย์ในการทราบอัตราการเต้นของหัวใจซึ่งก็คืออัตราการเต้นของหัวใจหรือการเต้นของหัวใจต่อนาที:
- ประชาสัมพันธ์ Bpm: แสดงอัตราการเต้นของหัวใจ กล่าวคือ อัตราการเต้นของหัวใจต่อนาที
ในทุกกรณี เซ็นเซอร์จะจับความแปรผันของปริมาตรเลือดในแต่ละการเต้นของหัวใจ. รูปแบบนี้ถูกแปลเป็นสัญญาณไฟฟ้าที่ได้รับการประมวลผลเพื่อให้ได้อัตราการเต้นของหัวใจ เครื่องวัดอัตราการเต้นของหัวใจบางรุ่นยังมีวงจรขยายและตัดเสียงรบกวนเพื่อปรับปรุงความแม่นยำในการอ่าน
เครื่องวัดออกซิเจนคืออะไร? มันทำงานอย่างไร?
Un oximeter เป็นอุปกรณ์ทางการแพทย์หรือการกีฬา ซึ่งใช้วัดความอิ่มตัวของออกซิเจนในเลือด อุปกรณ์นี้นำเสนอข้อมูลความอิ่มตัวของออกซิเจนในเลือดที่มีค่าตั้งแต่ 0 ถึง 100% เป็นเรื่องปกติที่อุปกรณ์เดียวกันจะมีตัวเลือกอัตราการเต้นของหัวใจด้วย ซึ่งระบุข้อมูลทั้งหมดสำหรับการตรวจสอบหรือบันทึก
ข้อมูลที่ วัดค่าออกซิเจน มันเป็น:
- %SpO2: หมายถึงเปอร์เซ็นต์ความอิ่มตัวของออกซิเจนในเลือด
oximeter วางเหมือนที่หนีบในลักษณะที่ปรับให้เข้ากับสัณฐานวิทยาของนิ้วของเราหรือสามารถวางไว้ที่ตำแหน่งอื่นในร่างกายได้เช่นเดียวกับกรณีของเครื่องวัดอัตราการเต้นของหัวใจเช่นข้อมือ สามารถพบได้ในกำไลกิจกรรมมากมาย ,
ในการทำงานนั้น oximeters จะปล่อยก๊าซที่แตกต่างกัน ความยาวคลื่นแสง ที่ทะลุผ่านผิวหนัง สิ่งที่ทำหน้าที่กับแสงนี้คือฮีโมโกลบิน ซึ่งเป็นโมเลกุลของเลือดที่ทำหน้าที่ขนส่งออกซิเจน โดยดูดซับแสงในปริมาณที่แตกต่างกันไป ขึ้นอยู่กับระดับของออกซิเจนที่มันขนส่ง กระบวนการโดยละเอียดมีดังนี้:
- การปล่อยแสง- oximeter ปล่อยแสงความยาวคลื่นสองช่วง หนึ่งสีแดงและหนึ่งอินฟราเรด ซึ่งส่องผ่านนิ้วที่วางไว้บนอุปกรณ์
- การดูดซับแสง: เฮโมโกลบินซึ่งเป็นโมเลกุลในเซลล์เม็ดเลือดแดงที่นำพาออกซิเจนจะดูดซับแสงเหล่านี้ในปริมาณที่แตกต่างกัน เฮโมโกลบินที่มีออกซิเจน (oxyhemoglobin) และฮีโมโกลบินที่ปราศจากออกซิเจน (deoxyhemoglobin) มีคุณสมบัติในการดูดซับแสงที่แตกต่างกัน
- การตรวจจับแสง: เครื่องตรวจจับที่อยู่ฝั่งตรงข้ามของตัวปล่อยแสงจะรวบรวมแสงที่ผ่านนิ้ว
- การคำนวณความอิ่มตัวของออกซิเจน- อุปกรณ์คำนวณอัตราส่วนของออกซีฮีโมโกลบินต่อปริมาณฮีโมโกลบินทั้งหมดที่มีอยู่ ทั้งออกซีเฮโมโกลบินและดีออกซีเฮโมโกลบิน สัดส่วนนี้แสดงเป็นเปอร์เซ็นต์ของความอิ่มตัวของออกซิเจนในเลือด (%SpO2) ซึ่งทำได้ผ่านโปรเซสเซอร์ที่สามารถตีความสัญญาณไฟฟ้าเหล่านี้เพื่อแปลเป็นค่าตัวเลขได้
โมดูล MAX30102 คืออะไร?
เซ็นเซอร์ MAX30102 ผลิตโดย Maxim Integratedเป็นอุปกรณ์บูรณาการที่รวมฟังก์ชันการทำงานของเครื่องวัดอัตราการเต้นของหัวใจและเครื่องวัดออกซิเจนในเลือด เซ็นเซอร์นี้สามารถใช้กับไมโครคอนโทรลเลอร์เช่น Arduino ได้อย่างง่ายดาย MAX30102 เป็นของเซ็นเซอร์ออปติคัลซีรีส์ MAX3010x จากบริษัทนี้
การทำงานของมันขึ้นอยู่กับความแปรผันของการดูดกลืนแสงของเลือด ขึ้นอยู่กับมัน ระดับความอิ่มตัวของออกซิเจน และชีพจร ตามที่ฉันได้กล่าวไว้ในสองส่วนก่อนหน้านี้ เซ็นเซอร์นี้ติดตั้งไฟ LED สองดวง สีแดงหนึ่งดวงและอินฟราเรดหนึ่งดวง โดยวางบนผิวหนัง เช่น บนนิ้วหรือข้อมือ และตรวจจับแสงสะท้อนเพื่อกำหนดระดับความอิ่มตัวของออกซิเจน
ดำเนินการสื่อสารกับ MAX30102 ผ่านบัส I2Cทำให้ง่ายต่อการเชื่อมต่อกับไมโครคอนโทรลเลอร์เช่น Arduino MAX30102 ต้องการแหล่งจ่ายไฟคู่: 1.8V สำหรับลอจิกและ 3.3V สำหรับ LED โดยทั่วไปจะพบได้ในโมดูล 5V ที่มีการจับคู่ระดับที่จำเป็นอยู่แล้ว
La เครื่องวัดความอิ่มตัวของออกซิเจนในเลือดแบบออปติคอล เป็นวิธีการแบบไม่รุกรานเพื่อกำหนดเปอร์เซ็นต์ความอิ่มตัวของออกซิเจนในเลือด ดังที่ได้กล่าวไปแล้ว ค่านี้ขึ้นอยู่กับความแตกต่างของค่าสัมประสิทธิ์การดูดกลืนแสงของฮีโมโกลบิน (Hb) และออกซีเฮโมโกลบิน (HbO2) สำหรับความยาวคลื่นที่ต่างกัน เลือดที่มีออกซิเจนมากจะดูดซับแสงอินฟราเรดได้มากขึ้น ในขณะที่เลือดที่มีออกซิเจนต่ำจะดูดซับแสงสีแดงมากขึ้น ในบริเวณของร่างกายที่ผิวหนังบางเพียงพอและมีหลอดเลือดอยู่ข้างใต้ ความแตกต่างนี้สามารถใช้เพื่อกำหนดระดับความอิ่มตัวของออกซิเจนได้
คุณสมบัติของโมดูล MAX30102 พร้อมเซ็นเซอร์ชีพจรและออกซิเจนในเลือด
MAX30102 ประกอบด้วย:
- ไฟ LED 2 ดวง สีแดงหนึ่งดวง (660 นาโนเมตร) และอินฟราเรดหนึ่งดวง (880 นาโนเมตร)
- โฟโตไดโอด 2x เพื่อวัดแสงสะท้อน
- ตัวแปลง ADC 18 บิตพร้อมอัตราการสุ่มตัวอย่าง 50 ถึง 3200 ตัวอย่างต่อวินาที
- นอกจากนี้ ยังมีอุปกรณ์อิเล็กทรอนิกส์ที่จำเป็นสำหรับการขยายและการกรองสัญญาณ การยกเลิกแสงโดยรอบ การปฏิเสธความถี่ 50-60Hz (แสงประดิษฐ์) และการชดเชยอุณหภูมิ
ปริมาณการใช้โมดูล สามารถเข้าถึงได้ถึง 50mA ในระหว่างการวัด แม้ว่าสามารถปรับความเข้มได้โดยทางโปรแกรม โดยมีโหมดพลังงานต่ำที่ 0.7µA ในระหว่างการวัด
Precio y dóndeประกอบด้วย
เซ็นเซอร์ MAX30102 เพื่อวัดชีพจรและออกซิเจนในเลือด พวกเขาค่อนข้างถูก. โมดูลเหล่านี้สามารถเป็นของคุณได้ในราคาเพียงไม่กี่ยูโรบนเว็บไซต์เช่น eBay, Aliexpress หรือ Amazon คุณจะเห็นว่ามีหลายประเภทและเราขอแนะนำดังต่อไปนี้:
การเชื่อมต่อและตัวอย่างกับ Arduino
ในการทดสอบ MAX30102 กับ Arduino สิ่งแรกคือการเชื่อมต่อโมดูลนี้เข้ากับบอร์ด Arduino นี้ การเชื่อมต่อนั้นง่ายมากคุณเพียงแค่ต้องเชื่อมต่อสิ่งต่อไปนี้:
- Vcc ของโมดูลต้องเชื่อมต่อกับเอาต์พุต 5V ของบอร์ด Arduino
- GND ของโมดูลจะต้องเชื่อมต่อกับซ็อกเก็ต GND ของบอร์ด Arduino
- ต้องเชื่อมต่อ SCL ของโมดูลเข้ากับอินพุตอะนาล็อกตัวใดตัวหนึ่งของบอร์ด Arduino เช่น A5
- SDA ของโมดูลจะต้องเชื่อมต่อกับอินพุตอะนาล็อกอื่นของบอร์ด Arduino เช่น A4
เมื่อสร้างการเชื่อมต่อที่เหมาะสมระหว่างบอร์ด MAX30102 และบอร์ด Arduino แล้ว สิ่งต่อไปคือการเขียนซอร์สโค้ดหรือภาพร่างเพื่อให้ทำงานได้ และเริ่มรับข้อมูลไบโอเมตริกซ์จากบุคคลที่เป็นปัญหา ง่ายเหมือนกับการเขียนโค้ดต่อไปนี้ลงไป Arduino IDE และตั้งโปรแกรมบอร์ด:
#include <Wire.h> #include "MAX30105.h" #include "spo2_algorithm.h" MAX30102 pulsioximetro; #define MAX_BRIGHTNESS 255 #if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) //Arduino Uno no tiene suficiente SRAM para almacenar 100 muestreos, por lo que hay que truncar las muestras en 16-bit MSB. uint16_t pulsoBuffer[100]; //infrared LED sensor data uint16_t oxiBuffer[100]; //red LED sensor data #else uint32_t pulsoBuffer[100]; //Sensores uint32_t oxiBuffer[100]; #endif int32_t BufferLongitud; //Longitud de datos int32_t spo2; //Valor de SPO2 int8_t SPO2valido; //Indicador de validez del valor SPO2 int32_t rangopulsacion; //PR BPM o pulsaciones int8_t validrangopulsacion; //Indicador de validez del valor PR BPM byte pulsoLED = 11; //Pin PWM byte lecturaLED = 13; //Titila con cada lectura void setup() { Serial.begin(115200); // Inicia la comunicación con el microcontrolador a 115200 bits/segundo pinMode(pulsoLED, OUTPUT); pinMode(lecturaLED, OUTPUT); // Inicializar sensores if (!pulsioximetro.begin(Wire, I2C_SPEED_FAST)) //Usar el bus I2C a 400kHz { Serial.println(F("MAX30102 no encontrado. Por favor, comprueba la conexión y alimentación del módulo.")); while (1); } Serial.println(F("Pon el sensor en contacto con tu dedo y presiona cualquier tecla para iniciar la conversión.")); while (Serial.available() == 0) ; //Esperar hasta que se pulsa una tecla Serial.read(); byte brilloLED = 60; //Opciones: 0=Apagado hasta 255=50mA byte mediaMuestreo = 4; //Opciones: 1, 2, 4, 8, 16, 32 byte ModoLED = 2; //Opciones: 1 = Rojo solo, 2 = Rojo + IR, 3 = Rojo + IR + Verde byte rangoMuestreo = 100; //Opciones: 50, 100, 200, 400, 800, 1000, 1600, 3200 int anchoPulso = 411; //Opciones: 69, 118, 215, 411 int rangoADC = 4096; //Opciones: 2048, 4096, 8192, 16384 pulsioximetro.setup(brilloLED, mediaMuestreo, ModoLED, rangoMuestreo, anchoPulso, rangoADC); //Configuración del módulo } void loop() { BufferLongitud = 100; //10 almacenamientos en el buffer con 4 segundos corriendo a 25sps //Leer las primeras 100 muestras for (byte i = 0 ; i < BufferLongitud ; i++) { while (pulsioximetro.available() == false) //Comprobar nuevos datos pulsioximetro.check(); oxiBuffer[i] = pulsioximetro.getRed(); pulsoBuffer[i] = pulsioximetro.getIR(); pulsioximetro.siguienteMuestreo(); //Muestreo terminado, ir al siguiente muestreo Serial.print(F("red=")); Serial.print(oxiBuffer[i], DEC); Serial.print(F(", ir=")); Serial.println(pulsoBuffer[i], DEC); } //Calcular el valor del pulso PM y SpO2 tras los primeros 100 samples maxim_heart_rate_and_oxygen_saturation(pulsoBuffer, BufferLongitud, oxiBuffer, &spo2, &SPO2valido, &rangopulsacion, &validrangopulsacion); //Calcular muestreos continuos while (1) { //Volcar los 25 primeros valores en memoria y desplazar los últimos 75 arriba for (byte i = 25; i < 100; i++) { oxiBuffer[i - 25] = oxiBuffer[i]; pulsoBuffer[i - 25] = pulsoBuffer[i]; } for (byte i = 75; i < 100; i++) { while (pulsioximetro.available() == false) //Comprobar si existen nuevos datos pulsioximetro.check(); digitalWrite(lecturaLED, !digitalRead(lecturaLED)); //Parpadea el LED on-board con cada dato oxiBuffer[i] = pulsioximetro.getRed(); pulsoBuffer[i] = pulsioximetro.getIR(); pulsioximetro.siguienteMuestreo(); //Al finalizar, moverse al siguiente muestreo Serial.print(F("Oxígeno=")); Serial.print(oxiBuffer[i], DEC); Serial.print(F(", Pulso=")); Serial.print(pulsoBuffer[i], DEC); Serial.print(F(", HR=")); Serial.print(rangopulsacion, DEC); Serial.print(F(", HRvalid=")); Serial.print(validrangopulsacion, DEC); Serial.print(F(", SPO2=")); Serial.print(spo2, DEC); Serial.print(F(", SPO2 válido=")); Serial.println(SPO2valido, DEC); } //Recalcular tras los primeros muestreos maxim_heart_rate_and_oxygen_saturation(pulsoBuffer, BufferLongitud, oxiBuffer, &spo2, &SPO2valido, &rangopulsacion, &validrangopulsacion); } }
แน่นอนว่าคุณสามารถแก้ไขโค้ดได้ตามความต้องการ นี่เป็นเพียงตัวอย่าง...