MAX30102: وحدة مراقبة معدل ضربات القلب ومقياس التأكسج لاردوينو

MAX30102

خلال كل هذا الوقت، أظهرنا عددًا كبيرًا من مكونات الكترونية متوافق مع لوحات مثل Arduino أو متوافقة، بالإضافة إلى العديد من وظائف التصنيع أو الأعمال اليدوية الأخرى. الآن سوف نقدم لك الوحدة MAX30102والذي يشتمل على حساس لقياس النبض والأكسجين في الدم.

بهذه الطريقة، يمكنك أيضًا إنشاء أجهزة يمكن ارتداؤها مثل أساور الأنشطة ذاتية الصنع أو الأجهزة الخاصة بها مراقبة الحالة الصحية لشخص ما، توفير البيانات البيومترية أو القياس عن بعد للشخص المذكور بفضل دمج جهاز مراقبة معدل ضربات القلب ومقياس التأكسج في هذا الجهاز...

ما هو جهاز قياس معدل ضربات القلب؟ كيف يعمل؟

Un مستشعر النبض أو مراقب معدل ضربات القلب هو جهاز إلكتروني يستخدم لقياس معدل ضربات قلب الشخص في الوقت الحقيقي. يستخدم بشكل أساسي في المجال الرياضي لمراقبة الأداء والجهد أثناء التدريب أو بشكل يومي. تحظى أجهزة مراقبة معدل ضربات القلب بشعبية كبيرة بين الرياضيين، ولكنها أيضًا من الأجهزة الأساسية في المراكز الطبية لمعرفة معدل ضربات القلب، أي معدل ضربات القلب أو عدد النبضات في الدقيقة:

  • العلاقات العامة نبضة في الدقيقة: يوضح معدل ضربات القلب، أي عدد النبضات في الدقيقة.

وفي جميع الأحوال فإن تلتقط المستشعرات الاختلاف في حجم الدم مع كل نبضة قلب. تتم ترجمة هذا الاختلاف إلى إشارة كهربائية تتم معالجتها للحصول على معدل ضربات القلب. تتضمن بعض أجهزة مراقبة معدل ضربات القلب أيضًا دوائر تضخيم وإلغاء الضوضاء لتحسين دقة القراءات.

ما هو مقياس التأكسج؟ كيف يعمل؟

Un مقياس التأكسج هو جهاز طبي أو رياضي والذي يستخدم لقياس تشبع الأكسجين في الدم. يقدم هذا الجهاز بيانات تشبع الأكسجين في الدم بقيم من 0 إلى 100%. ومن الشائع أن يشتمل نفس الجهاز أيضًا على خيار معدل ضربات القلب، مما يشير إلى جميع المعلومات للمراقبة أو التسجيل.

لوس داتوس كيو يقيس مقياس التأكسج هو:

  • ٪ SpO2: يشير إلى نسبة تشبع الأكسجين في الدم.

يتم وضع مقياس التأكسج مثل المشبك بحيث يتكيف مع شكل إصبعنا أو يمكن أيضًا وضعه في أماكن أخرى من الجسم، كما هو الحال مع جهاز مراقبة معدل ضربات القلب، مثل المعصم، يمكن رؤيتها في العديد من أساور النشاط.

فيما يتعلق بعملهم، تنبعث أجهزة قياس التأكسج بشكل مختلف الأطوال الموجية الخفيفة التي تمر عبر الجلد. وما يعمل على هذا الضوء هو الهيموجلوبين، وهو جزيء الدم المسؤول عن نقل الأكسجين، ويمتص كميات مختلفة من الضوء اعتمادًا على مستوى الأكسجين الذي ينقله. العملية التفصيلية هي كما يلي:

  1. انبعاث الضوء- يصدر مقياس التأكسج طولين موجيين من الضوء، أحدهما أحمر والآخر بالأشعة تحت الحمراء، ويمران عبر الإصبع الموضوع على الجهاز.
  2. امتصاص الضوء: الهيموجلوبين، وهو جزيء موجود في خلايا الدم الحمراء يحمل الأكسجين، يمتص كميات مختلفة من هذه الأضواء. الهيموجلوبين المحمل بالأكسجين (أوكسي هيموجلوبين) والهيموجلوبين الخالي من الأكسجين (ديوكسي هيموجلوبين) لهما خصائص امتصاص مختلفة للضوء.
  3. كشف الضوء: يقوم الكاشف الموجود على الجانب الآخر من باعث الضوء بجمع الضوء الذي مر عبر الإصبع.
  4. حساب تشبع الأكسجين- يقوم الجهاز بحساب نسبة الأوكسي هيموجلوبين إلى إجمالي كمية الهيموجلوبين الموجودة سواء الأوكسي هيموجلوبين والديوكسي هيموجلوبين. يتم تقديم هذه النسبة كنسبة مئوية من تشبع الأكسجين في الدم (٪ SpO2). ويتم ذلك من خلال معالج قادر على تفسير هذه الإشارات الكهربائية لترجمتها إلى قيمة عددية.

ما هي وحدة MAX30102؟

المستشعر MAX30102، من إنتاج شركة مكسيم المتكاملة، هو جهاز متكامل يجمع بين وظائف جهاز مراقبة معدل ضربات القلب ومقياس التأكسج. يمكن استخدام هذا المستشعر بسهولة مع وحدة التحكم الدقيقة مثل Arduino. ينتمي MAX30102 إلى سلسلة MAX3010x من أجهزة الاستشعار البصرية من هذه الشركة.

ويعتمد عملها على اختلاف امتصاص الدم للضوء، اعتمادًا على طاقته مستوى تشبع الأكسجين، والنبض كما ذكرت في القسمين السابقين. تم تجهيز هذا المستشعر بمصباحي LED، أحدهما أحمر والآخر يعمل بالأشعة تحت الحمراء. يتم وضعه على الجلد، مثل الإصبع أو المعصم، ويكشف الضوء المنعكس لتحديد درجة تشبع الأكسجين.

يتم الاتصال مع MAX30102 عبر حافلة I2Cمما يجعل من السهل الاتصال بوحدة التحكم الدقيقة مثل Arduino. يحتاج MAX30102 إلى مصدر طاقة مزدوج: 1.8 فولت للمنطق و3.3 فولت لمصابيح LED. توجد عادةً في وحدات 5 فولت التي تتضمن بالفعل مطابقة المستوى الضروري.

MAX30102 هو جهاز استشعار يستخدم في المشاريع المنزلية أو الرياضية، أي أنه قد لا يتمتع بالموثوقية والحساسية الكافية للاستخدام الطبي الاحترافي.

La قياس التأكسج النبضي البصري إنها طريقة غير جراحية لتحديد نسبة تشبع الأكسجين في الدم. وكما ذكرت من قبل فهو يعتمد على الفرق في معاملات امتصاص الضوء للهيموجلوبين (Hb) والأوكسيهيموجلوبين (HbO2) لأطوال موجية مختلفة. يمتص الدم الغني بالأكسجين قدرًا أكبر من الأشعة تحت الحمراء، بينما يمتص الدم المنخفض الأكسجين المزيد من الضوء الأحمر. وفي مناطق الجسم التي يكون فيها الجلد رقيقًا بدرجة كافية وتوجد تحته أوعية دموية، يمكن استخدام هذا الاختلاف لتحديد درجة تشبع الأكسجين.

ميزات وحدة MAX30102 مع مستشعر النبض والأكسجين في الدم

يتضمن MAX30102 ما يلي:

  • 2x مصابيح LED، واحدة حمراء (660 نانومتر) وواحدة تعمل بالأشعة تحت الحمراء (880 نانومتر)
  • 2x الثنائيات الضوئية لقياس الضوء المنعكس
  • محول ADC 18 بت مع معدل أخذ عينات من 50 إلى 3200 عينة في الثانية.
  • بالإضافة إلى ذلك، فهو يحتوي على الإلكترونيات اللازمة لتضخيم الإشارة وتصفيتها، وإلغاء الضوء المحيط، ورفض الترددات 50-60 هرتز (الضوء الاصطناعي) وتعويض درجة الحرارة.

استهلاك الوحدة يمكن أن تصل إلى 50mA أثناء القياس، على الرغم من أنه يمكن تعديل الكثافة برمجيًا، مع وضع طاقة منخفض يبلغ 0.7 ميكرو أمبير أثناء القياسات.

Precio y dónde composar

حساسات MAX30102 لقياس النبض والأكسجين في الدم إنها رخيصة جدًا. يمكن أن تكون هذه الوحدات ملكك مقابل بضعة يورو فقط على مواقع مثل eBay أو Aliexpress أو Amazon. ستجد أن هناك عدة أنواع، ونوصي بما يلي:

اتصالات وأمثلة مع اردوينو

اردوينو IDE ، أنواع البيانات ، البرمجة

لاختبار MAX30102 مع Arduino، أول شيء هو توصيل هذه الوحدة بلوحة Arduino. هذا الاتصال بسيط جدا، عليك فقط ربط ما يلي:

  1. يجب توصيل Vcc للوحدة بمخرج 5V للوحة Arduino.
  2. يجب أن يكون GND للوحدة متصلاً بمقبس GND الخاص بلوحة Arduino.
  3. يجب توصيل SCL للوحدة بأحد المدخلات التناظرية للوحة Arduino، مثل A5.
  4. يجب أن يتم توصيل SDA للوحدة بمدخل آخر من المدخلات التناظرية للوحة Arduino، مثل A4.

بمجرد إنشاء الاتصالات المناسبة بين لوحة MAX30102 ولوحة Arduino، سيكون الشيء التالي هو كتابة كود المصدر أو رسم تخطيطي لجعله يعمل والبدء في تلقي البيانات البيومترية من الشخص المعني. هذا سهل مثل كتابة الكود التالي اردوينو إيد وبرمجة اللوحة:

تحتاج أيضًا إلى تثبيت مكتبة في Arduino IDE لاستخدامها. تم تطوير المكتبة بواسطة SparkFun، وهي متاحة على https://github.com/sparkfun/SparkFun_MAX3010x_Sensor_Library.
#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);
  }
}

بالطبع يمكنك تعديل الكود حسب احتياجاتك، هذا مجرد مثال...


كن أول من يعلق

اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.