SP-203 Sensor de Pulso / Ritmo Cardiaco para Arduino

[SP-203] SP-203 Sensor de Pulso / Ritmo Cardiaco para Arduino

https://electrofranko.com/web/image/product.template/1142/image_1920?unique=c7e4710

S/ 19.00 19.0 PEN S/ 19.00

S/ 19.00

Not Available For Sale

Esta combinación no existe.

Términos y condiciones
Envío: 2-3 días laborales


Referencia Interna: SP-203

Sensor de Pulso y Ritmo Cardíaco Fotoeléctrico SP-203

Módulo analógico biométrico plug-and-play basado en fotopletismografía (PPG) para Arduino y microcontroladores.

El sensor de pulso cardíaco **SP-203** es un módulo de adquisición biométrica diseñado para detectar la actividad circulatoria periférica de forma no invasiva. Basado en el principio de fotopletismografía (PPG), integra en una misma cara un diodo LED emisor de luz verde y un fotodetector de alta respuesta (APDS-9008); al colocar el dedo o el lóbulo de la oreja en contacto directo, el dispositivo mide los cambios sutiles en la absorción de luz provocados por el flujo volumétrico de sangre arterial durante cada ciclo de bombeo del corazón. La señal resultante es acondicionada mediante un amplificador operacional de bajo ruido (MCP6001) y una etapa de filtrado pasivo que entregan una onda analógica limpia y lista para ser procesada por el convertidor ADC de cualquier microcontrolador.

Especificaciones Técnicas

ParámetroDetalle
Tensión de Operación (VCC)3.0 V a 5.5 V DC (Compatible con 3.3V y 5V)
Consumo de Corriente Promedio~4 mA a 5V (Bajo consumo lógico, máx 20mA)
Amplificador Operacional IntegradoMCP6001 (Microchip) de bajo voltaje y bajo ruido
Fotodetector Óptico a BordoAPDS-9008 de alta selectividad espectral
Tipo de Señal de SalidaAnalógica (Variación continua de voltaje)
ParámetroDetalle
Longitud de Onda del LEDVerde (~525 nm, óptimo para absorción en sangre)
Configuración de Pines3 Pines: VCC (+), GND (-) y Señal Analógica (S)
Indicación Visual LocalLED piloto integrado que titila al ritmo del pulso
Modelo de Referencia PCBMódulo HW-827 / Serie SP-203
Uso RecomendadoProyectos educativos, wearables y robótica lúdica

Ventajas Destacadas del Módulo SP-203

Conexión Plug-and-Play Inmediata: No requiere de circuitos adicionales de instrumentación o puentes de resistencias externas gracias a su etapa operacional interna de ganancia unificada.

Alta Relación Señal/Ruido: El filtro de hardware integrado discrimina de forma eficiente las interferencias de luz ambiental y ruidos electromagnéticos de baja frecuencia.

Compatibilidad de Voltaje Multiplataforma: Trabaja sin problemas tanto a 3.3V (ideal para ESP32, STM32 o Raspberry Pi) como a 5V (nativo para Arduino Uno / Mega).

Mapeo de Pines y Diagrama de Conexión Base con Arduino

Diagrama de Conexión del Sensor SP-203
Detalle del Módulo: El sensor cuenta con un factor de forma circular optimizado para la yema del dedo. Dispone de tres vías de salida rotuladas en su PCB: VCC (alimentación positiva), GND (referencia a tierra) y S / OUT (salida analógica). El LED verde frontal debe estar en contacto directo y firme con la piel, evitando movimientos bruscos para prevenir artefactos de movimiento en el trazado de la señal.
🎓 Guía de Análisis Técnico y Procesamiento de la Señal

Para interpretar correctamente la señal del **SP-203**, el código implementa tres conceptos fundamentales de ingeniería biomédica y programación embebida:

  • Frecuencia de Muestreo Síncrono (500Hz): Tomar lecturas estrictas cada 2ms asegura capturar fielmente los picos de la onda de pulso (onda PPG) sin perder resolución temporal ni saturar la memoria del procesador.
  • Algoritmo de Cruce por Umbral: El pulso se detecta cuando el valor analógico supera la variable umbralDisparoDinamico. Este valor puede ser ajustado entre 0 y 1023 según la presión del dedo o la opacidad de la piel.
  • Filtro de Histéresis y Tiempo Muerto: Se añade una ventana de seguridad de 250ms después de cada latido válido. Esto evita que el ruido mecánico o pequeñas fluctuaciones ópticas generen dobles disparos falsos, limitando matemáticamente la lectura lógica a un máximo realista de 240 BPM.
// Código Completo de Integración para el Sensor de Pulso Fotoeléctrico SP-203 // Desarrollado con muestreo controlado síncrono para trazado gráfico PPG y cálculo de BPM const int PIN_ANALOG_SP203 = A0; // Entrada analógica conectada a la terminal de señal (S) del módulo const int PIN_LED_PULSO = 13; // LED de la placa que parpadeará en sincronía exacta con cada latido verificado // Parámetros de control temporal y análisis de frecuencia de la onda cardíaca unsigned long tiempoUltimaMuestraMs = 0; const unsigned long intervaloMuestreoMs = 2; // Frecuencia de muestreo estricta a 500Hz (Cada 2ms para capturar picos PPG de forma fiel) // Variables lógicas para el algoritmo de detección de picos (Cruce por Umbral) int umbralDisparoDinamico = 550; // Valor base ajustable de comparación analógica (0 - 1023) bool pulsoDetectadoFlanco = false; unsigned long tiempoUltimoLatidoMs = 0; float bpmCalculado = 0.0; void setup() { Serial.begin(115200); Serial.println("--- Inicializando Monitor Clínico de Ritmo Cardíaco SP-203 ---"); // Inicialización de pines pinMode(PIN_ANALOG_SP203, INPUT); pinMode(PIN_LED_PULSO, OUTPUT); digitalWrite(PIN_LED_PULSO, LOW); Serial.println("[ CONFIG ]: Puerto analógico A0 configurado para lectura continua."); Serial.println("[ STATUS ]: Bus calibrado. Coloque la yema de su dedo de manera estable sobre la superficie del sensor."); Serial.println("-----------------------------------------------------------------------------------------"); } void loop() { unsigned long tiempoActualMs = millis(); // Monitoreo no bloqueante basado en la base de tiempo estricta de 2ms if (tiempoActualMs - tiempoUltimaMuestraMs >= intervaloMuestreoMs) { tiempoUltimaMuestraMs = tiempoActualMs; // Adquisición directa del voltaje instantáneo entregado por el amplificador MCP6001 del módulo int lecturaCrudaADC = analogRead(PIN_ANALOG_SP203); // Formato de salida compatible con el Serial Plotter de Arduino IDE para visualización de la onda sinusoidal Serial.print("Onda_PPG:"); Serial.print(lecturaCrudaADC); Serial.print(","); Serial.print("Linea_Umbral:"); Serial.println(umbralDisparoDinamico); // Algoritmo de detección de flanco por sobrepaso de umbral con histéresis temporal preventiva if (lecturaCrudaADC > umbralDisparoDinamico && !pulsoDetectadoFlanco) { // Filtro de exclusión: Se exige un retardo mínimo de 250ms entre latidos (Evita lecturas erróneas por rebotes o arritmias de ruido) if (tiempoActualMs - tiempoUltimoLatidoMs > 250) { pulsoDetectadoFlanco = true; digitalWrite(PIN_LED_PULSO, HIGH); // Encendido físico del LED indicador // Cálculo analítico del período (Intervalo entre latidos consecutivos) unsigned long intervaloEntreLatidosMs = tiempoActualMs - tiempoUltimoLatidoMs; tiempoUltimoLatidoMs = tiempoActualMs; // Conversión matemática fundamental: Período en milisegundos a Pulsaciones por Minuto (BPM) bpmCalculado = 60000.0 / intervaloEntreLatidosMs; } } // Restablecer el flanco lógico una vez la onda sinusoidal desciende por debajo de la zona de histéresis del umbral if (lecturaCrudaADC < (umbralDisparoDinamico - 30) && pulsoDetectadoFlanco) { pulsoDetectadoFlanco = false; digitalWrite(PIN_LED_PULSO, LOW); // Apagado del indicador visual } } }
1. ¿Por qué el monitor serial muestra valores inestables o demasiado ruido en la gráfica?
Esto se debe principalmente a "artefactos de movimiento". Al tratarse de un sensor óptico de alta ganancia, cualquier desplazamiento leve del dedo altera la refracción de luz detectada. Se recomienda usar una banda elástica o sujetar firmemente el sensor sin presionar demasiado, manteniendo la mano en reposo absoluto.
2. ¿El sensor SP-203 mide la saturación de oxígeno en la sangre (SpO2)?
No. Este módulo está diseñado exclusivamente para fotopletismografía analógica simple, lo que permite calcular la frecuencia cardíaca (BPM) y graficar la onda de pulso. Para medir oxígeno en sangre se requiere un oxímetro que use doble longitud de onda (Luz roja e infrarroja combinadas), como el chip MAX30102.
3. ¿Cómo sé cuál es el umbral analógico correcto para mi código Arduino?
El umbral base por defecto en el código es 550, pero varía según la opacidad de la piel y la luz del entorno. Abre el "Serial Plotter" de Arduino para ver las ondas sinusoidales. Identifica el valor intermedio de la onda y modifica la variable umbralDisparoDinamico con ese número para asegurar una detección limpia.
4. ¿Puedo alimentar este sensor directamente con una placa que funcione a 3.3V?
Sí, el amplificador operacional MCP6001 integrado es del tipo Rail-to-Rail y soporta un amplio rango de voltaje desde 3.0V hasta 5.5V DC. Funciona perfectamente conectado al pin de 3.3V de placas como NodeMCU ESP32, STM32 o Raspberry Pi Pico.
5. ¿Por qué el LED piloto de la placa parpadea de forma errática antes de colocar el dedo?
Es un comportamiento completamente normal. Cuando el fotodetector óptico no está cubierto por la piel, capta las frecuencias y parpadeos de la luz ambiental artificial (bombillas domésticas a 50Hz/60Hz), amplificando ese ruido y provocando destellos falsos en el LED testigo.
6. ¿Qué ocurre si presiono el sensor contra mi dedo con mucha fuerza?
Si presionas con excesiva fuerza, ocluirás los vasos capilares de la yema del dedo, deteniendo temporalmente el flujo volumétrico local de sangre arterial. Como consecuencia, el sensor perderá la onda de pulsación y la señal analógica se aplanará por completo. El contacto debe ser suave pero firme.