Leer la frecuencia cardíaca con Arduino y Polar

PolarT_34

Hace poco me han pedido hacer un trabajo en el cual debía medir la frecuencia cardica para convertirla en sonido, solo tenia menos de 15 días para entregarlo así que requería de algo rápido para prototipar y entregar a tiempo.

Problema: El cliente me pidió tomar las lecturas del corazón, enviarlas a la computadora y guárdalas en un archivo, para después con un programa convertirlas a ritmo de audio.

Para la parte de la lectura de la frecuencia cardiaca decidí utilizar uno de los kits de Polar una marca muy reconocida en la parte de mediciones del corazón, en este caso seria el que conforma el sensor T34 y el receptor inalambrico T31 esta es la forma más fácil posible para hacerlo! No gel, no hay sondas, sin calibración, ni clips solo colar en el pecho con un alcance d 1.2 mts (4 pies)

PolarT34_arduino1

Un poco mas de características según el fabricante:

Los monitores Polar T34 Transmisor no codificada del ritmo cardíaco y luego transmite de forma inalámbrica los datos de frecuencia cardiaca de la correa para el pecho a un + receptor compatible Polar WearLink. Esto permite al usuario controlar su ritmo cardíaco. Este transmisor también se puede combinar con aparatos de gimnasia de su gimnasio local si es WearLink Polar compatible.

 

Características principales:

  • Sensor de frecuencia cardíaca transmite de forma inalámbrica los datos de frecuencia cardiaca sin necesidad de gel conductor
  • Resistente al agua hasta 30 metros para su uso en ambientes extremos
  • Batería dure hasta 2.500 horas de uso continuo
  • Correa elástica ajustable para la detección, pero seguro, cómodo
  • Correa extraíble y lavable a máquina textil mantiene su sensor libre de bacterias

Detalles:

  • Resistente hasta 30 metros de agua
  • Exactitud ECG
  • Hasta 2.500 horas de uso
  • Batería reemplazable por el usuario no
  • Tamaño medio ajustable correa para el pecho elástica incluido (25-54 pulgadas)
  • Para lavar a maquina y anti-bacterial

El receptor de frecuencia cardíaca Polar está diseñada para recibir señales de batido del corazón de los sensores de frecuencia cardíaca Polar compatibles tales como el T34. Juntos, el sensor y el receptor proporciona un bajo costo y conveniente sistema de monitoreo de la frecuencia cardíaca que se puede conectar a casi cualquier microcontrolador. El receptor del pulso es un módulo independiente, con conexiones a bordo de potencia (3,3 V a 5 V ), suelo y señal. Se interactúa inalámbricamente a un transmisor sensor compatible Polar codificado o no codificado. El pin de salida simplemente pulsos de alta cuando se detecta un latido del corazón. Este módulo:

  • Recibe señales latidos del corazón de un transmisor sensor compatible
  • Indica una señal de transacción recibida utilizando una señal de salida BAJO / ALTO
  • Inalámbrica interconecta al transmisor con un alcance de hasta cuatro pies

PolarT31_arduino

Tenga en cuenta: este paquete está diseñado para estudiantes, aficionados, ingenieros y artistas. No es un paquete de desarrollador y no es para su uso en el desarrollo de productos! Polar quiere específicamente a los desarrolladores de productos en contacto con ellos para licenciar la tecnología para el uso OEM para que puedan asegurarse de que la aplicación es apropiada.

Por el tiempo y a petición del tiempo use Arduino para la parte de toma de lecturas del sensor y enviado de datos a la computadora en la pagina de parallax encontré un pequeño codigo de ejemplo de como usar Arduino y el sensor de Polar.

polarheart_conexion

 

Diagrama de pines

polarheart-arduino

//Definitions  
const int HR_RX = 7;
byte oldSample, sample;

void setup() {
  Serial.begin(9600);
  pinMode (HR_RX, INPUT);  //Signal pin to input  
 
  Serial.println("Waiting for heart beat...");

  //Wait until a heart beat is detected  
  while (!digitalRead(HR_RX)) {};
  Serial.println ("Heart beat detected!");
  
}

void loop() {
  
  sample = digitalRead(HR_RX);  //Store signal output 
  if (sample && (oldSample != sample)) {
    Serial.println("Beat");
  }
  oldSample = sample;           //Store last signal received 
  
}

Fuente: http://learn.parallax.com/KickStart/28048

Polar_arduino1

Ahora ya sabemos que por cada latido del corazón nuestro receptor enviara un pulso que recibiremos en uno de los pines del Arduino, ahora basándome en algunos códigos de la red modificamos el código para para que calcule el numero de pulsos por minuto del corazón.

 

//Lecturas una pulsera Polar T31 //Con Arduino convertimos a pulsaciones por minuto, que enviamos //por puerto serial //Bajo una Licencia Creative Commons 4.0 //Andres Sabas 2014
const int HR_RX = 7;
byte oldSample, sample;
unsigned long time; 
unsigned long frequency;
int period = 2000;
int starttime = 2000;
int input = 0;
int lastinput = 0;
unsigned long death = 0;
int a=0;
void setup() {
 Serial.begin(9600); pinMode (HR_RX, INPUT); //Pin de señal entrada Serial.println("Waiting for heart beat...");
//Espera hasta que el bit es detectado while (!digitalRead(HR_RX)) {}; Serial.println ("Heart beat detected!"); 
}
void loop() {
 
 time = millis();
 
 sample = digitalRead(HR_RX); //Lectura del pin 
 
 if (sample && (oldSample != sample)) {
 
 //if ((sample != oldSample)&&(sample == HIGH)) {
 
 period = time - starttime; // Calcular el tiempo entre el latido previo y la que sólo se ha detectado
 starttime = time; // Definir la nueva referencia de tiempo para el próximo período de cómputo
 death = time;
 
 }
 oldSample = sample; //Guarda última señal recibida 
 
 if (period < 0) {
 frequency = 0;
 }
 else {
 frequency = 60000/period; //Calcular la frecuencia cardiaca en pulsaciones por minuto (ppm) con el período en milisegundos
 }
 
 if ((time - death) > 2000) { // Detecta 2 segundos de ausencia
 //Serial.println("dead! ");
 }
 else {
 char freq[2];
 
 if (frequency/100 == 0) {
 freq[0] = 32; // Imprimir un espacio para el primer carácter si la frecuencia está por debajo de 100 ppm
 } 
 else {
 freq[0] = frequency/100+48; // Clasificar el carácter cientos y convertirlo en ASCII
 }
 freq[1] = (frequency/10)%10+48; // Ordenar la decenas carácter y convertirlo en ASCII
 freq[2] = frequency%10+48; // // Ordenar las unidades carácter y convertirlo en ASCII
 
 
 if(a==10000){
 Serial.println(freq);
 a=0;
 }
 else{
 a++; 
 }
 
 }
 
}

Listo el Arduino esta enviando un promedio de 87 muestras vía serial por minuto con la frecuencia cardíaca calculada, ahora debo recibir eso en mi computadora y guardarlo en un archivo, para esto pueden usar cualquier lenguaje de su elección java o python o cualquier en el que sepan abrir un puerto serial, yo elegí processing es un lenguaje al cual siempre tuve ganas de moverle, muy útil a la hora de prototipar rápido. Me encontre con varios tutoriales en español y en ingles, pero definitivamente la la pagina oficial me ayudo mucho, así quedo mi sketch

//Receptor de datos via serial de una pulsera Polar T31 //Con Arduino //Bajo una Licencia Creative Commons 4.0 //Andres Sabas 2014
import processing.serial.*;
Serial mySerial;
PrintWriter output;
void setup() {
 size(400, 400);
 mySerial = new Serial( this, Serial.list()[0], 9600 );
 mySerial.buffer(3);
 output = createWriter( "data.txt" );
}
void draw() {
 // The serial data is used to color the background. 
 textSize(32);
 text("Trabajando", 10, 30);
 text("Presione cualquier tecla", 10, 150);
 text("para salir", 10, 250);
 
}

void serialEvent(Serial port) {
 // Data from the Serial port is read in serialEvent() using the read() function and assigned to the global variable: val
 String value = mySerial.readString();
 // For debugging
 //println( "Raw Input:" + value);
 if ( value != null ) {
 output.print(value);
 }
}

void keyPressed() {
 output.flush(); // Writes the remaining data to the file
 output.close(); // Finishes the file
 exit(); // Stops the program
}

Esperamos un evento en el puerto serial y guardamos el dato en un archivo txt llamado data, también deje una linea de código para depuración y así poder saber si el arduino en realidad esta enviando algo. Mientras esta trajando el programa presenta un pantalla y presionando cualquier tecla se cierra y termina de leer todos los datos. Ahora solo mi cliente debe tomar los datos y hacer música con ellos.

Processing_polar

Espero les sirva en unos de sus proyectos y espero sus comentarios

Saludos Inventores

5 opiniones en “Leer la frecuencia cardíaca con Arduino y Polar”

  1. HOLA!!
    tengo un proyecto en el que tengo que desarrollar un contador de pulsos cardíacos y quisiera saber donde puedo conseguir el sensor que se utiliza en el ejemplo
    gracias!

  2. Hola! Trabajo en una app para cel y tengo una banda “sportline” he querido tomar la frecuencia cardiaca pero no he podido detectar la señal de la banda, solo en mi Gym con la caminadora, crees que sea posible con ese sensor?? Me podrías decir que sensor/receptor es? Gracias!

  3. Hola Amigo como estas saludos desde Colombia
    te molesto para pedirte un favor yo esto desarrollando algo similar pero con un ecg de sparkfun el monitor AD8232
    void setup() {
    // initialize the serial communication:
    Serial.begin(9600);
    pinMode(10, INPUT); // Setup for leads off detection LO +
    pinMode(11, INPUT); // Setup for leads off detection LO –

    }

    void loop() {

    if((digitalRead(10) == 1)||(digitalRead(11) == 1)){
    Serial.println(‘!’);
    }
    else{
    // send the value of analog input 0:
    Serial.println(analogRead(A0));
    delay(10);
    }
    //Wait for a bit to keep serial data from saturating
    delay(1);
    }
    este es el codigo que me da el datashet necesito sacar la frecuencia respiratoria por medio de este modulo te pido ese gran favro me me puedes ayudar en esa parte

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *