Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Mida la frecuencia cardíaca y la SpO2 con MAX30102

Componentes y suministros

Arduino UNO
× 1
Adafruit OLED 128x32
× 1
Buzzer
× 1
Oxímetro de pulso de alta sensibilidad y sensor de frecuencia cardíaca Maxim Integrated MAX30102 para la salud vestible
× 1

Acerca de este proyecto

Introducción

Hola, en este tutorial vamos a conectar MAX30102:módulo de pulsioximetría y monitor de frecuencia cardíaca con placa Arduino UNO, y luego haremos un proyecto para medir BPM usando este módulo + pantalla OLED y un zumbador.

BPM son los "latidos por minuto" y están alrededor de 65-75 mientras descansa para una persona normal, el atletismo puede tener más bajo que eso, y la SpO2 es el nivel de saturación de oxígeno, y para una persona normal está por encima del 95%.

El MAX30102 se puede encontrar en diferentes módulos, tengo una versión WAVGAT, no es un problema siempre que el IC sea MAX30102.

Componentes

Estas son las cosas que voy a usar

Pruebas:

Los códigos que utilicé en el tutorial son bastante claros y son solo ejemplos de la biblioteca Sparkfun_MAX3010x.

Para el código que hice para OLED y Buzzer, es una versión modificada del ejemplo "HeartRate", te pide que pongas tu dedo en el sensor.

Una vez que ponga su dedo, mantenga la calma por un tiempo, hasta que comience a escuchar los "pitidos" del zumbador sincronizados con los latidos de su corazón o la animación OLED esté sincronizada con él, y luego pueda leer un BPM correcto.

N.B:En el código imprimo el BPM promedio, ya que tiene un promedio de 4 BPM, es más preciso, solo dale un poco de tiempo.

Crea mapas de bits para OLED

El corazón (pequeño) que ves es una imagen de mapa de bits, y cada vez que el sensor detecta un latido, cambiamos a otra imagen de mapa de bits de corazón (grande) por un tiempo y da la impresión de que un corazón late junto con un pitido del timbre.

Aquí están los dos mapas de bits en el código que llamamos más adelante en el código

Para hacer estos, busque una imagen (negra con fondo blanco) para lo que quiera ver en la pantalla, pero no se olvide del tamaño, la que estoy usando es de 128x32 px y las imágenes son más pequeñas que eso (32x32 px) y (24x21 px)

Descargue LCD Assistant y ábralo (algunos pasos a continuación)

Y aquí están sus "números"

Y así es como lo llamé en el código

  display.drawBitmap (5, 5, logo2_bmp, 24, 21, BLANCO);  

Lo que significa

  display.drawBitmap (Posición x inicial, Posición inicial y, Nombre del mapa de bits, Ancho, Alto, Color);  

Y como puede ver en el código, uno se llama cuando se detecta un dedo y el otro si se detecta un latido del corazón.

Y aquí tienes, haz lo que quieras.

Código

  • MAX_BPM_OLED_Buzzer.ino
MAX_BPM_OLED_Buzzer.ino Arduino
Modificado de la biblioteca SparkFun MAX3010x
 / * Este código funciona con MAX30102 + 128x32 OLED i2c + Buzzer y Arduino UNO * Muestra el BPM promedio en la pantalla, con una animación y un zumbador * cada vez que se detecta un pulso * Es una versión modificada del ejemplo de la biblioteca HeartRate * Consulte www.surtrtech.com para obtener más detalles o el canal SurtrTech de YouTube * / # include  // Las bibliotecas OLED # incluyen  #include  #include "MAX30105.h" // Biblioteca MAX3010x # incluye "heartRate.h" // Algoritmo de cálculo de frecuencia cardíacaMAX30105 ParticleSensor; const byte RATE_SIZE =4; // Aumente esto para obtener más promedios. 4 es una buena tasa de bytes [RATE_SIZE]; // Matriz de frecuencia cardíaca byte rateSpot =0; long lastBeat =0; // Hora a la que ocurrió el último latido flotador beatsPerMinute; int beatAvg; #define SCREEN_WIDTH 128 // Ancho de pantalla OLED, en píxeles # define SCREEN_HEIGHT 32 // Altura de pantalla OLED, en píxeles # define OLED_RESET -1 // Reset pin # (o -1 si comparte el pin de reinicio de Arduino) Pantalla Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); // Declarar el nombre para mostrar (mostrar) static const unsigned char PROGMEM logo2_bmp [] ={0x03, 0xC0, 0xF0, 0x06, 0x71, 0x8C, 0x0C, 0x1B, 0x06, 0x18, 0x0E, 0x02, 0x10, 0x0x0C, 0x02 , // Logo2 y Logo3 son dos imágenes bmp que se muestran en el OLED si se llaman 0x04, 0x01, 0x10, 0x04, 0x01, 0x10, 0x40, 0x01, 0x10, 0x40, 0x01, 0x10, 0xC0, 0x03, 0x08, 0x88,0x02, 0x08, 0xB8, 0x04, 0xFF, 0x37, 0x08, 0x01, 0x30, 0x18, 0x01, 0x90, 0x30, 0x00, 0xC0, 0x60,0x00, 0x60, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x1, 0x0E, 0x00, 0x00, 0x04, 0x00,}; static const unsigned char PROGMEM logo3_bmp [] ={0x01, 0xF0, 0x0F, 0x80, 0x06, 0x1C, 0x38, 0x60, 0x18, 0x06, 0x60, 0x18, 0x80, 0x08,0x20, 0x01, 0x80, 0x04, 0x40, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x02, 0xC0, 0x00, 0x08, 0x03,0x80, 0x00, 0x08, 0x18, 0x80, 0x80 0x01, 0x80, 0x00, 0x1C, 0x01, 0x80, 0x00, 0x14, 0x00,0x80, 0x00, 0x14, 0x00, 0x80, 0x00, 0x14, 0x00, 0x40, 0x10, 0x12, 0x00, 0x40, 0x10, 0x12, 0x00, 0x7E, 0x1F, 0x23, 0xFE, 0x03, 0 x31, 0xA0, 0x04, 0x01, 0xA0, 0xA0, 0x0C, 0x00, 0xA0, 0xA0, 0x08,0x00, 0x60, 0xE0, 0x10, 0x00, 0x20, 0x60, 0x20, 0x06, 0x00, 0x40, 0x03 0x40, 0xC0,0x01, 0x80, 0x01, 0x80, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x30, 0x0C, 0x00,0x00, 0x08, 0x10, 0x00, 0x06x00, 0x08 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x01, 0x80, 0x00}; configuración vacía () {display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // Inicie la pantalla OLED display.display (); retraso (3000); // Inicializar el sensor ParticleSensor.begin (Wire, I2C_SPEED_FAST); // Utilice el puerto I2C predeterminado, velocidad de 400kHz. ParticleSensor.setup (); // Configurar el sensor con la configuración predeterminada ParticleSensor.setPulseAmplitudeRed (0x0A); // Gire el LED rojo a bajo para indicar que el sensor está funcionando} void loop () {long irValue =partitionSensor.getIR (); // Leyendo el valor de IR nos permitirá saber si hay un dedo en el sensor o no // Detectando también un latido del corazón (irValue> 7000) {// Si se detecta un dedo display.clearDisplay (); // Limpia la pantalla display.drawBitmap (5, 5, logo2_bmp, 24, 21, WHITE); // Dibuja la primera imagen bmp (corazoncito) display.setTextSize (2); // Cerca de él muestra el promedio de BPM. Puede mostrar el BPM si desea display.setTextColor (WHITE); display.setCursor (50,0); display.println ("BPM"); display.setCursor (50,18); display.println (beatAvg); display.display (); if (checkForBeat (irValue) ==true) // Si se detecta un latido cardíaco {display.clearDisplay (); // Limpia la pantalla display.drawBitmap (0, 0, logo3_bmp, 32, 32, WHITE); // Dibuja la segunda imagen (corazón más grande) display.setTextSize (2); // Y aún muestra el promedio de BPM display.setTextColor (WHITE); display.setCursor (50,0); display.println ("BPM"); display.setCursor (50,18); display.println (beatAvg); display.display (); tono (3,1000); // Y entona el zumbador por 100ms puedes reducirlo será mejor delay (100); noTone (3); // Desactivar el timbre para que tenga el efecto de un "bip" // ¡Sentimos un latido! delta largo =millis () - lastBeat; // Medir la duración entre dos tiempos lastBeat =millis (); beatsPerMinute =60 / (delta / 1000.0); // Calculando el BPM if (beatsPerMinute <255 &&beatsPerMinute> 20) // Para calcular el promedio, registramos algunos valores (4) y luego hacemos algunos cálculos para calcular el promedio {rates [rateSpot ++] =(byte) beatsPerMinute; // Almacene esta lectura en la matriz rateSpot% =RATE_SIZE; // Ajustar variable // Tomar el promedio de lecturas beatAvg =0; para (byte x =0; x  
Biblioteca SparkFun MAX3010x
https://github.com/sparkfun/SparkFun_MAX3010x_Sensor_Library
Adafruit SSD1306
https://github.com/adafruit/Adafruit_SSD1306
Biblioteca Adafruit GFX
https://github.com/adafruit/Adafruit-GFX-Library

Esquemas

Ambos módulos tienen interfaz i²c, si está usando un zumbador de 2 pines (-) con GND y (+) con una resistencia, entonces D3

Proceso de manufactura

  1. Control de acceso con QR, RFID y verificación de temperatura
  2. Mide temperaturas con un sensor DS18B20 de 1 cable y Raspberry Pi
  3. Aeroponía con Raspberry Pi y sensor de humedad
  4. Monitor de frecuencia cardíaca remoto
  5. Creación de robots con Raspberry Pi y Python
  6. Portenta y sensor de termopar (con MAX6675)
  7. Juego de giroscopio Arduino con MPU-6050
  8. Monitor de frecuencia cardíaca con IoT
  9. Detectar la frecuencia cardíaca con un fotorresistor
  10. Galvanoplastia con cobre
  11. Componentes visuales y Matterport:nuevas posibilidades de automatización con ProFeeder X