Munguva yose iyi, takaratidza nhamba huru ye Zvemagetsi zvigadzirwa inoenderana ne mapuranga akaita seArduino kana anowirirana, pamwe chete nemamwe akawanda ekugadzira kana DIY mabasa. Iye zvino tichakuzivisa iwe kune module MA30102, iyo inosanganisira sensor yekuyera pulse uye ropa reokisijeni.
Neiyi nzira, iwe unogona zvakare kugadzira zvinopfekeka senge ega ega mabhenji ekuita kana Hardware ye tarisa mamiriro ehutano yemunhu, ichipa biometric data kana telemetry yemunhu akadaro nekuda kwekubatanidzwa kweyero yekurova kwemoyo uye oximeter muchishandiso ichi...
Chii chinonzi heart rate monitor? Chinoshanda sei?
Un pulse sensor kana heart rate monitor Icho chinhu chemagetsi chinoshandiswa kuyera kurova kwemwoyo wemunhu munguva chaiyo. Inonyanya kushandiswa munhandare yemitambo kutarisa kuita uye kushanda nesimba panguva yekudzidziswa kana zuva nezuva. Vatariri vemoyo vanozivikanwa pakati pevatambi, asi zvakare chishandiso chakakosha munzvimbo dzekurapa kuziva kurova kwemoyo, ndiko kuti, kurova kwemoyo kana kurohwa paminiti:
- PR Bpm: inoratidza kurova kwemoyo, kureva, kurova paminiti.
Muzviitiko zvese, the Masensa anotora musiyano wehuwandu hweropa nekurova kwemoyo wega wega. Kusiyana uku kunoshandurirwa muchiratidzo chemagetsi chinogadziriswa kuti chiwane kurova kwemoyo. Mamwe mamonitor ekurova kwemoyo anosanganisirawo kukwidziridza uye kumisa ruzha maseketi kuti uvandudze huchokwadi hwekuverenga.
Chii chinonzi oximeter? Chinoshanda sei?
Un oximeter mudziyo wekurapa kana wemitambo iyo inoshandiswa kuyera kuzara kweokisijeni muropa. Ichi chishandiso chinopa dhata yeokisijeni yeropa ine kukosha kubva pa0 kusvika ku100%. Zvakajairika kuti mudziyo mumwe chete ubatanidze sarudzo yekurova kwemoyo, zvichiratidza ruzivo rwese rwekutarisa kana kurekodha.
Iyo data iyo inoyera oximeter es:
- %SpO2: inoreva chikamu chekuzara kweokisijeni muropa.
Iyo oximeter inoiswa sechibatiso nenzira yekuti inochinjirwa kune morphology yemunwe wedu kana inogona zvakare kuiswa kune dzimwe nzvimbo pamuviri, sezvazvakaita neyekurova kwemoyo, senge wrist, se inogona kuvonekwa mune akawanda mabracelets ekuita. ,
Nezvekushanda kwavo, oximeters inoburitsa zvakasiyana light wavelengths dzinopfuura nepaganda. Chinoshanda pachiedza ichi hemoglobin, morekuru reropa rinotakura okisijeni, richitora huwandu hwakasiyana hwechiedza zvichienderana nehuwandu hweokisijeni yainotakura. Detailed process ndeiyi inotevera:
- light emission- Iyo oximeter inoburitsa maviri wavelengths echiedza, imwe tsvuku uye imwe infrared, iyo inopfuura nepamunwe wakaiswa pachigadzirwa.
- Chiedza chekutora: Hemoglobin, morekuru riri mumasero matsvuku eropa anotakura oxygen, inotora zviyero zvakasiyana zvezviedza izvi. Oxygen-laden hemoglobin (oxyhemoglobin) neoxygen-isina hemoglobin (deoxyhemoglobin) zvine zvinhu zvakasiyana-siyana zvekutora chiedza.
- Kuonekwa kwechiedza: Detector kune rimwe divi remwenje emitter inounganidza mwenje wapfuura nepamunwe.
- Kuverengera kweokisijeni saturation- Chishandiso chinoverenga chiyero cheoxyhemoglobin kusvika kuhuwandu hwehemoglobin iripo, zvese oxyhemoglobin uye deoxyhemoglobin. Chikamu ichi chinounzwa sechikamu chekuzara kweokisijeni muropa (%SpO2). Izvi zvinoitwa kuburikidza nepurosesa inokwanisa kududzira aya masaini emagetsi kuti ashandure muhuwandu hwenhamba.
Chii chinonzi MAX30102 module?
Iyo sensor MAX30102, yakagadzirwa naMaxim Integrated, chigadzirwa chakabatanidzwa chinobatanidza kushanda kweyero yemoyo uye oximeter. Iyi sensor inogona kushandiswa nyore nyore ine microcontroller yakadai seArduino. Iyo MAX30102 ndeye MAX3010x yakatevedzana yeoptical sensors kubva kufemu iyi.
Kushanda kwaro kunobva pakusiyana kwekutorwa kwechiedza neropa, zvichienderana nezvayo oxygen saturation level, uye pulse sezvandambotaura muzvikamu zviviri zvakapfuura. Iyi sensor ine ma LED maviri, imwe tsvuku uye imwe infrared. Inoiswa paganda, senge pachigunwe kana chanza, uye inoona chiedza chakaratidzwa kuti ione dhigirii rekuzara kweokisijeni.
Kukurukurirana neMAX30102 kunoitwa kuburikidza neI2C bhazi, zvichiita kuti zvive nyore kubatana kune microcontroller yakadai seArduino. Iyo MAX30102 inoda kaviri magetsi ekupa: 1.8V yeiyo logic uye 3.3V ye LEDs. Kazhinji inowanikwa pa5V modules inotosanganisira inodiwa nhanho yekufananidza.
La optical pulse oximetry Iyo inzira isiri-invasive yekuona iyo muzana yekuzara kweokisijeni muropa. Sezvandambotaura kare, inobva pamusiyano wechiedza chekutora coefficients yehemoglobin (Hb) uye oxyhemoglobin (HbO2) yehuwandu hwakasiyana-siyana. Ropa rakapfuma muokisijeni rinotora mamwe mwenje we infrared, nepo ropa rakaderera muokisijeni rinotora rakawanda dzvuku. Munzvimbo dzemuviri umo ganda rakatetepa zvakakwana uye kune tsinga dzeropa pasi, musiyano uyu unogona kushandiswa kuona dhigirii rekuzara kweokisijeni.
Zvimiro zveMAX30102 module ine pulse uye ropa oxygen sensor
Iyo MAX30102 inosanganisira:
- 2x LEDs, imwe tsvuku (660nm) uye imwe infrared (880nm)
- 2x mafotodiodhi ekuyera chiedza chakaratidzwa
- 18-bit ADC converter ine sampling rate ye50 kusvika 3200 samples pasekondi.
- Pamusoro pezvo, ine magetsi anodiwa ekusimudzira chiratidzo uye kusefa, kudzima mwenje weambient, kurambwa kwema frequency e50-60Hz (artificial light) uye muripo wetembiricha.
Module kushandiswa inogona kusvika ku50mA panguva yekuyera, kunyange zvazvo simba racho rinogona kugadziriswa purogiramu, ine simba rakaderera re 0.7µA panguva yezviyero.
Mutengo uye kupi kwekutenga
Iyo MAX30102 sensors yekuyera pulse uye ropa oxygen zvakachipa kwazvo. Aya ma module anogona kuve ako kune mashoma maeuro pasaiti seBay, Aliexpress kana Amazon. Iwe uchaona kuti kune akati wandei marudzi, uye isu tinokurudzira zvinotevera:
Kubatanidza uye muenzaniso neArduino
Kuti uedze iyo MAX30102 neArduino, chinhu chekutanga kubatanidza iyi module kuArduino board. Izvi kubatana kuri nyore kwazvo, iwe unongofanirwa kubatanidza zvinotevera:
- Vcc yemodule inofanira kubatanidzwa kune 5V inobuda yeArduino board.
- GND yemodule inofanirwa kubatana kune GND socket yeArduino board.
- SCL yemodule inofanirwa kuve yakabatana kune imwe yeanalog yekupinza yeArduino board, senge A5.
- SDA yemodule inofanirwa kubatana kune imwe yeanalog yekupinda yeArduino board, senge A4.
Kana kubatanidzwa kwakakodzera kwave kusimbiswa pakati pe MAX30102 board neArduino board, chinotevera chichava chekunyora kodhi yekodhi kana sketch kuti iite kuti ishande uye kutanga kugamuchira biometric data kubva kumunhu ari mubvunzo. Izvi zviri nyore sekunyora kodhi inotevera mukati Arduino IDE uye kuronga bhodhi:
#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); } }
Ehe, iwe unogona kugadzirisa iyo kodhi zvinoenderana nezvaunoda, uyu ungori muenzaniso ...