Kogu selle aja jooksul oleme näidanud suurt hulka Elektroonilised osad ühildub seadmega lauad nagu Arduino või ühilduvad, aga ka paljude muude tegija- või isetegemistööde jaoks. Nüüd tutvustame teile moodulit MAX30102, mis sisaldab andurit pulsi ja vere hapniku mõõtmiseks.
Sel viisil saate luua ka kantavaid esemeid, näiteks isetehtud tegevuskäevõrusid või riistvara jälgida tervislikku seisundit isiku biomeetrilisi või telemeetrilisi andmeid edastades tänu südame löögisageduse monitori ja oksümeetri integreerimisele sellesse seadmesse...
Mis on pulsikell? Kuidas see töötab?
Un pulsiandur või pulsikell See on elektrooniline seade, mida kasutatakse inimese südame löögisageduse reaalajas mõõtmiseks. Seda kasutatakse peamiselt spordiväljakul, et jälgida sooritust ja pingutust treeningu ajal või igapäevaselt. Pulsikellad on sportlaste seas populaarsed, kuid need on ka meditsiinikeskustes põhiseade pulsisageduse ehk pulsisageduse või löökide määramiseks minutis:
- PR Bpm: näitab pulsisagedust, st lööki minutis.
Kõigil juhtudel on Andurid fikseerivad veremahu kõikumised iga südamelöögiga. See variatsioon teisendatakse elektriliseks signaaliks, mida töödeldakse südame löögisageduse saamiseks. Mõned pulsikellad sisaldavad näitude täpsuse parandamiseks ka võimendus- ja mürasummutusahelaid.
Mis on oksümeeter? Kuidas see töötab?
Un oksimeeter on meditsiini- või spordiseade mida kasutatakse vere hapnikuküllastuse mõõtmiseks. See seade pakub vere hapnikuga küllastumise andmeid väärtustega 0 kuni 100%. On tavaline, et sama seade sisaldab ka pulsivalikut, mis näitab kogu jälgimiseks või salvestamiseks vajalikku teavet.
Los datos Quee mõõdab oksümeetrit on:
- %SpO2: viitab hapniku küllastumise protsendile veres.
Oksümeeter on paigutatud nagu klamber nii, et see on kohandatud meie sõrme morfoloogiaga või seda saab asetada ka mujale kehal, nagu pulsikella puhul, näiteks randmele, võib näha paljudes tegevuskäevõrudes. ,
Seoses nende tööga eraldavad oksümeetrid erinevat valguse lainepikkused mis läbivad nahka. Sellele valgusele mõjub hemoglobiin, hapniku transportimise eest vastutav veremolekul, mis neelab erineva koguse valgust olenevalt transporditava hapniku tasemest. Üksikasjalik protsess on järgmine:
- valguse emissioon- Oksümeeter kiirgab kahte lainepikkust valgust, ühte punast ja teist infrapuna, mis läbivad seadmele asetatud sõrme.
- Valguse neeldumine: Hemoglobiin, punaste vereliblede molekul, mis kannab hapnikku, neelab erinevas koguses neid valguseid. Hapnikuga täidetud hemoglobiinil (oksühemoglobiinil) ja hapnikuvabal hemoglobiinil (desoksühemoglobiinil) on erinevad valguse neeldumisomadused.
- Valguse tuvastamine: Valguskiirguri vastasküljel asuv detektor kogub sõrmest läbi käinud valguse.
- Hapnikuküllastuse arvutamine- Seade arvutab oksühemoglobiini ja olemasoleva hemoglobiini koguhulga, nii oksühemoglobiini kui ka desoksühemoglobiini. See osakaal on esitatud vere hapnikuga küllastumise protsendina (%SpO2). Seda tehakse protsessori kaudu, mis on võimeline neid elektrilisi signaale tõlgendama, et muuta need arvväärtuseks.
Mis on moodul MAX30102?
Andur MAX30102, tootja Maxim Integrated, on integreeritud seade, mis ühendab endas pulsikella ja oksümeetri funktsioonid. Seda andurit saab hõlpsasti kasutada mikrokontrolleriga, näiteks Arduinoga. MAX30102 kuulub selle ettevõtte MAX3010x optiliste andurite seeriasse.
Selle töö põhineb vere valguse neeldumise muutumisel, sõltuvalt sellest hapnikuga küllastatuse tase ja pulss nagu ma kahes eelmises osas mainisin. See andur on varustatud kahe LED-iga, üks punane ja teine infrapuna. See asetatakse nahale, näiteks sõrmele või randmele, ja tuvastab peegeldunud valguse, et määrata hapnikuküllastuse aste.
Side MAX30102-ga toimub I2C bussi kaudu, mistõttu on lihtne ühendada mikrokontrolleriga, näiteks Arduinoga. MAX30102 vajab topelt toiteallikat: loogika jaoks 1.8 V ja LED-ide jaoks 3.3 V. Tavaliselt leidub 5 V moodulitel, mis juba sisaldavad vajalikku taseme sobitamist.
La optiline pulssoksümeetria See on mitteinvasiivne meetod vere hapnikuküllastuse protsendi määramiseks. Nagu ma varem mainisin, põhineb see hemoglobiini (Hb) ja oksühemoglobiini (HbO2) valguse neeldumistegurite erinevusel erinevatel lainepikkustel. Hapnikurikas veri neelab rohkem infrapunavalgust, madala hapnikusisaldusega veri aga rohkem punast valgust. Kehapiirkondades, kus nahk on piisavalt õhuke ja selle all on veresooned, saab seda erinevust kasutada hapnikuküllastuse määra määramiseks.
Pulsi ja vere hapnikuanduriga mooduli MAX30102 omadused
MAX30102 sisaldab:
- 2x LED-i, üks punane (660nm) ja üks infrapuna (880nm)
- 2x fotodioodi peegeldunud valguse mõõtmiseks
- 18-bitine ADC-muundur, mille diskreetimissagedus on 50 kuni 3200 proovi sekundis.
- Lisaks on sellel vajalik elektroonika signaali võimendamiseks ja filtreerimiseks, ümbritseva valguse kustutamiseks, sageduste 50-60Hz (tehisvalgus) tagasilükkamiseks ja temperatuuri kompenseerimiseks.
Mooduli tarbimine võib ulatuda kuni 50 mA-ni mõõtmise ajal, kuigi intensiivsust saab programmiliselt reguleerida, madala võimsusega 0.7 µA mõõtmise ajal.
Hind ja kust osta
MAX30102 andurid pulsi ja vere hapniku mõõtmiseks need on üsna odavad. Need moodulid võivad olla teie omad vaid mõne euro eest sellistel saitidel nagu eBay, Aliexpress või Amazon. Näete, et neid on mitut tüüpi, ja soovitame järgmist.
Ühendused ja näide Arduinoga
MAX30102 testimiseks Arduinoga tuleb kõigepealt ühendada see moodul Arduino plaadiga. See ühendus on väga lihtne, peate lihtsalt ühendama järgmise:
- Mooduli Vcc tuleb ühendada Arduino plaadi 5V väljundiga.
- Mooduli GND tuleb ühendada Arduino plaadi GND pesaga.
- Mooduli SCL tuleb ühendada ühe Arduino plaadi analoogsisendiga, näiteks A5.
- Mooduli SDA tuleb ühendada mõne teise Arduino plaadi analoogsisendiga, näiteks A4.
Kui sobivad ühendused MAX30102 plaadi ja Arduino plaadi vahel on loodud, tuleb järgmiseks kirjutada lähtekood või visand selle toimimiseks ja alustada biomeetriliste andmete vastuvõtmist kõnealuselt isikult. See on sama lihtne kui järgmise koodi sisestamine Arduino IDE ja programmeerige tahvel:
#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); } }
Loomulikult saate koodi muuta vastavalt oma vajadustele, see on vaid näide...