MAX30102: μονάδα παρακολούθησης καρδιακών παλμών και οξυμέτρου για Arduino

MAX30102

Σε όλο αυτό το διάστημα, έχουμε δείξει μεγάλο αριθμό από ΗΛΕΚΤΡΟΝΙΚΑ ΕΞΑΡΤΗΜΑΤΑ συμβατό με πλακέτες όπως το Arduino ή συμβατές, καθώς και για πολλές άλλες εργασίες κατασκευαστή ή DIY. Τώρα θα σας παρουσιάσουμε την ενότητα MAX30102, που περιλαμβάνει έναν αισθητήρα για τη μέτρηση του παλμού και του οξυγόνου του αίματος.

Με αυτόν τον τρόπο, μπορείτε επίσης να δημιουργήσετε φορητές συσκευές, όπως βραχιόλια δραστηριότητας ή υλικό για τη δική σας κατασκευή παρακολουθεί την κατάσταση της υγείας ενός ατόμου, παρέχοντας βιομετρικά δεδομένα ή τηλεμετρία του εν λόγω ατόμου χάρη στην ενσωμάτωση του μετρητή καρδιακών παλμών και του οξυμέτρου σε αυτή τη συσκευή...

Τι είναι η συσκευή παρακολούθησης καρδιακών παλμών; Πώς λειτουργεί;

Un αισθητήρα παλμών ή παρακολούθηση καρδιακών παλμών Είναι μια ηλεκτρονική συσκευή που χρησιμοποιείται για τη μέτρηση του καρδιακού παλμού ενός ατόμου σε πραγματικό χρόνο. Χρησιμοποιείται κυρίως στον αθλητικό χώρο για την παρακολούθηση της απόδοσης και της προσπάθειας κατά τη διάρκεια της προπόνησης ή σε καθημερινή βάση. Οι συσκευές παρακολούθησης καρδιακού ρυθμού είναι δημοφιλείς μεταξύ των αθλητών, αλλά είναι επίσης μια θεμελιώδης συσκευή στα ιατρικά κέντρα για να γνωρίζουν τον καρδιακό ρυθμό, δηλαδή τον καρδιακό ρυθμό ή τους παλμούς ανά λεπτό:

  • PR Bpm: δείχνει τον καρδιακό ρυθμό, δηλαδή τους παλμούς ανά λεπτό.

Σε όλες τις περιπτώσεις, το Οι αισθητήρες καταγράφουν τη διακύμανση του όγκου του αίματος με κάθε καρδιακό παλμό. Αυτή η παραλλαγή μεταφράζεται σε ένα ηλεκτρικό σήμα που υποβάλλεται σε επεξεργασία για να ληφθεί ο καρδιακός ρυθμός. Ορισμένες συσκευές παρακολούθησης καρδιακών παλμών περιλαμβάνουν επίσης κυκλώματα ενίσχυσης και ακύρωσης θορύβου για τη βελτίωση της ακρίβειας των μετρήσεων.

Τι είναι ένα οξύμετρο; Πώς λειτουργεί;

Un Το οξύμετρο είναι μια ιατρική ή αθλητική συσκευή που χρησιμοποιείται για τη μέτρηση του κορεσμού του οξυγόνου στο αίμα. Αυτή η συσκευή προσφέρει δεδομένα κορεσμού οξυγόνου αίματος με τιμές από 0 έως 100%. Είναι σύνηθες η ίδια συσκευή να περιλαμβάνει επίσης την επιλογή καρδιακών παλμών, υποδεικνύοντας όλες τις πληροφορίες για παρακολούθηση ή εγγραφή.

Λος datos que μετρά ένα οξύμετρο είναι:

  • %SpO2: αναφέρεται στο ποσοστό κορεσμού οξυγόνου στο αίμα.

Το οξύμετρο τοποθετείται σαν σφιγκτήρας με τέτοιο τρόπο ώστε να προσαρμόζεται στη μορφολογία του δακτύλου μας ή μπορεί να τοποθετηθεί και σε άλλα σημεία του σώματος, όπως συμβαίνει με το μετρητή καρδιακών παλμών, όπως ο καρπός, όπως μπορεί να δει σε πολλά βραχιόλια δραστηριότητας. ,

Όσον αφορά τη λειτουργία τους, τα οξύμετρα εκπέμπουν διαφορετικά μήκη κύματος φωτός που περνούν από το δέρμα. Αυτό που δρα σε αυτό το φως είναι η αιμοσφαιρίνη, ένα μόριο αίματος που είναι υπεύθυνο για τη μεταφορά οξυγόνου, απορροφώντας διαφορετικές ποσότητες φωτός ανάλογα με το επίπεδο οξυγόνου που μεταφέρει. Αναλυτικά η διαδικασία έχει ως εξής:

  1. εκπομπή φωτός- Το οξύμετρο εκπέμπει δύο μήκη κύματος φωτός, ένα κόκκινο και ένα υπέρυθρο, τα οποία περνούν από το δάχτυλο που είναι τοποθετημένο στη συσκευή.
  2. Απορρόφηση φωτός: Η αιμοσφαιρίνη, ένα μόριο στα ερυθρά αιμοσφαίρια που μεταφέρει οξυγόνο, απορροφά διαφορετικές ποσότητες από αυτά τα φώτα. Η φορτωμένη με οξυγόνο αιμοσφαιρίνη (οξυαιμοσφαιρίνη) και η αιμοσφαιρίνη χωρίς οξυγόνο (δεοξυαιμοσφαιρίνη) έχουν διαφορετικές ιδιότητες απορρόφησης φωτός.
  3. ανίχνευση φωτός: Ένας ανιχνευτής στην αντίθετη πλευρά του πομπού φωτός συλλέγει το φως που έχει περάσει από το δάχτυλο.
  4. Υπολογισμός κορεσμού οξυγόνου- Η συσκευή υπολογίζει την αναλογία της οξυαιμοσφαιρίνης προς τη συνολική ποσότητα αιμοσφαιρίνης που υπάρχει, τόσο της οξυαιμοσφαιρίνης όσο και της δεοξυαιμοσφαιρίνης. Αυτή η αναλογία παρουσιάζεται ως το ποσοστό κορεσμού οξυγόνου του αίματος (%SpO2). Αυτό γίνεται μέσω ενός επεξεργαστή ικανού να ερμηνεύσει αυτά τα ηλεκτρικά σήματα για να τα μεταφράσει σε μια αριθμητική τιμή.

Τι είναι η μονάδα MAX30102;

Ο αισθητήρας MAX30102, παραγωγή Maxim Integrated, είναι μια ενσωματωμένη συσκευή που συνδυάζει τις λειτουργίες ενός μετρητή καρδιακών παλμών και ενός οξύμετρου. Αυτός ο αισθητήρας μπορεί εύκολα να χρησιμοποιηθεί με έναν μικροελεγκτή όπως το Arduino. Ο MAX30102 ανήκει στη σειρά οπτικών αισθητήρων MAX3010x αυτής της εταιρείας.

Η λειτουργία του βασίζεται στη διακύμανση της απορρόφησης φωτός από το αίμα, ανάλογα με αυτό επίπεδο κορεσμού οξυγόνου και παλμός όπως ανέφερα στις δύο προηγούμενες ενότητες. Αυτός ο αισθητήρας είναι εξοπλισμένος με δύο LED, ένα κόκκινο και ένα υπέρυθρο. Τοποθετείται στο δέρμα, όπως στο δάχτυλο ή στον καρπό, και ανιχνεύει το ανακλώμενο φως για να καθορίσει τον βαθμό κορεσμού του οξυγόνου.

Πραγματοποιείται επικοινωνία με το MAX30102 μέσω λεωφορείου I2C, καθιστώντας εύκολη τη σύνδεση με μικροελεγκτή όπως το Arduino. Το MAX30102 χρειάζεται διπλό τροφοδοτικό: 1.8 V για τη λογική και 3.3 V για τα LED. Βρίσκεται συνήθως σε μονάδες 5V που περιλαμβάνουν ήδη την απαραίτητη αντιστοίχιση επιπέδου.

Ο MAX30102 είναι ένας αισθητήρας που χρησιμοποιείται σε οικιακά ή αθλητικά έργα, δηλαδή μπορεί να μην έχει επαρκή αξιοπιστία και ευαισθησία για επαγγελματική ιατρική χρήση.

La οπτική παλμική οξυμετρία Είναι μια μη επεμβατική μέθοδος για τον προσδιορισμό του ποσοστού κορεσμού οξυγόνου στο αίμα. Όπως προανέφερα, βασίζεται στη διαφορά στους συντελεστές απορρόφησης φωτός της αιμοσφαιρίνης (Hb) και της οξυαιμοσφαιρίνης (HbO2) για διαφορετικά μήκη κύματος. Το αίμα πλούσιο σε οξυγόνο απορροφά περισσότερο υπέρυθρο φως, ενώ το αίμα με χαμηλή περιεκτικότητα σε οξυγόνο απορροφά περισσότερο κόκκινο φως. Σε περιοχές του σώματος όπου το δέρμα είναι αρκετά λεπτό και υπάρχουν αιμοφόρα αγγεία από κάτω, αυτή η διαφορά μπορεί να χρησιμοποιηθεί για τον προσδιορισμό του βαθμού κορεσμού οξυγόνου.

Χαρακτηριστικά της μονάδας MAX30102 με αισθητήρα παλμών και οξυγόνου αίματος

Το MAX30102 περιλαμβάνει:

  • 2 x LED, ένα κόκκινο (660nm) και ένα υπέρυθρο (880nm)
  • 2x φωτοδίοδοι για τη μέτρηση του ανακλώμενου φωτός
  • Μετατροπέας ADC 18-bit με ρυθμό δειγματοληψίας από 50 έως 3200 δείγματα ανά δευτερόλεπτο.
  • Επιπλέον διαθέτει τα απαραίτητα ηλεκτρονικά για ενίσχυση και φιλτράρισμα σήματος, ακύρωση φωτός περιβάλλοντος, απόρριψη συχνοτήτων 50-60Hz (τεχνητό φως) και αντιστάθμιση θερμοκρασίας.

Κατανάλωση μονάδας μπορεί να φτάσει έως και 50 mA κατά τη διάρκεια της μέτρησης, αν και η ένταση μπορεί να ρυθμιστεί προγραμματικά, με λειτουργία χαμηλής ισχύος 0.7 μA κατά τη διάρκεια των μετρήσεων.

Προτιμ

Οι αισθητήρες MAX30102 για τη μέτρηση του παλμού και του οξυγόνου του αίματος είναι αρκετά φθηνά. Αυτά τα modules μπορούν να γίνουν δικά σας με λίγα μόνο ευρώ σε ιστότοπους όπως το eBay, το Aliexpress ή το Amazon. Θα δείτε ότι υπάρχουν διάφοροι τύποι και σας προτείνουμε τα εξής:

Συνδέσεις και παράδειγμα με το Arduino

Arduino IDE, τύποι δεδομένων, προγραμματισμός

Για να δοκιμάσετε το MAX30102 με το Arduino, το πρώτο πράγμα είναι να συνδέσετε αυτήν την ενότητα στην πλακέτα Arduino. Αυτό η σύνδεση είναι πολύ απλή, πρέπει απλώς να συνδέσετε τα εξής:

  1. Το Vcc της μονάδας πρέπει να συνδεθεί στην έξοδο 5V της πλακέτας Arduino.
  2. Το GND της μονάδας πρέπει να συνδεθεί στην υποδοχή GND της πλακέτας Arduino.
  3. Το SCL της μονάδας πρέπει να συνδεθεί σε μία από τις αναλογικές εισόδους της πλακέτας Arduino, όπως το A5.
  4. Το SDA της μονάδας πρέπει να συνδεθεί με μια άλλη από τις αναλογικές εισόδους της πλακέτας Arduino, όπως το A4.

Μόλις δημιουργηθούν οι κατάλληλες συνδέσεις μεταξύ της πλακέτας MAX30102 και της πλακέτας Arduino, το επόμενο πράγμα θα είναι να γράψετε έναν πηγαίο κώδικα ή ένα σκίτσο για να λειτουργήσει και να αρχίσετε να λαμβάνετε βιομετρικά δεδομένα από το εν λόγω άτομο. Αυτό είναι τόσο εύκολο όσο να γράψετε τον παρακάτω κώδικα Arduino IDE και προγραμματίστε τον πίνακα:

Πρέπει επίσης να εγκαταστήσετε μια βιβλιοθήκη στο 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);
  }
}

Φυσικά, μπορείτε να τροποποιήσετε τον κωδικό σύμφωνα με τις ανάγκες σας, αυτό είναι μόνο ένα παράδειγμα...


Γίνε ο πρώτος που θα σχολιάσει

Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: Miguel Ángel Gatón
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.