Sensor de frecuencia cardiaca Oximetro MAX30102
- Chip
- MAX30102 (Maxim)
- Mide
- Pulso (BPM) y saturación de oxígeno (SpO2) estimada
- Alimentación
- 3,3 a 5 V en VIN (reguladores de 1,8 y 3,3 V en la placa)
- Comunicación
- I2C, dirección 0x57
Características
Sensor óptico de pulso y oxigenación: tiene un LED rojo, un LED infrarrojo y un fotodetector. Al apoyar el dedo mide la luz que vuelve; esa luz cambia con cada latido, y la diferencia entre la roja y la infrarroja permite estimar la saturación de oxígeno (SpO2). Se comunica por I2C.
Sirve para pulsómetros, relojes deportivos y prácticas de electrónica médica. No es un equipo médico: no lo uses para diagnosticar.
| Chip | MAX30102 (Maxim) |
|---|---|
| Mide | Pulso (BPM) y saturación de oxígeno (SpO2) estimada |
| Alimentación | 3,3 a 5 V en VIN (reguladores de 1,8 y 3,3 V en la placa) |
| Comunicación | I2C, dirección 0x57 |
| Luces | LED rojo (660 nm) e infrarrojo (880 nm) |
| Pines | VIN, SCL, SDA, INT, IRD, RD y GND |
¿Para qué sirve?
- Pulsómetros y relojes deportivos caseros
- Prácticas de electrónica médica en colegios y universidades
- Detectar si hay un dedo u objeto cerca (proximidad)
Diagrama de conexión de prueba
Placa usada: Arduino UNO
| Cable | Módulo | Arduino UNO | Nota |
|---|---|---|---|
| rojo | VIN | 5V | |
| negro | GND | GND | |
| amarillo | SCL | A5 | Reloj I2C |
| azul | SDA | A4 | Datos I2C |
Código de prueba
Instala desde el Gestor de librerías del IDE de Arduino: SparkFun MAX3010x Pulse and Proximity Sensor Library
// Prueba del MAX30102: detecta los latidos con la luz infrarroja que
// rebota en el dedo y muestra las pulsaciones por minuto (BPM).
#include <Wire.h>
#include "MAX30105.h" // la librería de SparkFun sirve para el MAX30102
#include "heartRate.h"
MAX30105 sensor;
const byte CANTIDAD = 4; // promedia los últimos 4 latidos
byte lecturas[CANTIDAD];
byte posicion = 0;
unsigned long ultimoLatido = 0;
unsigned long ultimoAviso = 0;
void setup() {
Serial.begin(115200);
if (!sensor.begin(Wire, I2C_SPEED_FAST)) {
Serial.println("No se encontró el MAX30102: revisa SDA (A4) y SCL (A5).");
while (true) {}
}
sensor.setup(); // configuración de fábrica de la librería
sensor.setPulseAmplitudeRed(0x0A); // LED rojo suave: indica que está encendido
Serial.println("Apoya la yema del dedo sobre el sensor, sin apretar.");
}
void loop() {
long ir = sensor.getIR(); // cuánta luz infrarroja vuelve
if (ir < 50000) { // sin dedo, vuelve muy poca luz
if (millis() - ultimoAviso > 2000) {
Serial.println("No hay dedo sobre el sensor");
ultimoAviso = millis();
}
return;
}
if (checkForBeat(ir)) { // la librería detectó un latido
unsigned long ahora = millis();
float bpm = 60000.0 / (ahora - ultimoLatido);
ultimoLatido = ahora;
if (bpm > 30 && bpm < 220) { // descarta lecturas imposibles
lecturas[posicion] = (byte)bpm;
posicion = (posicion + 1) % CANTIDAD;
int suma = 0;
for (byte i = 0; i < CANTIDAD; i++) suma += lecturas[i];
Serial.print("Latido: ");
Serial.print((int)bpm);
Serial.print(" BPM Promedio: ");
Serial.println(suma / CANTIDAD);
}
}
}
Abre el Monitor serie a 115200 baudios y apoya la yema del dedo sin apretar y sin moverla; espera unos segundos a que se estabilice. La librería también trae un ejemplo de oxigenación (SpO2).
Precauciones
- No es un equipo médico: las lecturas son aproximadas y no sirven para diagnosticar.
- En algunos módulos verdes las resistencias del bus I2C van a 1,8 V y el Arduino UNO no los detecta. Si te pasa, revisa si tu placa tiene un puente para elegir 3,3 V (la guía de Luis Llamas explica el arreglo).
- La luz del ambiente y el movimiento alteran la lectura: mantén el dedo quieto y tapa el sensor.
- No aprietes el dedo contra el sensor: se corta la circulación y la lectura falla.
Fuentes consultadas: Luis Llamas: pulsioxímetro con MAX30102 · Circuit Digest: MAX30102 con Arduino · Librería SparkFun MAX3010x (GitHub). Ficha preparada por Electrodrone; verifica siempre el voltaje de tu módulo antes de conectarlo.