Monitor de frecuencia cardíaca MAX30102 con Arduino Nano y LCD 16x2
Componentes y suministros
- Arduino Nano R3 × 1
- Sensor de frecuencia cardíaca MAX30102 × 1
- Pantalla LCD RGB 16x2 de Adafruit × 1
- Potenciómetro rotativo (genérico) × 1
Herramientas necesarias
- Soldador (genérico)
Aplicaciones y servicios en línea
- Arduino IDE
Sobre el proyecto
Este monitor de frecuencia cardíaca utiliza el sensor MAX30102 para medir pulsaciones por minuto (BPM) y mostrar los resultados en una pantalla LCD 16x2. La primera fila muestra el promedio de BPM y la segunda fila el valor de la señal infrarroja reflejada, que debe permanecer constante para lecturas precisas.
El algoritmo utilizado es el PBA (Penpheral Beat Amplitude) y se recomienda fijar el sensor al dedo con una goma elástica para mantener presión constante y evitar lecturas erráticas.
Conexiones de hardware
- MAX30102 VCC → 5V (también funciona a 3.3V)
- GND → GND
- SDA → A4 (o SDA)
- SCL → A5 (o SCL)
- INT → No conectado
- LCD: RS=12, E=11, D4=5, D5=4, D6=3, D7=2
Código
/* Detección óptica de frecuencia cardíaca (Algoritmo PBA) con MAX30105
By: Bennu @ MH-ET LIVE
Fecha: 2 de octubre de 2017
https://github.com/MHEtLive/MH-ET-LIVE-max30102
*/
#include <Wire.h>
#include "MAX30105.h"
#include <LiquidCrystal.h>
#include "heartRate.h"
MAX30105 particleSensor;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const byte RATE_SIZE = 4; // Aumentar para más promediado
byte rates[RATE_SIZE];
byte rateSpot = 0;
long lastBeat = 0;
float beatsPerMinute;
int beatAvg;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
Serial.println("Inicializando...");
if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) {
Serial.println("MAX30105 no encontrado. Verifique conexiones/alimentación.");
while (1);
}
Serial.println("Coloque el dedo índice en el sensor con presión constante.");
particleSensor.setup();
particleSensor.setPulseAmplitudeRed(0x0A);
particleSensor.setPulseAmplitudeGreen(0);
}
void loop() {
long irValue = particleSensor.getIR();
if (checkForBeat(irValue) == true) {
long delta = millis() - lastBeat;
lastBeat = millis();
beatsPerMinute = 60 / (delta / 1000.0);
if (beatsPerMinute < 255 && beatsPerMinute > 20) {
rates[rateSpot++] = (byte)beatsPerMinute;
rateSpot %= RATE_SIZE;
beatAvg = 0;
for (byte x = 0; x < RATE_SIZE; x++) beatAvg += rates[x];
beatAvg /= RATE_SIZE;
}
}
Serial.print("IR=");
Serial.print(irValue);
Serial.print(", BPM=");
Serial.print(beatsPerMinute);
Serial.print(", Avg BPM=");
Serial.print(beatAvg);
if (irValue < 50000) Serial.print(" ¿Sin dedo?");
Serial.println();
lcd.setCursor(0, 0);
lcd.print("BPM: ");
lcd.print(beatAvg);
lcd.setCursor(0, 1);
lcd.print(" IR: ");
lcd.print(irValue);
}
Esquemáticos
Diagrama de conexiones disponible en el proyecto original.
Proceso de manufactura
- Sistema de Monitorización Remota de Frecuencia Cardíaca con Alertas AWS IoT
- Crea un Impresionante Sistema Ambilight para Monitor con Arduino
- Crea Animaciones y Juegos en LCD 16×2 con Arduino UNO
- Monitor de Frecuencia Cardíaca IoT en Tiempo Real con Arduino y MAX30100
- Construye un Monitor de Frecuencia Cardíaca Preciso con Fotoresistencia y Arduino
- Monitor de voltaje de termopar para piloto de calentador de agua: alertas seguras por email y SMS
- Sistema Avanzado de Monitorización Doméstica con Arduino Mega y Sensores IoT
- Construye una Estación Meteorológica Arduino Fiable con Sensores DHT
- Construye un Monitor de Energía Inteligente Fiable con Arduino UNO – Guía Paso a Paso
- Construye un Juego Arcade Clásico con Arduino LCD, Zumbador y Joystick
- Sensores de Frecuencia Cardíaca Integrados en Ropa Inteligente: Monitorización Fiable