I al denne tid har vi vist et stort antal af Elektroniske komponenter kompatibel med boards som Arduino eller kompatible, såvel som til mange andre maker- eller gør-det-selv-job. Nu vil vi introducere dig til modulet MAX30102, som inkluderer en sensor til at måle puls og blodilt.
På den måde kan du også skabe wearables såsom selvfremstillede aktivitetsarmbånd eller hardware til overvåge helbredstilstand af en person, der leverer biometriske data eller telemetri af denne person takket være integrationen af pulsmåleren og oximeteret i denne enhed...
Hvad er en pulsmåler? Hvordan virker det?
Un pulssensor eller pulsmåler Det er en elektronisk enhed, der bruges til at måle en persons puls i realtid. Det bruges hovedsageligt på sportsområdet til at overvåge ydeevne og indsats under træning eller på daglig basis. Pulsmålere er populære blandt atleter, men de er også en grundlæggende enhed i medicinske centre til at kende pulsen, det vil sige pulsen eller slag i minuttet:
- PR Bpm: viser hjertefrekvensen, det vil sige slag i minuttet.
I alle tilfælde Sensorer fanger variation i blodvolumen med hvert hjerteslag. Denne variation omsættes til et elektrisk signal, der behandles for at opnå hjertefrekvensen. Nogle pulsmålere inkluderer også forstærknings- og støjreduktionskredsløb for at forbedre nøjagtigheden af aflæsningerne.
Hvad er et oximeter? Hvordan virker det?
Un oximeter er et medicinsk eller sportsudstyr som bruges til at måle iltmætning i blodet. Denne enhed tilbyder blodiltmætningsdata med værdier fra 0 til 100%. Det er almindeligt, at den samme enhed også inkluderer pulsindstillingen, der angiver alle oplysninger til overvågning eller optagelse.
De data, der måler et oximeter Det er:
- %SpO2: refererer til procentdelen af iltmætning i blodet.
Oximeteret er placeret som en klemme på en sådan måde, at det er tilpasset morfologien af vores finger eller det kan også placeres andre steder på kroppen, som det er tilfældet med pulsmåleren, såsom håndleddet, som f.eks. kan ses i mange aktivitetsarmbånd. ,
Med hensyn til deres drift udsender oximetre forskelligt lys bølgelængder der passerer gennem huden. Det, der virker på dette lys, er hæmoglobin, et blodmolekyle, der er ansvarlig for at transportere ilt, der absorberer forskellige mængder lys afhængigt af niveauet af ilt, det transporterer. Den detaljerede proces er som følger:
- lysemission- Oximeteret udsender to bølgelængder af lys, en rød og en infrarød, som passerer gennem fingeren placeret på enheden.
- Lysabsorption: Hæmoglobin, et molekyle i røde blodlegemer, der transporterer ilt, absorberer forskellige mængder af disse lys. Iltfyldt hæmoglobin (oxyhæmoglobin) og iltfri hæmoglobin (deoxyhæmoglobin) har forskellige lysabsorberende egenskaber.
- lysdetektion: En detektor på den modsatte side af lysgiveren opsamler det lys, der er gået gennem fingeren.
- Beregning af iltmætning- Enheden beregner forholdet mellem oxyhæmoglobin og den samlede mængde hæmoglobin, der er til stede, både oxyhæmoglobin og deoxyhæmoglobin. Denne andel vises som procentdelen af blodets iltmætning (%SpO2). Dette gøres gennem en processor, der er i stand til at fortolke disse elektriske signaler for at oversætte dem til en numerisk værdi.
Hvad er MAX30102-modulet?
Sensoren MAX30102, produceret af Maxim Integrated, er en integreret enhed, der kombinerer funktionerne fra en pulsmåler og et oximeter. Denne sensor kan nemt bruges med en mikrocontroller såsom Arduino. MAX30102 tilhører MAX3010x-serien af optiske sensorer fra dette firma.
Dens funktion er baseret på variationen af lysabsorption af blodet, afhængigt af dets iltmætningsniveau og puls som jeg har nævnt i de to foregående afsnit. Denne sensor er udstyret med to LED'er, en rød og en infrarød. Den placeres på huden, såsom på fingeren eller håndleddet, og registrerer reflekteret lys for at bestemme graden af iltmætning.
Kommunikation med MAX30102 udføres via I2C bus, hvilket gør det nemt at forbinde til en mikrocontroller såsom Arduino. MAX30102 har brug for en dobbelt strømforsyning: 1.8V til logikken og 3.3V til LED'erne. Findes typisk på 5V-moduler, der allerede indeholder den nødvendige niveautilpasning.
La optisk pulsoximetri Det er en ikke-invasiv metode til at bestemme procentdelen af iltmætning i blodet. Som jeg nævnte før, er det baseret på forskellen i lysabsorptionskoefficienterne for hæmoglobin (Hb) og oxyhæmoglobin (HbO2) for forskellige bølgelængder. Blod rig på ilt absorberer mere infrarødt lys, mens blod med lavt iltindhold absorberer mere rødt lys. I områder af kroppen, hvor huden er tynd nok, og der er blodkar nedenunder, kan denne forskel bruges til at bestemme graden af iltmætning.
Funktioner i MAX30102-modulet med puls- og blodiltsensor
MAX30102 inkluderer:
- 2x LED'er, en rød (660nm) og en infrarød (880nm)
- 2x fotodioder til at måle reflekteret lys
- 18-bit ADC-konverter med en samplinghastighed på 50 til 3200 samples pr. sekund.
- Derudover har den den nødvendige elektronik til signalforstærkning og -filtrering, annullering af omgivende lys, afvisning af frekvenser på 50-60Hz (kunstigt lys) og temperaturkompensation.
Modulforbrug kan nå op til 50mA under måling, selvom intensiteten kan justeres programmæssigt, med en laveffekttilstand på 0.7µA under målinger.
Pris og hvor man kan købe
MAX30102-sensorerne til måling af puls og blodilt de er ret billige. Disse moduler kan være dine for blot et par euro på websteder som eBay, Aliexpress eller Amazon. Du vil se, at der er flere typer, og vi anbefaler følgende:
Forbindelser og eksempel med Arduino
For at teste MAX30102 med Arduino er den første ting at forbinde dette modul til Arduino-kortet. Det her forbindelsen er meget enkel, du skal blot tilslutte følgende:
- Vcc på modulet skal forbindes til 5V-udgangen på Arduino-kortet.
- GND på modulet skal forbindes til GND-stikket på Arduino-kortet.
- SCL på modulet skal forbindes til en af de analoge indgange på Arduino-kortet, såsom A5.
- SDA for modulet skal forbindes til en anden af de analoge indgange på Arduino-kortet, såsom A4.
Når de passende forbindelser er etableret mellem MAX30102-kortet og Arduino-kortet, vil den næste ting være at skrive en kildekode eller skitse for at få det til at fungere og begynde at modtage biometriske data fra den pågældende person. Dette er lige så nemt som at skrive følgende kode ind Arduino IDE og programmer bestyrelsen:
#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); } }
Selvfølgelig kan du ændre koden efter dine behov, dette er blot et eksempel...