Pulsómetro digital

Este proyecto lo hemos desarrollado el grupo 4 de ingeniería de computadores en la asignatura de Diseño de Sistemas Empotrados.

Integrantes:

Alejandro Peña Jimenez

David San Martín Nieto

Ivan Maqueda Guede

Introducción

Como proyecto para la asignatura hemos elegido hacer un pulsómetro, conformado por 2 x 16 espacios de 8 x 5 pixeles donde escribir cada carácter en su pantalla LCD.

En él podemos ver nuestra frecuencia cardíaca por minuto, esperando unos segundos para tomar nuestras pulsaciones y poder hacerlo de una manera más precisa y eficaz.

Hemos obtenido la idea desarrollando un brainstorm donde finalmente elegimos este proyecto por su gran utilidad y su abundante uso a día de hoy en todo tipo de centros sanitarios e incluso en nuestras propias casas.

Uso

El funcionamiento del pulsómetro es muy sencillo, para facilitar la puesta en marcha tiene un interruptor en la parte trasera que enciende el sistema

Colocas el dedo en la ranura frontal de la caja en contacto con el sensor MAX30102 con lo que el sistema empieza a tomar datos durante escasos segundos, en este caso nuestra frecuencia cardíaca, una vez que tiene los datos los convierte mediante una función y los muestra por pantalla y mediante un mensaje a través de la pantalla sabremos nuestro ritmo cardíaco.

El led verde se enciende cuando el sensor detecta un dedo, si el led rojo esta encendido entonces no estará midiendo y se muestra por pantalla un mensaje.

Materiales

MaterialCantidadPrecio
Placa arduino1Provisto por la URJC
Led verde1Provisto por la URJC
Led rojo1Provisto por la URJC
Cables DuPont9Provisto por la URJC
Adaptador para las pilas1Provisto por la URJC
Pilas4En propiedad
Caja soporte Arduino18€ (20 metros de bobina)
HD44780 Keypad Shield 16×2 LCD1602115€
Sensor MAX30102110€
Resistencias 500Ω2 En propiedad
Interruptor1Provisto por la URJC

Herramientas

HerramientaCantidadPrecio
Soldador115,99€
Impresora 3D1
Polímetro110,49€
Pistola Pegamento18€

Montaje

Código

#include "MAX30105.h"           //Libreria MAX 3010x
#include "heartRate.h"          //Libreria para calcular las pulsaciones
#include <LiquidCrystal.h>      //Libreria pantalla 

//Pines Pantalla LCD
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);

//SALIDAS LEDS digitales
int LEDROJO = 0;
int LEDVERDE = 1;

byte customChar[] = { //Mapa de bits para los corazones
  B00000,
  B00000,
  B01010,
  B10101,
  B10001,
  B01010,
  B00100,
  B00000
};

MAX30105 particleSensor; //Utilizaremos particleSensor para iniciar el sensor

const byte SIZE = 4; //Tamaño del array de medidas. Iniciado en 4
byte pulsaciones[SIZE]; //Array con medidas
byte posPulsacion = 0; //Variable de control para moverse en el array
long lastBeat = 0; //Tiempo desde el ultimo latido
float beatsPerMinute; //BPM
int beatAvg; //Media de pulsaciones

void setup() {
  pinMode(LEDVERDE,OUTPUT); //Configuracion de leds como salida
  pinMode(LEDROJO,OUTPUT);
  digitalWrite(LEDVERDE,HIGH); //Se encienden los dos al inicio
  digitalWrite(LEDROJO,HIGH);
  lcd.begin(16, 2); //Inicializa la pantalla
  lcd.print("Hola, este es");   //Mensaje inicial
  lcd.setCursor(0, 1);
  lcd.print("nuestro pulsometro");
  delay(3000);
  // Initialize sensor
  particleSensor.begin(); 
  particleSensor.setup(); //Iniciamos el sensor
  particleSensor.setPulseAmplitudeRed(0x0A); //Apaga el sensor rojo para indicar que se ha iniciado

}

void loop() {
  long irValue = particleSensor.getIR();    //Leyendo el valor de IR detectaremos si se detecta un dedo o no
  if (irValue > 7000) {                                         //Si detecta un dedo
    digitalWrite(LEDVERDE,HIGH);  //Encendemos el led verde y apagamos el rojo
    digitalWrite(LEDROJO,LOW);
    lcd.clear();
    lcd.print("      ");
    lcd.createChar(0, customChar);
    lcd.home();
    lcd.print("     ");
    lcd.write(8);
    lcd.print("BPM");
    lcd.write(8); //En la primera linea mostramos con el mapa de bits los corazones
    lcd.setCursor(0, 1);  
    if(beatAvg==0){ //Si la media de pulsaciones es 0 se muestra un mensaje
      lcd.print(" Calculando...");
    }else{
      lcd.print("       ");
      lcd.print(beatAvg); //Si la media es mayor que 0 mostramos el valor
    }
    if (checkForBeat(irValue) == true)                        //Si se detecta una pulsacion //checkForBeat viene de la libreria max
    {
      lcd.clear();
      lcd.print("      ");
      lcd.createChar(0, customChar);
      lcd.home();
      lcd.print("     ");
      lcd.write(8);
      lcd.print("BPM");
      lcd.write(8);
      lcd.setCursor(0, 1);
      if(beatAvg==0){
        lcd.print(" Calculando...");
      }else{
        lcd.print("       ");
        lcd.print(beatAvg); //Mostramos la media de pulsaciones calculada
      }
      delay(100);
      long delta = millis() - lastBeat;                   //Duracion media entre pulsaciones.
      lastBeat = millis();

      beatsPerMinute = 60 / (delta / 1000.0);           //Funcion que calcula el BPM.

      if (beatsPerMinute < 255 && beatsPerMinute > 20)               //Para calcular la media utilizamos 4 valores y los              guardamos en un array para hacer la media
      {
        pulsaciones[posPulsacion++] = (byte)beatsPerMinute; //Almacena el dato leido en el array
        posPulsacion %= SIZE; //Calcular posicion

        //Calcula la media de las lecturas
        beatAvg = 0;
        for (byte x = 0 ; x < SIZE ; x++)
          beatAvg += pulsaciones[x];
          beatAvg /= SIZE;
      }
    }
  }
  if (irValue < 7000) {      //Si no se detecta un dedo
    digitalWrite(LEDVERDE,LOW); //Apagamos la luz verde
    digitalWrite(LEDROJO,HIGH); //Encendemos la luz roja
    beatAvg = 0;  //BPM a 0 para no guardarlo
    lcd.clear();
    lcd.print("Ponga el dedo");
    lcd.setCursor(0, 1);
    lcd.print("Por favor");
  }
}

Problemas y posibles mejoras

Respecto al software no ha habido ningún problema, en la parte hardware tuvimos un error al comprar la primera pantalla ya que no funcionaba. El resto de hardware ha funcionado correctamente.

El principal problema lo hemos tenido con el diseño de la caja, las medidas donde van la pantalla y el sensor nos han dado varios problemas ya que las medidas tenían que ser muy exactas y la primera vez nos equivocamos.

En este ultimo diseño hay pequeños detalles como el tamaño del dedo y algún agujero interno de la caja que hemos tenido que añadir para posicionar bien el sensor, a excepción de estas dos modificaciones el resto del diseño si era correcto esta vez.

Detectamos como ultimo error que no podíamos estar abriendo la caja para conectar y desconectar la pila. Como solución a esto utilizamos un interruptor en la parte trasera de la caja.

Cómo mejora adicional teníamos pensado añadir un modulo bluetooth al pulsómetro para utilizar los datos en una aplicación móvil.

Video explicativo

También te podría gustar...

Deja una respuesta

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