Gausstek DEMP

El Generador de Pulso Electromagnético Digital (Digital Electro-Magnetic Pulse Generator, DEMP) es un sistema de Terapia por Resonancia Magnética (MRT), desarrollado por Gausstek, que apunta a tratar diversas anomalías y patologías humanas. Mi trabajo consistió en desarrollar el software de operación del equipo de tratamiento.

Ficha Técnica

Lenguajes PHP HTML CSS Javascript Python JSON SQL
Plataformas Raspberry Pi OS Web
Infraestructura Linux (Ubuntu) Apache Raspberry Pi
Tecnologías jQuery Mobile MySQL Laravel Flask

Funcionamiento

El artefacto en cuestión se trata de una camilla (u otro dispositivo de reposo para el paciente) dotada de varias antenas de alta potencia conectadas a un equipo que las opera. Este equipo enciende las antenas, regula la intensidad, tipo y frecuencia de señal que emiten, y su tiempo total de funcionamiento (tiempo del tratamiento).

En la problemática inicial, había que plantear una solución que resolviese dos aspectos principales:

  1. Control remoto de los equipos.
  2. Interfaz de usuario flexible (responsiva).

Se requería que el dispositivo pueda ser administrado remotamente, por ejemplo, desde una LAN, para que un mismo puesto de control pudiese operar a todos los equipos dentro de un mismo centro o sala. Por otro lado, la interfaz debía poder adaptarse a distintas pantallas, sin ser un diseño fijo para un único tipo de monitor.

Para resolver estas cuestiones, diseñé un sistema de 3 capas, dividiendo cada función en una solución singular (autónoma): API de comunicación con el hardware, interfaz de control del equipo y administrador remoto. Para ello, elegí un lenguaje de programación acorde a la naturaleza de cada solución. Para la comunicación con el hardware utilicé Python, ya que es un lenguaje predilecto y muy funcional en Raspberry Pi OS (el sistema operativo del equipo en cuestión), tiene un buen control para el manejo de funciones de bajo nivel y es muy flexible para escalar a niveles superiores, como por ejemplo, para exponer una API. La interfaz de usuario del equipo (y esto puede ser cuestionable) elegí hacerla basada en web, con una infraestructura mínima LAMP. Esto me permitió brindar responsividad en la interfaz (HTML) y delegar fácilmente una API de comunicación externa para el control remoto, aprovechando el web server corriendo en el mismo equipo.

Demo de funcionamiento del equipo sin antenas conectadas (fase de warming up)

La API para comunicar el hardware con el software está escrita en Python, utilizando Flask, un framework liviano, minimalista, y bastante popular. El sistema expone una API para recibir comandos, los depura, los ejecuta en el hardware mediante el puerto serial, y devuelve la respuesta.

La interfaz está basada en Laravel, con un diseño simple en HTML y polling de datos a través de Javascript para actualizar la interfaz durante el proceso operativo. La interfaz se comunica directamente con la API del hardware para la lectura y el envío de comandos.

El administrador remoto, también basado en Laravel, no se llegó a finalizar por motivos ajenos a mí, sin embargo la realización y el concepto de manipulación de datos de forma remota es viable y fue probada.

La rutina de funcionamiento es sencilla. La API del hardware escucha, mediante el web server Apache, en una dirección local, mapeada como (por ejemplo) http://api.demp.gausstek/. Todas las acciones disponibles para el hardware se encuentran mapeadas en rutas REST. Cuando el sistema operativo del equipo inicia, inicia el servidor web, abre el navegador y carga la interfaz de usuario local (por ejemplo) en http://ui.demp.gausstek/. Al cargar, la interfaz le envía un comando de status general a la API para determinar datos básicos de configuración del equipo, así como datos informativos para el usuario. Un proceso de monitoreo constante (polling) inicia, el cual pregunta permanentemente el status del equipo (información de estado, cantidad de antenas conectadas, y el estado operacional del equipo en el momento actual). Este proceso asincrónico se utiliza para detectar cambios de estado, informarlos en la interfaz/log, y actuar en consecuencia, tanto en modo activo como de reposo. Antes de iniciar el tratamiento y operación principal, el operador puede ajustar la frecuencia de señal (10-60Hz), tipo de señal (triangular, cuadrada y senoidal), intensidad de señal (1 a 99%), y la duración total del tratamiento (en minutos). Luego, al iniciar el proceso se envía toda esta información a la API, que activará las antenas y ejecutará el inicio del proceso en el hardware. El proceso puede interrumpirse y/o ponerse en pausa. Al finalizar, se informa el estado general y se desactiva el hardware, junto con las antenas.

Interfaz gráfica

Interfaz de usuario del equipo.
Equipo real y funcional (desarmado, sin dispositivo de reposo para el usuario).

Componentes y Tecnologías utilizadas

La API del hardware fue basada en el microframework Flask, mientras que la interfaz de usuario fue basada en Slim Framework (PHP). Se utiliza MySQL como motor de base de datos. La comunicación con el hardware se efectúa a través del puerto serial de la Raspberry Pi, utilizando el módulo pySerial.

Módulos de Python adicionales

pySerial Flask-RESTful Requests

Librerías externas de PHP

jQuery JSON Font Awesome Bootstrap