Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ÍNDICE
1 Justificación del Proyecto ...........................................................................................5
2 Introducción .................................................................................................................6
3 Objetivos .....................................................................................................................12
4 Materiales ...................................................................................................................12
5 Desarrollo ...................................................................................................................13
5.1 Diseño.................................................................................................................. 13
5.3 Simulación........................................................................................................... 25
6 Resultados...................................................................................................................31
7 Conclusiones ...............................................................................................................32
8 Bibliografías ...............................................................................................................33
9 Anexos .........................................................................................................................37
Por ello, se adicionó a las pulseras cuantificadoras (smartfit bands) y relojes inteligentes
(smartwatch), un pequeño sensor de frecuencia cardiaca; debido a que estas pulseras son
dispositivos muy populares, que incorporan microprocesadores y realizan mediciones de velocidad
y desplazamiento (conteo de pasos) al usuario. Sin embargo, a pesar de su popularidad, muchos de
estos dispositivos cuentan con sensores cuya precisión es dudosa, lo que conduce a la necesidad de
conocer cómo funcionan y qué cantidad de la información que ofrecen es fiable, ya que la precisión
de esa medición es crítica.
Dado que los autores del presente documento cuentan con al menos una de estas pulseras,
se decidió que el estudio de la precisión de los circuitos detectores de pulso cardíaco sería de amplia
relevancia para el proyecto final de la materia de instrumentación, esto debido a que los circuitos
integrados empleados para tal propósito se apoyan en sensores ópticos (fotodiodos y/o
fototransistores), y un LED, lo que permite el cálculo de la velocidad del flujo de volumen
sanguíneo y así determinar la frecuencia cardíaca de la persona. De esta forma, se evaluarán
diversos módulos que se encuentran en el mercado con base a su precisión-precio, se realizará una
interfaz con un microcontrolador y algún software de desarrollo de entorno visual y además se
analizará el diseño de estos módulos, mediante sus componentes electrónicos (amplificadores,
filtros paso banda, resistencias de carga, etc.) y su funcionamiento.
2 Introducción
Su modo de uso es poniéndolo como una pinza, de tal forma que se adapte a la morfología
del dedo del paciente. Acto seguido, se pulsa un botón y se muestran los datos en la pantalla digital.
(fig. 1)
En todo el cuerpo humano circula sangre que es bombeada por el corazón, lo que produce
un flujo de sangre oxigenada y de sangre desoxigenada; ambas variaciones hacen que en las manos
se produzca el paso de más o menos cantidad de luz, lo cual da la oportunidad de captar dichos
datos. En la medición de variaciones de volumen, el pulso en el extremo de un dedo ofrece la
manera más sencilla y cómoda de detectar y medir la frecuencia o el ritmo cardíaco por medio de
un sensor.
Como se mencionó anteriormente, el sensor de pulso trabajará mediante otros dos sensores,
los cuales son los fototransistores y fotodiodos. Estos transductores electroópticos están
estrechamente relacionados, pues convierten la luz incidente en corriente eléctrica, para
aplicaciones tales como la detección de posición/presencia, medición de intensidad de luz y
detección de pulso óptico de alta velocidad.
1. Sensor fototransistor.
• Definición de fototransistor:
“El fototransistor es un dispositivo semiconductor que puede detectar los niveles de luz y
alterar la corriente que fluye entre el emisor y el colector de acuerdo con el nivel de luz que recibe.”
(Fig. 5)
La salida de un fototransistor se toma de su terminal emisor; de ahí que los rayos de luz
lleguen a la región de la base.
Un fototransistor puede ser un dispositivo de tres o dos terminales según nuestro requisito.
La base del fototransistor se utiliza únicamente con fines de polarización. Para el transistor NPN,
la base se hace + Ve con respecto al terminal emisor, y en un transistor PNP el terminal colector se
hace –Ve con respecto al terminal emisor.
2. Sensor fotodiodo.
• Definición de fotodiodo:
“Diodo semiconductor en el cual los rayos luminosos a los que se encuentra sometido
provocan variaciones de la corriente eléctrica.” (Fig. 6)
de huecos con carga positiva. Por lo tanto, entre mayor sea la intensidad de luz que incida en el
fotodiodo mayor será la corriente que fluye.
3 Objetivos
4 Materiales
EQUIPO MATERIALES
✓ Computadora. ✓ LED (Color Rojo).
✓ Arduino UNO. ✓ Resistencia 220 Ω.
✓ Cautín. ✓ Potenciómetro 10 kΩ.
5 Desarrollo
5.1 Diseño
5.1.1 Sensor KY-039
El detector de ritmo cardíaco KY-039 (precio: $29.00 pesos mexicanos) está diseñado para
detectar el pulso cuando se coloca el dedo índice (de preferencia), entre el LED infrarrojo y el
fototransistor. El pulso se representa en el pin de señal de salida analógica. Como se mencionó
anteriormente, el fototransistor es utilizado para obtener el flujo emitido, cuando la presión
sanguínea pulsa -mediante el dedo- y percibe un ligero cambio en la resistencia del fototransistor.
(Fig. 7)
Dicho sensor suele realizar lecturas imprecisas debido a que la luz ambiente añade cierto
“ruido” al sensor, culminando en información variable que no concuerda con la que se obtendría
dado un pulso cardiaco normal, por lo que se realizó una calibración por software en Arduino,
añadiendo un filtro paso baja para filtrar el valor obtenido (los cálculos se presentan en la sección
5.2. “Análisis matemático).
Como el sensor anterior, este dispositivo integra dos LEDs, uno emitiendo una luz roja y el
otro una luz infrarroja. Además de incluir una conexión (SDA y SCL) que permite la comunicación
con el puerto I2C de comunicación serial al microcontrolador, y un convertidor ADC (analógico a
digital) de 16- bits.
A pesar de ser un módulo bastante completo, este presenta un error en su diseño: una de las
resistencias pull-up de 4.7 kΩ se encuentra conectada a U3 (regulador de voltaje). El sensor
MAX30100 puede alimentarse, tanto con 3.3 V como por 5 V, y con esta conexión causa que, si el
sensor se conecta a los 5 V de Arduino, no se va a detectar en el bus del puerto I2C porque los
niveles lógicos serán muy bajos. Aún siendo alimentado por los 3.3 V el puerto I2C trabajaría muy
inestable. Una de las soluciones es cortar la unión de la resistencia con la zona de alimentación de
1.8 V, con el fin de que se lleve a cabo la alimentación correctamente. (Fig. 13)
Sin embargo, este cambio no es lo único que se requiere para lograr la estabilidad en el
sensor, ya que uno de los reguladores que se tienen en realidad está actuando con un voltaje de
salida de 2.8 V, que al inicio es un voltaje al cual trabaja normalmente el puerto I2C, sin embargo,
para esta placa el voltaje es mucho mayor al rango permisible del sensor. A pesar del corte, se
percibe con el multímetro aún un voltaje mayor a 1.8 V. El regulador recomendado para tal sensor
es el XC620P182MR. Ideal para regular voltajes de 1.2 V a 5 V y cuya tensión de salida se
encuentra alrededor de los 1.8 V según las características del fabricante. Dicho aditamento sería
necesario de aplicar mediante micro soldadura, por lo que se procede a utilizar otro sensor de la
misma familia y con características electrónicas similares: MAX30102.
El sensor MAX30102 (precio: $64 pesos mexicanos) es un sensor que es parte de la familia
del MAX3010X. Tal como el sensor MAX30100, este dispositivo es capaz de obtener la
oxigenación y frecuencia cardíaca de una persona, a través de un LED de espectro rojo (fotodiodo)
y uno de infrarrojo. (Fig. 14)
Se observa que dicho diagrama es similar al que se emplea para el MAX30100, sin
embargo, este sensor utiliza también un módulo bidireccional, para conversión de nivel, siendo
alimentado por los 3.3 V y 1.8 V, respectivamente. Dicho convertidor lógico IIC permite que las
mediciones sean más precisas y el sensor tenga una buena estabilidad, eliminando los errores de
diseño presentados en su predecesor 30100.
El sensor ARD-366 (precio: $266 pesos mexicanos) es también un sensor de pulso como
los anteriormente analizados, con la diferencia que el circuito integrado que posee es específico
para su conexión con microcontroladores, es decir combina un sensor óptico de pulso cardíaco
con elementos que permiten la amplificación y cancelación de ruido de la señal leída. (Fig. 17)
Como se observa en la imagen, el sensor cuenta con una salida analógica (S) y una entrada
positiva y negativa que se conectan directamente al microcontrolador. A su vez, utiliza diversos
componentes, mismos que se aprecian en su diagrama esquemático (Figura 18):
En óptica, esta ley es una relación empírica que relaciona la absorción de luz con las
propiedades del material atravesado. Para determinar las pulsaciones y el grado de oxigenación, se
realizan mediciones en al menos dos longitudes de onda específicas, utilizándose como emisores
diodos LED o diodos láser. En Oximetría, la saturación de oxígeno se deriva tras obtener el valor
pico a pico de la componente pulsátil (EAC) de los pulsos por minuto con respecto a la
correspondiente componente constante (EDC) de cada una de las dos longitudes de onda especifica
(λ1 y λ2). Estas ecuaciones teóricas asumen la validez de la Ley de Bouguer-Lambert-Beer, que
obtiene la relación entre la saturación de oxigeno (SO2) y las propiedades ópticas de un lecho
vascular pulsátil como (ec. 1):
El factor α es quien indica la frecuencia de corte de la señal. Esto depende del tiempo de
muestreo del sistema, el cual podría contar con variaciones entre periodos. Un valor Alpha = 1
indica que es una señal sin filtrar, pues se depende de la medición de la señal anterior; mientras que
un valor Alpha = 0 es la salida de un valor filtrado igual a cero, ya que se depende de la medición
actualizada para aportar el nuevo filtrado.
5.3 Simulación
El primer sensor (KY-039) se simuló en el software TinkerCad, siendo este de gran ayuda
para observar las conexiones Arduino-Sensor y Arduino-LCD. Dicho programa no contaba con el
módulo específico a utilizar, sin embargo, por medio de la intervención de un sensor con salida
analógica se pudo llevar a cabo la experimentación del mismo. (Fig. 20)
Por último, el tercer sensor (ARD-366) se simuló en Proteus, esto debido a que tal programa
cuenta con librerías de Aruuino, entre las cuales existe la posibilidad de trabajar con dicho sensor.
(Fig. 22)
KY-039
MAX30102
ARD-366
6 Resultados
En segundo lugar se posiciona el KY-039, que es el sensor más barato de los tres en
cuestión, sin embargo, se debe realizar un filtrado específico para que la información sea retenida
adecuadamente. Su técnica de medición es de trans-iluminado, lo que podría aumentar su precisión
colocándolo en el lóbulo de la oreja o simplemente otra parte del cuerpo que se mantenga firme al
sensor; pero no oponga algún esfuerzo de más que pueda dañarlo.
Por último, se tiene el sensor ARD-366, el más caro de los dos antes mencionados. El sensor
arrojaba una medición correcta y bastante acertada con la mostrada por el pulsioxímetro, sin
embargo, es un sensor que se ve ampliamente afectado por el ruido (a pesar de que posee
componentes que lo aíslan) y puede llegar a arrojar valores bastante imprecisos. Se piensa que esto
depende del fabricante que ofrezca dicho sensor, ya que en la tienda de electrónicos Steren se
comercializa una versión con componentes de menor calidad al original.
7 Conclusiones
7.1 Pinedo Julia Gabriela
Se concluye que el sensor de pulso cardíaco es uno de los sensores en la medicina más
importantes que se han logrado llevar a cabo, esto debido a los principios de sensores ópticos (y
fotopletismografía) que intervienen en su funcionamiento. Además, es una técnica de medición no
invasiva; que aprovecha una ley de la óptica conocida como la ley de Bourguer-Lambert-Beer para
conocer el volumen de la sangre según la cantidad de luz que refleja. Dichos fundamentos de igual
manera se correlacionan con el funcionamiento de los fotodiodos y fototransistores, sensores que
se analizaron a lo largo del curso de Instrumentación Electrónica.
El objetivo de esta práctica fue desarrollar un pulsómetro casero con el sensor MAX30102
para medir la frecuencia cardiaca, la principal función de este proyecto es mostrar la frecuencia
cardiaca a través de un LCD 16x2 y el monitor serie y el proceso desde las conexiones hasta la
programación en Arduino, pues en la actualidad hay pocos trabajos que mencionen el uso del sensor
max30102 y su eficiencia al momento de medir la frecuencia cardiaca.
Se llegó a la conclusión de que el sensor MAX30102, tiene un nivel de error muy bajo, ya
que se comparó con un Apple Watch y daban valores muy parecidos o iguales.
8 Bibliografías
https://blog.saludsa.com/como-controla-un-smartwatch-la-salud-
cardiovascular/
M. Ley de Beer-Lambert. (2014). Química.es. Recuperado mayo de 2022, de
https://www.quimica.es/enciclopedia/Ley_de_Beer-Lambert.html
N. Llamas, L. (2017). Filtro paso bajo y paso alto exponencial (EMA) en
Arduino. Luis Llamas - Ingeniería, informática y diseño. Recuperado mayo
de 2022, de https://www.luisllamas.es/arduino-paso-bajo-exponencial/
O. López, S. M., Dotor, M. L., & Silveira, J. P. (2009). Fotopletismografía por
reflexión con LEDs infrarrojos para evaluar órganos y tejidos intra-
abdominales: estudio inicial en cerdos. ÓPTICA PURA Y APLICADA, 23–
28. https://www.sedoptica.es/Menu_Volumenes/Pdfs/324.pdf
P. MAX30100 Sensor Datasheet pdf - Heart-Rate Sensor. (2017). Datasheets
PDF. Recuperado 2022, de
https://datasheetspdf.com/pdf/950845/MaximIntegrated/MAX30100/1
Q. OMS. (2021, 11 junio). Enfermedad pulmonar obstructiva crónica (EPOC).
Organización Mundial de la Salud. Recuperado 2022, de
https://www.who.int/es/news-room/fact-sheets/detail/cardiovascular-
diseases-(cvds)
R. Oxímetro: qué es, cómo funciona y para qué sirve. (2021). ABC.
Recuperado mayo de 2022, de https://www.abc.es/sociedad/abci-oximetro-
que-es-como-funciona-para-que-sirve-nsv-202101251252_noticia.html
S. Pakganern, U. (2019). Arduino project: KY-039 and LCD to monitor pulse
rate. Steemit. Recuperado mayo de 2022, de https://steemit.com/utopian-
io/@pakganern/arduino-project-ky-039-and-lcd-to-monitor-pulse-rate
T. Pastor, J. (2016). Cómo de exactos son los medidores de frecuencia
cardiaca de los wearables. Xataka. Recuperado mayo de 2022, de
https://www.xataka.com/wearables/como-de-exactos-son-los-medidores-
de-frecuencia-cardiaca-de-los-wearables
U. Pulse Sensor Arduino. (2020). theoryCIRCUIT - Do It Yourself Electronics
Projects. Recuperado mayo de 2022, de https://theorycircuit.com/pulse-
sensor-arduino/
https://reedpaper.wordpress.com/2018/08/22/pulse-oximeter-max30100-
max30102-how-to-fix-wrong-
board/?fbclid=IwAR1bo1pGASGuWAr06dborc8UEdtel7d4vDDDqfab0_
gxHO7hikLwk7EX6BM
9 Anexos
9.1 Datasheet de los sensores
BPM (Pulsos por BPM (Pulsos por BPM (Pulsos por BPM (Pulsos por
Variable medida
minuto). minuto) y SPO2. minuto) y SPO2. minuto).
Longitud de Longitud de onda Longitud de Longitud de onda
Señal de entrada
onda (nm). (nm). onda (nm). (nm).
Señal de salida Análogo a BPM. Análogo a BPM. Análogo a BPM. Análogo a BPM.
Rango 20-200 BPM. 30-240 BPM. 30-240 BPM. 20-235 BPM.
Alcance 180 BPM. 210 BPM. 210 BPM. 215 BPM.
Elevación/Supresión
20 BPM 30 BPM 30 BPM 20 BPM
de cero
Resolución 1 BPM 1 BPM 1 BPM 1 BPM
/*
Conexiones:
- 5V = 5V
- GND = GND
- S (PIN SENSOR) = A0 (ANALOG PIN 0)
*/
#include <LiquidCrystal.h>
LiquidCrystal lcd (7, 6, 5, 4, 3, 2);
float factor = 0.75; // coeficiente para filtro pasa bajos
float maximo = 0.0; // para almacenar valor maximo
int minimoEntreLatidos = 300; // 300 mseg. de tiempo minimo entre latidos
float valorAnterior = 500; // para almacenar valor previo
int latidos = 0;
void setup() {
// put your setup code here, to run once:
lcd.begin(16,2);
lcd.clear();
lcd.setCursor(0,0);
}
void loop() {
// put your main code here, to run repeatedly:
/*
Conexiones:
- 5V = 5V
- GND = GND
- SDA = A4 (ANALOG PIN 4)
- SCL = A5 (ANALOG PIN 5)
PINEDO, SAUCEDO, TAPIA
- INT = Sin conexión.
*/
SENSOR DE PULSO CARDÍACO 42
- 5V = 5V
- GND = GND
- SDA = A4 (ANALOG PIN 4)
- SCL = A5 (ANALOG PIN 5)
- INT = Sin conexión.
*/
// Librerías
#include <Wire.h> // Para comunicarse con I2C mediante SDA y SCL
#include "MAX30105.h" // Librería del sensor MAX30105 compatible con
MAX30102
#include "heartRate.h" // Librería que interpreta medición de pulso del
Sensor
#include <LiquidCrystal.h> // Librería LCD
// Variables
const byte RATE_SIZE = 4; // Constante para añadir más precisión al
cálculo.
byte rates[RATE_SIZE]; // Arreglo de pulsos cardiacos detectados
byte rateSpot = 0; // Contador
long lastBeat = 0; // Medir el tiempo del último pulso medido.
float BPM_Value; // Pulsaciones medidas.
int BPM_AVG; // Pulsaciones promedio. Valor mostrado en pantalla.
LiquidCrystal lcd(13, 12, 11, 10, 9, 8); // PINES LCD (RS, E, D4, D5, D6,
D7)
void setup() {
// Inicializar Sensor
if(!pulseSensor.begin(Wire, I2C_SPEED_FAST)){ // Utilizar puerto I2C por
defecto a 400kHZ
Serial.println("No se encontró el sensor :( "); // Si no se encontró el
objeto, imprimir ese mensaje
while (1);
}
Serial.println("Coloque su dedo índice en el sensor con firmeza"); //
Instrucciones
void loop() {
if (checkForBeat(IR_Value) == true){
PINEDO, // Si TAPIA
SAUCEDO, el infrarrojo detectó un valor
if (BPM_Value < 255 && BPM_Value > 20){ // Valor normal de lectura
oscila entre 20 y 255
//Serial.print("IR: ");
//Serial.print(IR_Value);
//Serial.print("BPM Real: ");
//Serial.print(BPM_Value);
Serial.print("BPM ♥: ");
Serial.print(BPM_AVG);
Serial.println();
/*
Conexiones:
- 5V = 5V
- GND = GND
- S (PIN SENSOR) = A0 (ANALOG PIN 0)
*/
// Librerías
#define USE_ARDUINO_INTERRUPTS true // Usar interrupciones de Arduino para
que las mediciones sean más precisas
#include <PulseSensorPlayground.h> // Libreria PulseSensor del Sensor.
#include <LiquidCrystal.h> //--> Includes the LiquidCrystal Library.
byte newChar[8] = {
B00000,
B01010,
B11111,
B11111,
B01110,
B00100,
B00000,
B00000
};
// Variables
const int PULSESENSOR_PIN = 0; // Entrada 'S' del Sensor de Pulso a ANALOG
PIN 0
const int LED_PIN = 13; // Definimos PIN 13 para encender/apagar un LED y
observar cada cuanto hay un Pulso
int Threshold = 550; // Pico Maximo de la señal enviada por el Sensor
void setup() {
// Inicializar Monitor Serial a 9600 Baudios
Serial.begin(9600);
lcd.begin(16, 2);
lcd.clear();
lcd.createChar(7, newChar);
señal
void loop() {
lcd.setCursor(0,0);
lcd.print("Conteo correcto! ");
lcd.setCursor(0,1);
lcd.print("BPM: ");
lcd.print(BPM);
lcd.write(7);
lcd.print(" ");
delay(20); // Retardo
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
PINEDO, SAUCEDO, TAPIA
/*------------------SENSOR DE PULSO CON ARDUINO-------------------
-------------MÓDULO: Sensor ARD-366, MAX30102, KY-039-------------
SENSOR DE PULSO CARDÍACO 46
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
namespace SP_KY039
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
} else
{
MessageBox.Show("NO HAY PUERTOS DETECTADOS");
/* Mostrar al usuario que hay
un error y no se detectan los puertos*/
comboBox1.Items.Clear();
PINEDO,
comboBox1.Text = " SAUCEDO, TAPIA ";
button2.Enabled = false; // No se habilita boton de "CONECTAR"
}
}
SENSOR DE PULSO CARDÍACO 47
try
{
serialPort1.Open(); // Abrir puerto
button2.Text = "DESCONECTAR"; // Activar boton
"DESCONECTAR"
pictureBox1.Image =
SP_KY039.Properties.Resources._2054636_8a72c;
}
catch (Exception exc) // Mensaje que muestre error
{
MessageBox.Show(exc.Message.ToString());
}
}
}