Pa visu šo laiku esam parādījuši lielu skaitu Elektroniskās sastāvdaļas savietojams ar dēļi, piemēram, Arduino vai saderīgi, kā arī daudziem citiem maker vai DIY darbiem. Tagad mēs jūs iepazīstināsim ar moduli MAX30102, kas ietver sensoru pulsa un asins skābekļa mērīšanai.
Tādā veidā jūs varat arī izveidot valkājamas preces, piemēram, pašdarinātas aktivitāšu aproces vai aparatūru uzraudzīt veselības stāvokli personas, kas nodrošina minētās personas biometriskos datus vai telemetriju, pateicoties pulsometra un oksimetra integrācijai šajā ierīcē...
Kas ir sirdsdarbības monitors? Kā tas darbojas?
Un pulsa sensors vai pulsometrs Tā ir elektroniska ierīce, ko izmanto, lai mērītu cilvēka sirdsdarbības ātrumu reāllaikā. To galvenokārt izmanto sporta jomā, lai uzraudzītu veiktspēju un piepūli treniņa laikā vai ikdienā. Pulsometri ir populāri sportistu vidū, taču tie ir arī fundamentāla ierīce medicīnas centros, lai uzzinātu sirdsdarbības ātrumu, tas ir, sirdsdarbības ātrumu vai sitienus minūtē:
- PR Bpm: parāda sirdsdarbības ātrumu, tas ir, sitienus minūtē.
Visos gadījumos, Sensori fiksē asins tilpuma izmaiņas ar katru sirdspukstu. Šī variācija tiek pārvērsta elektriskā signālā, kas tiek apstrādāts, lai iegūtu sirdsdarbības ātrumu. Dažos pulsometros ir iekļautas arī pastiprināšanas un trokšņu slāpēšanas shēmas, lai uzlabotu rādījumu precizitāti.
Kas ir oksimetrs? Kā tas darbojas?
Un oksimetrs ir medicīnas vai sporta ierīce ko izmanto skābekļa piesātinājuma mērīšanai asinīs. Šī ierīce piedāvā datus par asins piesātinājumu ar skābekli ar vērtībām no 0 līdz 100%. Ir ierasts, ka tajā pašā ierīcē ir iekļauta arī pulsa opcija, norādot visu informāciju, kas nepieciešama uzraudzībai vai ierakstīšanai.
Los datos rindā mēra oksimetru ir:
- %SpO2: attiecas uz skābekļa piesātinājuma procentuālo daudzumu asinīs.
Oksimetrs ir novietots kā skava tā, lai tas būtu pielāgots mūsu pirksta morfoloģijai vai to varētu novietot arī citās ķermeņa vietās, kā tas ir pulsometra gadījumā, piemēram, plaukstas locītavā, kā var redzēt daudzās aktivitāšu rokassprādzēs. ,
Attiecībā uz to darbību oksimetri izstaro atšķirīgi gaismas viļņu garumi kas iziet cauri ādai. Tas, kas iedarbojas uz šo gaismu, ir hemoglobīns, asins molekula, kas ir atbildīga par skābekļa transportēšanu, absorbējot dažādus gaismas daudzumus atkarībā no tā transportētā skābekļa līmeņa. Detalizēts process ir šāds:
- gaismas emisija- Oksimetrs izstaro divus gaismas viļņu garumus, vienu sarkano un otru infrasarkano, kas iziet cauri uz ierīces novietotajam pirkstam.
- Gaismas absorbcija: Hemoglobīns, sarkano asins šūnu molekula, kas nes skābekli, absorbē dažādu daudzumu šo gaismu. Ar skābekli piesātinātam hemoglobīnam (oksihemoglobīnam) un hemoglobīnam bez skābekļa (deoksihemoglobīnam) ir atšķirīgas gaismas absorbcijas īpašības.
- Gaismas noteikšana: Detektors gaismas emitētāja pretējā pusē savāc gaismu, kas izgājusi caur pirkstu.
- Skābekļa piesātinājuma aprēķins- Ierīce aprēķina oksihemoglobīna attiecību pret kopējo esošo hemoglobīna daudzumu, gan oksihemoglobīnu, gan deoksihemoglobīnu. Šī proporcija tiek parādīta kā asins skābekļa piesātinājuma procents (%SpO2). Tas tiek darīts, izmantojot procesoru, kas spēj interpretēt šos elektriskos signālus, lai pārvērstu tos skaitliskās vērtībās.
Kas ir MAX30102 modulis?
Sensors MAX30102, ražo Maxim Integrated, ir integrēta ierīce, kas apvieno sirdsdarbības monitora un oksimetra funkcijas. Šo sensoru var viegli izmantot ar mikrokontrolleri, piemēram, Arduino. MAX30102 pieder šīs firmas MAX3010x optisko sensoru sērijai.
Tās darbība balstās uz gaismas absorbcijas izmaiņām asinīs atkarībā no tā skābekļa piesātinājuma līmenis un pulss kā jau minēju divās iepriekšējās sadaļās. Šis sensors ir aprīkots ar divām gaismas diodēm, vienu sarkanu un otru infrasarkano. To novieto uz ādas, piemēram, uz pirksta vai plaukstas locītavas, un nosaka atstaroto gaismu, lai noteiktu skābekļa piesātinājuma pakāpi.
Tiek veikta saziņa ar MAX30102 caur I2C autobusu, atvieglojot savienojumu ar mikrokontrolleru, piemēram, Arduino. MAX30102 ir nepieciešams dubults barošanas avots: 1.8 V loģikai un 3.3 V gaismas diodēm. Parasti atrodams 5 V moduļos, kuros jau ir ietverta nepieciešamā līmeņa saskaņošana.
La optiskā pulsa oksimetrija Tā ir neinvazīva metode, lai noteiktu skābekļa piesātinājuma procentuālo daudzumu asinīs. Kā jau minēju iepriekš, tas ir balstīts uz hemoglobīna (Hb) un oksihemoglobīna (HbO2) gaismas absorbcijas koeficientu atšķirībām dažādiem viļņu garumiem. Ar skābekli bagātas asinis absorbē vairāk infrasarkanās gaismas, savukārt asinis ar zemu skābekļa saturu absorbē vairāk sarkanās gaismas. Ķermeņa zonās, kur āda ir pietiekami plāna un zem tās atrodas asinsvadi, šo atšķirību var izmantot, lai noteiktu skābekļa piesātinājuma pakāpi.
Moduļa MAX30102 īpašības ar pulsa un asins skābekļa sensoru
MAX30102 ietver:
- 2x gaismas diodes, viena sarkana (660nm) un viena infrasarkanā (880nm)
- 2x fotodiodes atstarotās gaismas mērīšanai
- 18 bitu ADC pārveidotājs ar paraugu ņemšanas ātrumu no 50 līdz 3200 paraugiem sekundē.
- Turklāt tam ir nepieciešamā elektronika signāla pastiprināšanai un filtrēšanai, apkārtējās gaismas atcelšanai, 50-60Hz frekvenču noraidīšanai (mākslīgā gaisma) un temperatūras kompensācijai.
Moduļa patēriņš var sasniegt līdz 50mA mērīšanas laikā, lai gan intensitāti var regulēt programmatiski, ar zemas jaudas režīmu 0.7 µA mērījumu laikā.
Precio y dónde salīdzinātājs
MAX30102 sensori pulsa un asins skābekļa mērīšanai tie ir diezgan lēti. Šie moduļi var būt jūsu rīcībā tikai par dažiem eiro tādās vietnēs kā eBay, Aliexpress vai Amazon. Jūs redzēsit, ka ir vairāki veidi, un mēs iesakām:
Savienojumi un piemērs ar Arduino
Lai pārbaudītu MAX30102 ar Arduino, vispirms ir jāpievieno šis modulis Arduino platei. Šis savienojums ir ļoti vienkāršs, jums vienkārši ir jāpievieno sekojošais:
- Moduļa Vcc jābūt savienotam ar Arduino plates 5V izeju.
- Moduļa GND ir jāpievieno Arduino plates GND ligzdai.
- Moduļa SCL ir jāpievieno vienai no Arduino plates analogajām ieejām, piemēram, A5.
- Moduļa SDA ir jāpievieno citai no Arduino plates analogajām ieejām, piemēram, A4.
Kad ir izveidoti atbilstošie savienojumi starp MAX30102 plati un Arduino plati, nākamā lieta būs uzrakstīt avota kodu vai skici, lai tas darbotos, un sākt saņemt biometriskos datus no attiecīgās personas. Tas ir tikpat vienkārši, kā ierakstīt tālāk norādīto kodu Arduino IDE un ieprogrammējiet dēli:
#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); } }
Protams, kodu var modificēt atbilstoši savām vajadzībām, šis ir tikai piemērs...