Tabla de contenido:

Monitor de frecuencia cardíaca IOT (ESP8266 y aplicación de Android): 5 pasos
Monitor de frecuencia cardíaca IOT (ESP8266 y aplicación de Android): 5 pasos

Video: Monitor de frecuencia cardíaca IOT (ESP8266 y aplicación de Android): 5 pasos

Video: Monitor de frecuencia cardíaca IOT (ESP8266 y aplicación de Android): 5 pasos
Video: Arduino IoT Cloud con ESP32, Relé (relay) y Sensor DHT22. Guía completa paso a paso desde cero 2024, Noviembre
Anonim
Image
Image

Como parte de mi proyecto de último año, quería diseñar un dispositivo que monitoreara su frecuencia cardíaca, almacenara sus datos en un servidor y le notificara por medio de una notificación cuando su frecuencia cardíaca fuera anormal. La idea detrás de este proyecto surgió cuando traté de crear una aplicación de ajuste de bits que notifica a un usuario cuando tiene un problema cardíaco, pero no pude encontrar una forma de usar información en tiempo real. El proyecto tiene cuatro partes principales incluido el circuito físico para medir el latido del corazón, un módulo Wi-Fi ESP8266 con código de procesamiento de señal, el servidor para almacenar el código y una aplicación de Android para mostrar el ritmo cardíaco.

Un video que detalla el circuito físico se puede ver arriba. Todo el código del proyecto se puede encontrar en mi Github.

Paso 1: el circuito

El circuito
El circuito

Hay dos métodos principales para medir los latidos del corazón, pero para este proyecto decidí utilizar la fotopletismografía (PPG), que utiliza una fuente de luz infrarroja o roja que se refracta a través de las primeras capas de la piel. Se usa un fotosensor para medir el cambio en la intensidad de la luz (cuando la sangre fluye a través de un vaso). Las señales PPG son increíblemente ruidosas, así que utilicé un filtro de paso de banda para filtrar las frecuencias específicas requeridas. Un corazón humano late entre 1 y 1,6 Hz de frecuencia. El amplificador operacional que utilicé fue el lm324 que tenía la mejor compensación de voltaje de todos los amplificadores operacionales que estaban disponibles para mí. Si está recreando este proyecto, un amplificador operacional de precisión sería una opción mucho mejor.

Se usó una ganancia de solo dos porque la tolerancia máxima de voltaje en el ESP8266 es 3.3v y no quería dañar mi placa.

Siga el circuito anterior e intente que funcione en una placa de pruebas. Si no tiene un osciloscopio en casa, puede conectar la salida a un Arduino y trazarlo, pero asegúrese de que el voltaje no sea superior a la tolerancia del arduino o del microcontrolador.

El circuito se probó en una placa de prueba y se observó un cambio en la salida cuando se colocó un dedo sobre el LED y el fototransistor. Luego decidí soldar la placa, lo que no se mostró en el video.

Paso 2: el código de procesamiento de señales y las comunicaciones del servidor

Image
Image
El código de procesamiento de señales y las comunicaciones del servidor
El código de procesamiento de señales y las comunicaciones del servidor

Decidí usar el IDE de Arduino en el ESP8266 porque es muy fácil de usar. Cuando se trazó la señal, todavía era muy ruidosa, así que decidí limpiarla con un filtro de promedio móvil FIR con un número de muestra de diez. Modifiqué un programa Arduino de ejemplo llamado "suavizado" para hacer esto. Experimenté un poco para encontrar una manera de medir la frecuencia de la señal. Los pulsos eran de diferente longitud y amplitud debido a que el corazón tenía cuatro tipos diferentes de pulsos y las características de las señales PPG. Elegí un valor medio conocido que la señal siempre cruzaba como punto de referencia para cada pulso. Usé un búfer de anillo para determinar cuándo la pendiente de la señal era positiva o negativa. La combinación de estos dos me permitió calcular el período entre los pulsos cuando la señal era positiva y era igual a un valor específico.

El software produjo un BPM bastante inexacto que en realidad no se pudo utilizar. Con iteraciones adicionales, se podría diseñar un programa mejor, pero debido a limitaciones de tiempo, esta no era una opción. El código se puede encontrar en el enlace siguiente.

Software ESP8266

Paso 3: el servidor y las comunicaciones de datos

El servidor y las comunicaciones de datos
El servidor y las comunicaciones de datos

Decidí usar Firebase para almacenar los datos, ya que es un servicio gratuito y es muy fácil de usar con aplicaciones móviles. No hay una API oficial para Firebase con el ESP8266, pero encontré que la biblioteca Arduino funcionaba muy bien.

Hay un programa de ejemplo que se puede encontrar en la biblioteca ESP8266WiFi.h que le permite conectarse a un enrutador con el SSID y la contraseña. Esto se usó para conectar la placa a Internet para que se pudieran enviar datos.

Aunque el almacenamiento de datos se hizo fácilmente, todavía hay una serie de problemas con el envío de notificaciones push a través de una solicitud HTTP POST. Encontré un comentario en Github que usaba un método heredado para hacer esto a través de la mensajería en la nube de Google y la biblioteca HTTP para ESP8266. Este método se puede ver en el código de mi Github.

En Firebase, creé un proyecto y usé la API y las claves de registro en el software. La mensajería en la nube de Firebase se utilizó con la aplicación para enviar notificaciones automáticas al usuario. Cuando se probaron las comunicaciones, los datos se pudieron ver en la base de datos mientras se ejecutaba el ESP8266.

Paso 4: la aplicación de Android

La aplicación de Android
La aplicación de Android

Se diseñó una aplicación de Android muy básica con dos actividades. La primera actividad registró al usuario o lo registró con la API de Firebase. Investigué la hoja de datos y encontré varios tutoriales sobre cómo usar Firebase con una aplicación móvil. La actividad principal que mostraba al usuario de datos del usuario un oyente de eventos en tiempo real para que no hubiera un retraso notable en los cambios en el BPM del usuario. Las notificaciones push se realizaron utilizando la mensajería en la nube de Firebase que se mencionó anteriormente. Hay mucha información útil en la hoja de datos de Firebase sobre cómo implementar esto y la aplicación se puede probar enviando notificaciones desde el panel en el sitio web de Firebase.

Todo el código para las actividades y los métodos para la mensajería en la nube se puede encontrar en mi Repositorio de Github.

Paso 5: Conclusión

Hubo algunos problemas importantes al medir el BPM del usuario. Los valores variaban mucho y no se podían utilizar para determinar la salud de un usuario. Esto se redujo al código de procesamiento de señales que se implementó en el ESP8266. Después de una investigación adicional, descubrí que un corazón tiene cuatro pulsos diferentes con un período variable, por lo que no era de extrañar que el software fuera inexacto. Una forma de combatir esto sería tomar un promedio de los cuatro pulsos en una matriz y calcular el período del corazón sobre esos cuatro pulsos.

El resto del sistema era funcional, pero este es un dispositivo muy experimental que quería construir para ver si el objeto era posible. El código heredado que se usó para enviar notificaciones push pronto será inutilizable, por lo que si está leyendo esto a fines de 2018 o más tarde, se necesitará un método diferente. Sin embargo, este problema solo ocurre con el ESP, por lo que si quisiera implementarlo en un Arduino con capacidad WiFi, no sería un problema.

Si tiene alguna pregunta o problema, no dude en enviarme un mensaje en Instructables.

Recomendado: