Construye un Monitor de Frecuencia Cardíaca Preciso con Fotoresistencia y Arduino
Componentes y Suministros
| Digilent OpenScope MZ | 1 | Osciloscopio USB para visualizar forma de onda |
| Arduino UNO | 1 | Cálculo y visualización de BPM |
| Amplificador Operacional Cuádruple TI (ej. TL074/LM324) | 1 | 3 amplificadores: filtro, amplificador inversor, tierra virtual |
| Comparador Alta Velocidad TI (ej. TLV3201) | 1 | Conversión señal analógica a digital con histéresis |
| Potenciómetro Multivuelta 10k Ω (25 vueltas) | 2 | Umbrales comparador (R3, R4) – ajuste preciso |
| Potenciómetro Monovuelta 100k Ω | 1 | Ganancia amplificador (R7) – mejor multivuelta |
| Potenciómetro Monovuelta 10k Ω | 1 | |
| Condensador 100 µF | 1 | |
| Condensador 100 nF | 1 | |
| Resistencia 10k Ω | 2 | O una de 20k para divisor fotoresistencia |
| Resistencia 4.75k Ω | 1 | |
| Resistencia 82k Ω | 1 | O dos potenciómetros 100k ajustados a 82k |
Aplicaciones y Servicios Online
- Arduino IDE – Programación del Arduino
- Digilent WaveForms Live – Visualización de forma de onda en navegador (OpenScope)
Sobre el Proyecto
Introducción
Inspirado en un video de YouTube de CapitanoRed donde se construía un monitor de frecuencia cardíaca basado en fotoresistencia para visualizar en osciloscopio. Este proyecto replica el circuito analógico y añade un Arduino para calcular y mostrar los latidos por minuto (BPM). Así puedes ver la forma de onda en el osciloscopio mientras obtienes la lectura numérica.
Cuando el corazón bombea sangre, las fluctuaciones momentáneas de presión son detectables (pulso). En zonas donde la piel es fina, estos pulsos causan variaciones mínimas en la luz transmitida. Nuestros ojos no las perciben, pero una fotoresistencia sí.
Una fotoresistencia varía su resistencia con la intensidad de luz. Aunque el cambio sea pequeño, se amplifica con amplificadores operacionales.
Principios de Funcionamiento
Etapas del circuito:
- Divisor de tensión: Fotoresistencia + 20kΩ. Más luz → más voltaje en el divisor.
- Amp1 (Filtro): Elimina ruido de alta frecuencia.
- Amp2 (Amplificador inversor): Maximiza la señal filtrada.
- Amp3 (Tierra virtual): Centra la señal en 2.5V para máximo swing 0–5V.
Comparador con histéresis asimétrica: Un comparador simple generaría múltiples pulsos por latido debido al ruido y al "notch dicrótico" (segundo pico en la bajada). La histéresis usa realimentación desde la salida para cambiar el umbral: uno para subida (Vh) y otro para bajada (Vl), logrando un solo pulso cuadrado por latido.
Basado en documento de Texas Instruments sobre acondicionamiento de señales con histéresis (páginas 5 y 7).
Preparación de la Fotoresistencia
Recomendado: cubierta transparente (termorretráctil) sobre la fotoresistencia. Como mínimo, aislar los terminales para evitar contacto con la piel – los voltajes corporales están en el mismo rango que la señal del pulso y distorsionarían resultados.
Ajuste del Monitor
- R7 (Ganancia): Potenciómetro monovuelta. Inicio: ~375Ω lado filtro. Aumentar ganancia reduciendo resistencia si pulso pequeño; aumentar si hay recorte (clipping). Ver capturas de WaveForms Live.
- R3, R4 (Umbrales comparador): Potenciómetros multivuelta para precisión. R5 (10–100kΩ, medido exacto). Usa la hoja de cálculo adjunta (
comparator calcs.xlsx) para calcular R3/R4 según Vl, Vh y R5. - R8, R9 (Tierra virtual): Pueden ser un solo potenciómetro (pin central a entrada + del op-amp). Ajustar a 2.5V con multímetro u OpenScope.
Visualización en WaveForms Live
Conecta Canal 2 (azul) a salida Amp2, GND a protoboard. En WaveForms Live:
- Time → "1s"
- Trigger → OFF
- Osc Ch 1/2 → Offset 2.5V, Samples → lock → "1000"
Actualización ~4 seg. Pulsa RUN y coloca dedo en fotoresistencia (mejor: primera falange índice). Mantén presión constante. Ajusta ganancia si necesario.
Ajuste de Umbrales del Comparador
Con forma de onda representativa en pantalla, detén captura. Botón CURSORS → Type: Voltage, CursorChannels: Osc 2. Sitúa una línea cerca del pico, otra bajo el notch dicrótico. Anota los dos voltajes (paréntesis inferior). Menor = Vl, mayor = Vh. Introdúcelos en la hoja de cálculo junto con R5 para obtener R3 y R4.
Código Arduino
Contador de frecuencia con filtro de ancho de pulso (200–800 ms) para rechazar ruido. Promedio móvil sobre 15 segundos para suavizar lecturas perdidas por movimientos.
#define INT0 3
float frequency, freqAvg, total = 15;
long timeCount, pulseStart;
int counter, inputPin = 3;
boolean low;
void setup() {
attachInterrupt(digitalPinToInterrupt(INT0), intrruption, CHANGE);
counter = 0; timeCount = 0; frequency = 0; low = false;
Serial.begin(9600);
}
void loop() {
timeCount = millis();
while (millis() - timeCount < 5000) { frequency = counter; }
if (frequency > 3) {
total += frequency; total -= freqAvg; freqAvg = total / 3;
}
showHR(); counter = 0;
}
void intrruption() {
if (digitalRead(3) == 0) { fallDetect(); low = true; }
else if (digitalRead(3) == 1) { widthCheck(); }
}
void fallDetect() { pulseStart = millis(); }
void widthCheck() {
long pulseEnd = millis();
if ((pulseEnd - pulseStart > 200) && (pulseEnd - pulseStart < 800) && low) {
counter++; low = false;
}
}
void showHR() {
Serial.print("Heart rate = "); Serial.println(freqAvg * 12); // 5s → *12 = BPM
}
Mejoras Futuras
- LED integrado: Luz constante (rojo/IR) para independizarse de luz ambiente. Similar a oxímetros o sensores de móviles. Resultados prometedores en pruebas preliminares.
- Auto-ranging por software: Arduino detecta rango de señal, calcula umbrales óptimos y los aplica mediante potenciómetros digitales. Requiere interrupciones (pines digitales) para conteo preciso sin perder pulsos.
Código y Archivos
- comparator calcs.xlsx – Hoja de cálculo para calcular R3/R4 según R5, Vl, Vh
- Arduino Heart Rate Counter – Sketch completo (incluido arriba)
Esquemáticos
Archivo Fritzing: hr_monitor_tnffXlVQQV.fzz
Proceso de manufactura
- Desfibrilador externo: Historia, diseño y fabricación
- Corazón artificial: Tecnología, historia y perspectivas futuras
- Válvulas cardíacas artificiales: Tipos, historia e innovaciones futuras
- Visión Integral de los Electrocardiógrafos Modernos: Tecnología, Fabricación e Innovaciones Futuras
- Marcapasos: Tecnología Moderna Salvavidas para Trastornos del Ritmo Cardíaco
- Detección de Rayos con Raspberry Pi y AS3935: Guía Práctica
- Leer pulsos de frecuencia cardíaca con Windows 10 IoT Core en Raspberry Pi: guía paso a paso
- Sistema de Monitorización Remota de Frecuencia Cardíaca con Alertas AWS IoT
- Proteja su corazón: Hábitos esenciales para el Mes de la Salud Cardiaca en febrero
- Sensores de Frecuencia Cardíaca Integrados en Ropa Inteligente: Monitorización Fiable
- Medición de la firma magnética del núcleo de un solo átomo