Monitor portátil con STONE Pantalla táctil de serie y ESP32

Usar STONE monitor portátil de pantalla táctil en serie, el departamento de hardware decidió usar el chip de microprocesador de 32 bits de NXP como el monitoreo de toda la máquina, análisis de ECG, centro de control, amplificación de adquisición de bioelectricidad de ECG, accionamiento de la pierna derecha, importación de la base de datos de ECG del MIT para hacer un algoritmo, pero también monitoree la señal eléctrica del sensor SpO2, la presión arterial, la amplificación de la señal eléctrica respiratoria y el procesamiento de filtrado, a través de la comunicación de alta velocidad en baudios, la unidad STONE de serie tocar detectar para mostrar cambios de forma de onda y parámetros en tiempo real, y comparar con un valor de referencia para hacer un juicio, y monitorear y alarmar los cambios de parámetros del cuerpo humano. Si hay una desviación de rango, emite automáticamente indicaciones de voz.

La nueva versión del STONE La pantalla táctil en serie admite perfectamente la representación y visualización de curvas, el protocolo de comunicación es simple y fácil de recordar, los ingenieros de microcontroladores pueden usarlo después de leer el manual, hay muchos ejemplos de controladores en el conjunto de comandos, copiados directamente para modificar el nombre y los parámetros pueden ser usado. La conexión en serie es simple, puede usar la placa adaptadora oficial, ya sea una conexión en serie directa o USB a serie, es muy conveniente y fácil de usar. El monitor muestra múltiples grupos de parámetros vitales al mismo tiempo, especialmente 3 curvas que se dibujan dinámicamente y se muestran al mismo tiempo muy suavemente, y debería poder dibujar más grupos de gráficos de curvas al mismo tiempo, puede probar según sea necesario . Por supuesto, la función de curva de conjunto de comandos tiene un ejemplo de varios datos empujados al mismo tiempo, pero el uso real del hardware actual no responde, espero que el oficial pueda optimizarse lo antes posible. También se puede solucionar actualizando el firmware. Para esta nueva versión de la función de curva de dibujo, primero probé cómo no se puede desconectar, y finalmente aprendí que la pantalla en serie tiene un nuevo firmware, cepillé el nuevo firmware para ver la "cara real de la montaña". Al ver la suave curva de ECG que sale de la pantalla en serie con el firmware cepillado, el estado de ánimo es feliz, ¿eh?

La imagen del diseño de este proyecto se muestra en la Figura (1). La interfaz se basa en un STWI101WT-01 pantalla serial con resolución de 1024*600, el lado izquierdo muestra 2/3 de la curva de forma de onda y el 1/3 derecho muestra el valor.

Este artículo se centrará en la creación y representación de la vista del gráfico de curvas. Está completamente de acuerdo con el proceso de producción de la demostración del proyecto, sin clasificación, tal vez te sientas desordenado, pero es el proceso real de desarrollo real.

Primero, decidimos arreglar la representación de la curva de ECG.

 

Figura (1) Interfaz esperada del diseño del proyecto
Figura (1) Interfaz esperada del diseño del proyecto

Esta demostración simula una frecuencia cardíaca de 75 lpm, lo que equivale a un latido cardíaco de 800 ms, es decir, un punto cada 40 ms, un ciclo cada 20 puntos, basado en el eje X de control de vista de gráfico completo dividido en 100 partes iguales, forma de onda de 4 s por pantalla, actualización de pantalla tasa de 25Hz, se ve muy suave. El elemento de serie de líneas de este control de vista de gráfico se establece en suave = falso (la forma de onda de ECG es nítida), no se muestra el sobre inferior y el marcador de punto no se muestra. área. Aquí vea la Figura (4), min = 0, max = 140 para el eje Y, el valor máximo dado en el programa es 130, y el rango es relativamente completo. Consulte la Figura (2) – Figura (7) para conocer otros parámetros, que se configuran para la vista de gráfico 1 y sus elementos X axis1, Yaxis2, bar series1 y line series1. Elegimos rgba transparente (0,0,0,0) para el color de fondo del control de vista de gráfico, que revela el color base (negro), y otros controles, como la vista, tienen las mismas características.

Figura (2) Configuración de propiedades de la vista de gráfico1
Figura (2) Configuración de propiedades de la vista de gráfico1
Figura (3) Configuración de la propiedad X axis1 de chart view1
Figura (3) Configuración de la propiedad X axis1 de chart view1
Figura (4) Configuración de propiedad del eje Y1 de la vista de gráfico 1
Figura (4) Configuración de propiedad del eje Y1 de la vista de gráfico 1
Figura (5) configuración de la propiedad bar series1 de chart view1
Figura (5) configuración de la propiedad bar series1 de chart view1
Figura (6) Configuración de la propiedad line series1 de chart view111
Figura (6) Configuración de la propiedad line series1 de chart view111
Figura (7) Configuración de propiedades de la serie de líneas1 de la vista de gráfico12
Figura (7) Configuración de propiedades de la serie de líneas1 de la vista de gráfico12

El código de programación para simular la forma de onda del ECG (75 lpm) de acuerdo con la configuración anterior es el siguiente.

Primero, defina dos variables de la siguiente manera.

  Int num19_1 = 0;
  Int num19_2 = 0;
Then generally in the main loop main.c, the ECG curve is depicted by the following code.
  delay(10);   
  
  num19_1 += 1;
  if(num19_1 >= 4){ // Draw one point every 40ms.
    num19_1 = 0;
    num19_2 += 1;
    if(num19_2 == 3){
      Serial.println("ST<{\"cmd_code\":\"set_value\",\"type\":\"line_series\",\"widget\":\"line_series1\",\"mode\":\"push\",\"value\" :10}>ET");
    }else if(num19_2 == 4){
      Serial.println("ST<{\"cmd_code\":\"set_value\",\"type\":\"line_series\",\"widget\":\"line_series1\",\"mode\":\"push\",\"value\" :130}>ET");
    }else{
      Serial.println("ST<{\"cmd_code\":\"set_value\",\"type\":\"line_series\",\"widget\":\"line_series1\",\"mode\":\"push\",\"value\" :40}>ET");
    }
    if(num19_2 >= 20){  //every 20 data is a cycle
      num19_2 = 0;
    }
  }

Luego, desea cuidar la curva de CO2, centrándose en la sincronización de escaneo.

 

Las 3 curvas de este proyecto, la vista de gráfico 2 es para el sensor de oxígeno en sangre SpO2 y la vista de gráfico 3 es para la respiración de CO2.

Chart view2, chart view3 X axis están configurados min = 0, max = 100, y ECG chart view1 lo mismo, barrido de curva para mantener sincronizado, chart view2 Y axis2 max = 100, por lo que se da la preparación del valor del eje Y del programa a 95 como máximo, el algoritmo se muestra en el siguiente código de programa.

First, define 3 variables as follows.
Int num19_3 = 0;
Int num19_4 = 0;
Int num19_5 = 0;
The CO2 curve is then generally depicted in the main loop, main.c, by the following code.
num19_3 += 1;
if(num19_3 >= 4){ //one point every 40ms
num19_3 = 0;
num19_4 += 1;
if(num19_4 <= 10){
num19_5 = num19_4*9; //the first 10 points increase linearly
Serial.print("ST<{\"cmd_code\":\"set_value\",\"type\":\"line_series\",\"widget\":\"line_series3\",\"mode\":\"push\",\"value\":" );
Serial.print(num19_5);
Serial.println("}>ET");
}else if(num19_4 <= 40){ // the last 30 points decrease linearly
num19_5 = 95 - (num19_4 - 10)*3;
Serial.print("ST<{\"cmd_code\":\"set_value\",\"type\":\"line_series\",\"widget\":\"line_series3\",\"mode\":\"push\",\"value\":" );
Serial.print(num19_5);
Serial.println("}>ET");
}else{
num19_4 = 0;
Serial.println("ST<{\"cmd_code\":\"set_value\",\"type\":\"line_series\",\"widget\":\"line_series3\",\"mode\":\"push\",\"value\" :5}>ET");
} }

La figura (8) muestra la forma de onda de ECG en la parte superior y la forma de onda de CO2 en la parte inferior (radio del símbolo = 4)
La figura (8) muestra la forma de onda de ECG en la parte superior y la forma de onda de CO2 en la parte inferior (radio del símbolo = 4)
La figura (9) muestra la forma de onda de ECG en la parte superior y la forma de onda de CO2 en la parte inferior (radio del símbolo = 30)
La figura (9) muestra la forma de onda de ECG en la parte superior y la forma de onda de CO2 en la parte inferior (radio del símbolo = 30)

La siguiente forma de onda de CO2 en la Figura (8) es el efecto del programa anterior cuando el símbolo de atributo radio redondo = 4 para la serie de líneas3. Intentamos modificar el radio redondo del símbolo = 30, esperando que la transición de la curva sea más redondeada, pero el resultado de la prueba no es diferente de la Figura (8), ver Figura (9), que muestra que cuando los puntos son más densos, el efecto de redondeo no es obvio Esto solo se puede lograr cambiando las coordenadas del punto.

Figura (10) con ejes de separación de coordenadas
Figura (10) con ejes de separación de coordenadas

Echemos un vistazo a las propiedades del eje X en la Figura (3) usando la Figura (10). En la Figura (3), cuando mostrar = verdadero para la línea dividida, se mostrará la barra vertical larga (barra separadora); cuando show = true para línea, se mostrará la línea horizontal del eje X (como la línea horizontal en la parte inferior de la vista superior del gráfico); cuando show = true para tick, se mostrará la línea delgada de la escala debajo de la línea horizontal del eje X; cuando show = true para la etiqueta, se mostrará el número debajo de la línea horizontal del eje X (el valor rellenado con datos). = verdadero, mostrará el número debajo de la línea horizontal del eje X (el valor ingresado en los datos). Eso es todo.

Ahora estaba en la curva de SpO2 y decidió usar la conversión AD.

Simulación de curvas usando ESP32 ADC, es de 12 bits, escala completa 4096. gráfico view2 Y eje max = 255, el valor de lectura ADC dividido por 20, puede cumplir con la visualización de la curva. La pantalla SPO2 a escala completa es del 100%, por lo que el valor de lectura de ADC dividido por 20 y luego dividido por 2.55 se puede mostrar en label2, el programa porque es una operación de número entero, el algoritmo se corrige, consulte la prueba real bien el código del programa. Use la función analogRead(32) en Arduino para leer el valor de conversión AD de GPIO32 (también ADC-CH4) de ESP32 directamente. La prueba se puede realizar con un potenciómetro, pero también simplemente conecte el pin ADC-CH4 a GND, a +3.3V, a +5V, o sobresalga para ver la forma de onda de interferencia, vea el efecto de video (se muestra en bajo cuando está conectado a tierra, conectado a + 3.3 V, + 5 V es la misma amplitud completa alta, el voladizo es una curva espuria), el control label2 correcto muestra los cambios de voltaje ADC a tiempo. El código y el código del algoritmo es el siguiente.

//--------ADC-------
int adcPin = 32; // GPIO32, also ADC-CH4
int adcValue = 0;
int num19_6 = 0;
 delay(10);   
 adcValue = analogRead(adcPin); // Read in the value of the AD conversion
 adcValue = adcValue/20;
  //-----SPO2 curve plotting ------
  num19_6 += 1;
  if(num19_6 >= 4){ // one point every 40ms
    num19_6 = 0;
        Serial.print("ST<{\"cmd_code\":\"set_value\",\"type\":\"line_series\",\"widget\":\"line_series2\",\"mode\":\"push\",\"value\":" );
    Serial.print(adcValue);
    Serial.println("}>ET");      
    adcValue = (adcValue*10)/21;
        Serial.print("ST<{\"cmd_code\":\"set_value\",\"type\":\"label\",\"widget\":\"label2\",\"value\":");
    Serial.print(adcValue);
    Serial.println("}>ET");      
  }

Fig. (11) Los 3 grupos de curvas completados parcialmente
Fig. (11) Los 3 grupos de curvas completados parcialmente

Consulte la Figura (11) para ver una toma parcial de la imagen real y la Figura (12) para ver la interfaz de diseño en la computadora. Como en la Figura (3), cuando el show = falso de la línea dividida del eje X2 de la vista del gráfico2, la barra separadora del área SPO2 amarilla en el medio de la Figura (12) apagará la pantalla (como la pantalla real). imagen); la forma de onda suave de la pantalla de video se puede hacer completamente como un osciloscopio en tiempo real.

Figura (12) 3 conjuntos de curvas completadas por computadora
Figura (12) 3 conjuntos de curvas completadas por computadora

Puntos de referencia

  • La estructura de la STONE El control de vista de gráfico de la plataforma Designer se muestra en la Figura (13). Hay una descripción detallada en el Manual de usuario oficial 8.1, incluida la explicación de cada propiedad y parámetro; el conjunto de instrucciones 4.24 proporciona el método de inserción de datos, consulte la Figura (14), y aquí hay ejemplos de instrucciones utilizadas en el programa.
Figura (13) Estructura de la vista de gráfico del control de curva
Figura (13) Estructura de la vista de gráfico del control de curva
Figura (14) Instrucciones para usar la vista de gráfico del control de curva
Figura (14) Instrucciones para usar la vista de gráfico del control de curva

2. La función de lectura analogRead() de Arduino para la conversión AD analógica. En el menú de Arduino versión 1.8.13 “Ayuda”—“Referencia” —- “aprendizaje —– “E/S analógica”, puede ver la descripción de la función analogRead() de la siguiente manera.

analogRead ()

Descripción

La placa Arduino contiene un convertidor de analógico a digital de 6 bits y 8 canales (16 canales en Mini y Nano, 10 en Mega). Esto significa que asignará voltajes de entrada entre 0 y 5 voltios a valores enteros entre 0 y 1023. Esto produce una resolución entre lecturas de 5 voltios / 1024 unidades o 0049 voltios (4.9 mV) por unidad. analógicoReferencia ().

Se tarda unos 100 microsegundos (0.0001 s) en leer una entrada analógica, por lo que la tasa de lectura máxima es de unas 10,000 veces por segundo.

Sintaxis

lectura analógica (pin)

parámetros

pin: el número de pines de entrada analógica para leer (0 a 5 en la mayoría de las placas, 0 a 7 en Mini y Nano, 0 a 15 en Mega)

Retorno

entero (0 a 1023)

Nota:

Si el pin de entrada analógica no está conectado a nada, el valor devuelto por analogRead() fluctuará en función de una serie de factores (p. ej., los valores de las otras entradas analógicas, qué tan cerca está su mano de la placa, etc.).

Sin embargo, tenga en cuenta que aquí el ADC-CH4 de ESP32 es de 12 bits y el valor de retorno será de 0 a 4096. Para obtener más detalles, consulte el enlace relacionado en el artículo original y el manual de ESP32.

stone_tft_lcd_module_touch_screen_display_hmi_display (23)

stone_tft_lcd_module_touch_screen_display_hmi_display (23)

Ir al Inicio