Construye un sistema IoT ECG (Electrocardiograma) con un AD8232 + ESP32 para registrar la actividad eléctrica de tu corazón

Desde hace muchos años, las cardiopatías son una de las principales enfermedades de la población. El estudio de la Organización Mundial de la Salud (OMS) también muestra que la mayoría de las personas mueren por enfermedades del corazón. Por lo tanto, esta enfermedad no puede tomarse a la ligera, por esta razón, los dispositivos sanitarios y los sistemas de monitorización están diseñados para realizar un seguimiento profesional de la enfermedad.

Sabemos que estas enfermedades se pueden prevenir analizando y monitorizando la señal de ECG en la fase inicial. Basándome en esto, decidí trabajar en este proyecto para empezar a monitorizar mi señal de ECG utilizando Ubidots IoT Development Platform.

En este artículo, desplegaremos el arranque y funcionamiento muy básico del monitor de ritmo cardíaco AD8232. A continuación, le mostraremos cómo conectarlo a su micro-controlador favorito y cómo crear visualizaciones utilizando 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 del corazón. (Más información: La hoja de datos puede consultarse aquí.)

El plan es configurar la placa AD8232 para percibir la señal ECG, para empezar a producir la señal de salida de la placa AD8232. La señal de salida dará aproximadamente 1,5 voltios, produciendo una muestra de 1k/segundo. Entonces, estas señales serán enviadas a través del USB desde el Arduino, para que podamos comprobarlo a través del Monitor Serial y Ubidots.

Sin nada más que decir, ¡comencemos!

Requisitos

  • Cuenta Ubidots
  • Arduino Uno / Mega / Nano
  • Módulo ECG (AD8232)
  • Electrodo ECG - 3 piezas
  • Conector de electrodo de ECG - 3,5 mm
  • Cable DATA
  • Cables puente

Cableado

Siga el diagrama y la tabla siguientes para empezar a cablear los dispositivos necesarios:

Una vez que su hardware está correctamente cableado. Vamos a continuar con la configuración del ESP32.

Configuración de ESP32 con Arduino IDE

Por favor, siga los siguientes pasos y entonces usted puede capaz de programar el ESP32 con el IDE de Arduino.

1. Haga clic en Archivo >Preferencias

2. en el campo "URLs adicionales del Board Manager" asigne la URL que aparece a continuación. Puede añadir 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 pulsar el botón OK.

4. Ahora, agregue la plataforma ESP32 en el IDE de Arduino. Para ello, haga clic enTool> Board> Board Manager

5. En la barra de búsqueda, escriba "ESP32" e instale el último paquete.

Cargar código fuente

1. Con la configuración adecuada de la ESP32 en el IDE de Arduino, cargue el siguiente código en la placa después de asignar los parámetros necesarios en él.

  • WIFISSID: Su SSID WiFi
  • CONTRASEÑA: Tu contraseña WiFi
  • TOKEN: Sus Ubidots TOKEN
  • MQTT_NOMBRE_CLIENTE: Su propia cadena ASCII de 8-12 caracteres alfanuméricos.

Código fuente

Para consultar este código de ejemplo, así como otros tutoriales de proyectos IoT, echa un vistazo a este repositorio.

/****************************************
 * Include Libraries
 ****************************************/
#include <WiFi.h>
#include <PubSubClient.h>

#define WIFISSID "your wifi name" // Put your WifiSSID here
#define PASSWORD "your wifi password" // Put your wifi password here
#define TOKEN "your token" // Put your Ubidots' TOKEN
#define MQTT_CLIENT_NAME "1234a5d6798" // MQTT client Name, please enter your own 8-12 alphanumeric character ASCII string; 
                                           //it should be a random and unique ascii string and different from all other devices

/****************************************
 * Define Constants
 ****************************************/
#define VARIABLE_LABEL "sensor" // Assing the variable label
#define DEVICE_LABEL "esp32" // Assig the device label

#define SENSOR A0 // Set the A0 as SENSOR

char mqttBroker[]  = "industrial.api.ubidots.com";
char payload[100];
char topic[150];
// Space to store values to send
char str_sensor[10];

/****************************************
 * Auxiliar Functions
 ****************************************/
WiFiClient ubidots;
PubSubClient client(ubidots);

void callback(char* topic, byte* payload, unsigned int length) {
  char p[length + 1];
  memcpy(p, payload, length);
  p[length] = NULL;
  Serial.write(payload, length);
  Serial.println(topic);
}

void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.println("Attempting MQTT connection...");
    
    // Attemp to connect
    if (client.connect(MQTT_CLIENT_NAME, TOKEN, "")) {
      Serial.println("Connected");
    } else {
      Serial.print("Failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 2 seconds");
      // Wait 2 seconds before retrying
      delay(2000);
    }
  }
}

/****************************************
 * Main Functions
 ****************************************/
void setup() {
  Serial.begin(115200);
  WiFi.begin(WIFISSID, PASSWORD);
  // Assign the pin as INPUT 
  pinMode(SENSOR, INPUT);

  Serial.println();
  Serial.print("Waiting for WiFi...");
  
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  
  Serial.println("");
  Serial.println("WiFi Connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  client.setServer(mqttBroker, 1883);
  client.setCallback(callback);  
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }

  sprintf(topic, "%s%s", "/v1.6/devices/", DEVICE_LABEL);
  sprintf(payload, "%s", ""); // Cleans the payload
  sprintf(payload, "{\"%s\":", VARIABLE_LABEL); // Adds the variable label
  
  float sensor = analogRead(SENSOR); 
  
  /* 4 is mininum width, 2 is precision; float value is copied onto str_sensor*/
  dtostrf(sensor, 4, 2, str_sensor);
  
  sprintf(payload, "%s {\"value\": %s}}", payload, str_sensor); // Adds the value
  Serial.println("Publishing data to Ubidots Cloud");
  client.publish(topic, payload);
  client.loop();
  delay(500);
}

2. Verifique su código dentro del IDE de Arduino. Para ello, en la esquina superior izquierda de nuestro IDE Arduino verás el icono"Marca de verificación"; púlsalo para verificar tu código.

3. Carga el código en tu "ESP32 Dev Kit". Para ello, elija el icono"flecha hacia la derecha" al lado del icono"marca de verificación".

4. Después de subir el código, abre el Serial Monitor y verás como los dispositivos están estableciendo la conexión a WiFi, y al broker MQTT.

Configuremos Ubidots

Vamos a crear un Ubidots' Dashboard. Para crearlo, vamos a la secciónDashboard(Datos > Dashboard )

1. A continuación, pulsa en "Añadir nuevo widget", y selecciona tu widget:

2. Seleccione el tipo de widget que desea visualizar. En mi caso, elijo el "Gráfico de líneas":

3. A continuación, seleccione la variable deseada para mostrar los datos. Ubidots permite asignar un nombre personalizado al widget, color, periodo de datos a mostrar y mucho más. Te invito a explorar todas las opciones de los diferentes tipos de widgets. Para finalizar la creación del widget, pulsa el icono verde.

Ahora puede monitorizar su señal de ECG y otras variables de forma remota gracias a la plataforma de desarrollo de aplicaciones IoT de Ubidots: