Construya un sistema IoT ECG (electrocardiograma) con un AD8232 + ESP32 para registrar la actividad eléctrica de su corazón
Las enfermedades cardíacas han sido una enfermedad importante entre la población durante muchos años. El estudio de la Organización Mundial de la Salud (OMS) también muestra que la mayoría de las personas mueren a causa de enfermedades cardíacas. Por lo tanto, esta enfermedad no se puede tomar a la ligera, por esta razón, los dispositivos sanitarios y los sistemas de seguimiento están diseñados para realizar un seguimiento profesional de la enfermedad.
Sabemos que estas enfermedades se pueden prevenir analizando y monitoreando la señal del ECG en la etapa inicial. En base a esto, decidí trabajar en este proyecto para comenzar a monitorear mi señal de ECG utilizando la plataforma de desarrollo IoT Ubidots .
En este artículo, implementaremos el inicio y la ejecución básicos del monitor de frecuencia cardíaca AD8232 . Luego, le mostraremos cómo conectarlo a su microcontrolador favorito y cómo crear visualizaciones usando una plataforma IoT
¿Qué es el AD8232?
El AD8232 es un pequeño chip que mide la actividad eléctrica del corazón. Esta actividad eléctrica se puede expresar como un ECG o un electrocardiograma. Un electrocardiograma se utiliza para ayudar a diagnosticar diversas enfermedades cardíacas. (Más información: la hoja de datos se puede encontrar aquí )
El plan es configurar la placa AD8232 para percibir la señal de ECG y comenzar a producir la señal de salida desde la placa AD8232. La señal de salida dará aproximadamente 1,5 voltios, produciendo una muestra de 1k/segundo. Luego, estas señales se enviarán a través del USB desde el Arduino, para que podamos verificarlas a través del Serial Monitor y Ubidots .
Sin nada más que decir ¡comencemos!
Requisitos
- Cuenta Ubidots
- Arduino Uno/Mega/Nano
- Módulo de ECG (AD8232)
- Electrodo de ECG - 3 piezas
- Conector de electrodo ECG - 3,5 mm
- Cable de datos
- Cables de puente
Alambrado
Siga el diagrama y la tabla a continuación para comenzar a cablear los dispositivos necesarios:
Una vez que su hardware esté correctamente cableado. Sigamos con la configuración del ESP32.
Configurando ESP32 con Arduino IDE
Siga los pasos a continuación y luego podrá programar el ESP32 con el IDE de Arduino.
1. Haga clic en Archivo > Preferencias
2. en el " URL adicionales del administrador del tablero", asigne la siguiente URL. Puede agregar varias URL, separándolas con comas si es necesario.
https://dl.espressif.com/dl/package_esp32_index.json
3. Para guardar los cambios realizados, asegúrese de presionar el botón OK.
4. Ahora, agregue la plataforma ESP32 Para hacer esto, haga clic en Herramientas> Tablero> Administrador de tableros.
5. En la barra de búsqueda, escriba " ESP32 " e instale el paquete más reciente.
Cargar código fuente
1. Con la configuración adecuada del ESP32 en el IDE de Arduino, cargue el siguiente código en la placa después de asignarle los parámetros requeridos.
- WIFISSID: Tu SSID WiFi
- CONTRASEÑA : Tu contraseña de WiFi
- TOKEN: Tus Ubidots SIMBÓLICO
- MQTT_CLIENT_NAME: su propia cadena ASCII de 8 a 12 caracteres alfanuméricos.
código fuente
Para consultar este código de muestra, así como otros IoT , consulte este repositorio .
/**************************************** * Incluir Bibliotecas ****** **********************************/ #incluir<WiFi.h> #incluir<PubSubClient.h> #define WIFISSID "tu nombre wifi" // Pon tu WifiSSID aquí #define PASSWORD "tu contraseña wifi" // Pon tu contraseña wifi aquí #define TOKEN "tu token" // Pon tu TOKEN Ubidots #define MQTT_CLIENT_NAME "1234a5d6798" / / Nombre del cliente MQTT, ingrese su propia cadena ASCII de 8 a 12 caracteres alfanuméricos; //debe ser una cadena ASCII aleatoria y única y diferente de todos los demás dispositivos /********************************* ******** * Definir constantes **************************************** */ #define VARIABLE_LABEL "sensor" // Asignación de la etiqueta de la variable #define DEVICE_LABEL "esp32" // Asignación de la etiqueta del dispositivo #define SENSOR A0 // Establece el A0 como SENSOR char mqttBroker[] = "industrial.api. ubidots .com "; carga útil de caracteres [100]; tema de conversación[150]; // Espacio para almacenar valores para enviar char str_sensor[10]; /**************************************** * Funciones auxiliares ****** ********************************/ WiFiClient ubidots ; Cliente PubSubClient ( ubidots ); devolución de llamada vacía (tema char*, carga útil byte*, longitud int sin signo) { char p[longitud + 1]; memcpy(p, carga útil, longitud); p[longitud] = NULO; Serial.write(carga útil, longitud); Serial.println(tema); } void reconnect() { // Bucle hasta que nos volvamos a conectar while (!client.connected()) { Serial.println("Intentando conexión MQTT..."); // Intenta conectar if (client.connect(MQTT_CLIENT_NAME, TOKEN, "")) { Serial.println("Conectado"); } else { Serial.print("Error, rc="); Serial.print(cliente.estado()); Serial.println("inténtalo de nuevo en 2 segundos"); // Espere 2 segundos antes de volver a intentarlo delay(2000); } } } /****************************************** * Funciones principales *** ***********************************/ void setup() { Serial.begin(115200); WiFi.begin(WIFISSID, CONTRASEÑA); // Asigna el pin como INPUT pinMode(SENSOR, INPUT); Serie.println(); Serial.print("Esperando WiFi..."); mientras (WiFi.status() != WL_CONNECTED) { Serial.print("."); retraso(500); } Serial.println(""); Serial.println("WiFi conectado"); Serial.println("Dirección IP: "); Serial.println(WiFi.localIP()); cliente.setServer(mqttBroker, 1883); client.setCallback(devolución de llamada); } bucle vacío() { if (!client.connected()) { reconectar(); } sprintf(tema, "%s%s", "/v1.6/devices/", DEVICE_LABEL); sprintf(carga útil, "%s", ""); // Limpia la carga útil sprintf(payload, "{\"%s\":", VARIABLE_LABEL); // Agrega la etiqueta variable float sensor = analogRead(SENSOR); /* 4 es ancho mínimo, 2 es precisión; el valor flotante se copia en str_sensor*/ dtostrf(sensor, 4, 2, str_sensor); sprintf(carga útil, "%s {\"valor\": %s}}", carga útil, str_sensor); // Agrega el valor Serial.println("Publicación de datos en Ubidots Cloud"); client.publish(tema, carga útil); cliente.loop(); retraso(500); }
2. Verifique su código dentro del IDE de Arduino. Para hacer esto, en la esquina superior izquierda de nuestro IDE de Arduino verás el ícono de " Marca de verificación "; presiónelo para verificar su código.
3. Cargue el código en su “ ESP32 Dev Kit ”. Para hacer esto, elija el ícono de " flecha hacia la derecha " al lado del ícono de " marca de verificación ".
4. Después de cargar el código, abra Serial Monitor y verá cómo los dispositivos establecen la conexión a WiFi y al corredor MQTT.
Configuremos Ubidots
Configuremos un Dashboard de Ubidots . Para crearlo, vaya a la sección Dashboard (Datos > Dashboard )
1. Luego, presione " Agregar nuevo widget " y seleccione su widget:
2. Seleccione el tipo de widget que desea mostrar. En mi caso, elijo el “ Gráfico de líneas” :
3. Luego, seleccione la variable deseada para mostrar los datos. Ubidots le permite asignar un nombre de widget personalizado, color, período de datos que se mostrarán y mucho más. Te invito a explorar todas las opciones para los diferentes tipos de widgets. Para finalizar la creación del widget, presione el ícono verde.
Ahora puede monitorear su señal de ECG y otras variables de forma remota gracias a la plataforma de desarrollo de aplicaciones IoT Ubidots :