Arduino COM Plotter

Arduino COM Plotter

Versión 0.5 [Septiembre 2020]

Arduino COM Plotter, desde ahora ACP, surgió de la necesidad de capturar y procesar datos en mis proyectos caseros. Poco a poco voy incorporando más opciones como por ejemplo el simulador de sistemas de primer orden y los métodos de sintonía PID, pero en esencia su funcionalidad principal es capturar y graficar datos del puerto serie.

Interfaz

Interfaz

Está dividida en 5 zonas, de la 1 a la 3 se corresponden a la parte de la captura y la 4 y 5 a la parte de Ajuste y Simulación PID. Encima de la zona 1 tenemos una barra de herramientas para poder abrir, guargar y exportar nuestros proyectos.

  1. Podemos configurar el puerto serie, velocidad, así como las particularidades de la trama de datos.
  2. En el Log vamos acumulando los datos recibidos y a la derecha podemos cambiar el nombre y el eje Y de las variables.
  3. Gráfico de captura.
  4. En la parte de Ajuste indicamos las variables de nuestro sistema o proceso y seleccionamos el método de sintonía. En la parte de simulación tenemos los datos relativos al controlador y a la simulación.
  5. Gráfico de simulación. Si hemos rellenado correctamente los datos del paso anterior y hacemos clic en el botón simular nos aparecerá una simulación de nuestro sistema en función de la sintonía de nuestro controlador y parámetros de simulación.

Captura de datos

Preparar la trama de datos en nuestro script de Arduino

Para que ACP capture los datos del puerto serie debemos de indicarle con que carácter empieza la trama, el número de variables y el carácter separador. En el bucle principal void loop() debes tener algo parecido al script de debajo.

Serial.print("#");              //carácter inicio
Serial.print(Variable1);
Serial.write(" ");              //carácter separador
Serial.print(Variable2); 
Serial.write(" ");              //carácter separador
Serial.print(Variable3); 
Serial.println();

En función del script de Arduino debes de modificar la parte de configuración en ACP para empezar a capturar.

Configuración del puerto y de la trama de datos

Configurar las variables

Antes de empezar la captura es recomendable poner nombre a nuestras variables y especificar la escala. En cuanto a las escalas, las dos primeras variables comparten el eje Y primario situado a la izquierda de la gráfica y el resto el eje Y secundario situado a la derecha de la gráfica.

Configuración de las variables

Gráfico de captura

Zoom

Podemos hacer zoom seleccionando con el ratón el área deseada. Para deshacer el zoom simplemente pulsar el botón que aparece en el propio eje junto a la barra de scroll.

A la izquierda selección de zoom. A la derecha botón de eliminar zoom

Escalas de los Ejes Y

Si hacemos clic sobre cualquiera de los ejes Y del gráfico de captura nos aparecerá un asistente para introducir el nuevo valor mínimo y máximo.

Situando el ratón sobre el eje Y primario o secundario y girando la rueda del ratón la escala del eje aumenta o disminuye.

Con el ratón sobre cualquiera de los ejes Y si pulsamos las flechas de arriba o abajo del teclado moveremos las series relacionadas con el eje Y correspondiente.

Ejemplo de personalización de escalas de los ejes Y primario y secundario

Notas de texto

Si hacemos clic sobre las series nos aparecerá una nota de texto que se mantiene de forma permanente. Por defecto nos muestra el nombre de la serie y los valores de los ejes X e Y, pero la podemos modificar por el texto que queramos. Del mismo modo la podemos mover a nuestro antojo. Para eliminar cualquier nota la seleccionamos y hacemos clic con el botón derecho.

Ejemplos de notas de texto

Las notas de texto nos permiten obtener datos del gráfico mediante unas palabras clave precedidas de una almohadilla (#). Las más comunes son:

  • #VALX – Valor en ese punto del eje X
  • #VAL – Valor en ese punto del eje Y
  • #SERIESNAME – Nombre de la serie
  • #INDEX – Índice del valor
  • #TOTAL – Suma total de todos los valores del eje Y
  • #AVG – Media de todos los valores del eje Y
  • #MIN – Valor mínimo de la serie
  • #MAX – Valor máximo de la serie
  • #FIRST – Primer valor de la serie
  • #LAST – Último valor de la serie

Para limitar los decimales basta con añadir al final de cada palabra clave {f2} donde el número especifica el número de decimales, ej #MAX{f2} mostrará por ejemplo 25,34.

SERIESNAME: #SERIESNAME\n VALY: #VALY\n VALX: #VALX\n INDEX: #INDEX\n TOTAL: #TOTAL{F2}\n AVG: #AVG{F2}\n MIN: #MIN\n MAX: #MAX\n FIRST: #FIRST\n LAST: #LAST\n 
Ejemplo de notas de texto con palabras clave

Ajuste y Simulación

Léxico típico

Os comento los términos más utilizados que normalmente son términos anglosajones, para que no se pierda nadie.

  • SP: SetPoint o Punto de Consigna.
  • PV: Process Variable o Variable de Proceso.
  • OP: Output o salida.
  • StepTest: Test de salto en escalón.

Los créditos de la parte de Ajuste y Simulación le pertenecen a Rafael González Martin quien tiene una amplia experiencia en control de procesos y desarrolló hace años una herramienta llamada PIDLab de la que Ajuste y Simulación es una pequeña parte.

Si vamos a implementar un PID en nuestro proyecto y aprovechando que podemos graficar con relativa facilidad, se incorporó en la versión 0.2 la parte de Ajuste y Simulación. En esencia, si somos capaces de obtener las constantes que definen nuestro sistema (K, To y Tp), estableciendo unos valores de simulación podemos predecir como será la respuesta de nuestro sistema ante una variación del punto de consigna o de la carga para una determinada sintonía de nuestro controlador.

Ajuste

En la parte superior tenemos las tres constantes que definen nuestro sistema (K, To y Tp) y en la parte inferior disponemos de 12 métodos de sintonía.

  • K: Ganancia del sistema.
  • To: Tiempo muerto del sistema.
  • Tp: Tiempo de proceso.
  • Tf: El parámetro Tf interviene en el cálculo de ciertos métodos de sintonía como Lambda o IMC de los que luego veremos un ejemplo. Este parámetro suele venir referenciado en los libros como la letra griega lambda ( λ )
Zona de Ajuste y selección de método de sintonía

Las constantes del sistema se pueden calcular de varias formas pero en ACP se calculan mediante el método de los dos puntos de Smith con T1(28,3%) y T2(63,2%) a partir de un StepTest que debe estar cargado en el gráfico de captura. Si pulsamos en la calculadora se nos abre un formulario donde nos piden 9 parámetros y a cambio nos devuelve el cálculo de las constantes y nos pinta en el gráfico de captura en forma de notas de texto donde están situadas T1 y T2. A continuación un ejemplo:

Cálculo de las constantes del sistema
  1. PV inicial: valor inicial de PV del test.
  2. PV final: valor final de PV del test.
  3. Serie PV: hay que indicar que serie o vector es la PV.
  4. OP inicial: valor inicial de la salida en el test.
  5. OP final: valor final de la salida en el test.
  6. Tiempo inicial: segundo en el que la PV cambia como respuesta al movimiento de OP.
  7. Tiempo final: segundo en el que la PV se mantiene estable tras el movimiento de OP.
  8. Máximo: rango superior de nuestro controlador/sensor.
  9. Mínimo: rango inferior de nuestro controlador/sensor.
Escalón analizado con T1 y T2 obtenidos en el cálculo

Tras rellenar los parámetros anteriores al pulsar en la calculadora nos aparecerán las constantes del sistema, nos pinta T1 y T2 en el gráfico y si pulsamos en Aceptar nos las copiará al formulario principal.

*Cuando los valores de T1 y T2 no están en la gráfica el cálculo coge el valor más cercano al calculado (no interpolado).

Ejemplo de cálculo de K, To y Tp

Ahora que tenemos las constantes del sistema nos toca elegir el método de sintonía. Cada método está diseñado para trabajar mejor en ciertas situaciones y por eso he puesto en Tipo y Especificación una pequeña explicación, pero puede que del método que a priori es el más adecuado por diseño obtengáis la respuesta que menos os gusta, mi recomendación es que simuléis y cuando estéis más o menos seguros probéis en el sistema real. Para obtener las constantes del controlador (Kc, Ti* y Td*), desplegar haciendo doble clic en el nombre y a continuación hacer clic en P, PI o PID en función del que esté disponible. Aquí es cuando podemos jugar con el parámetro Tf comentado anteriormente. Tf es la constante de tiempo en segundos deseada en lazo cerrado y afecta a los métodos Lambda, IMC, SIM C e Improved SIM C. Cuanto mayor es el parámetro menos agresivos serán las constantes obtenidas.

* Si en las librerías PID para Arduino nos piden Ki y Kd hay que convertir dichas constantes siendo Ki = Kc/Ti y Kd = Kc*Td. A partir de la versión 0.5 se muestran todos los datos automáticamente.

Los métodos de sintonía incluidos en ACP están diseñados para sistemas no integradores de primer orden con tiempo muerto y análisis en lazo abierto.

Simulación

Al identificar el sistema como en los pasos anteriores, lo que estamos haciendo es tratar a nuestro sistema como uno de primer orden con tiempo muerto, que es precisamente el tipo de respuesta que obtendremos al simular. Los parámetros a rellenar son:

  • Ts: Tiempo de muestreo en segundos. Debería de coincidir con el parámetro Delay configurado en la trama de datos y que es el Delay de nuestro script de Arduino.
  • T.Final: Tiempo que queremos simular en segundos.
  • PV.Ini: Valor de la PV inicial en la simulación en unidades de ingeniería.
  • OP.Ini: Valor de la salida inicial en la simulación en %.
  • Carga.Ini: Valor de la carga inicial en simulación en unidades de ingeniería. Normalmente se deja en cero.
  • D.SP: Variación de SetPoint que vamos a simular. Acepta valores positivos y negativos.
  • D.Carga: Variación de carga que vamos a simular. Acepta solo valores positivos.
  • OP.L.Sup: Límite superior de la salida.
  • OP.L.Inf: Límite inferior de la salida.
Simulación del sistema calculado previamente con sintonía IAE-SP

Descarga

Liberado bajo licencia GNU/GPL V3

Referencias

Enlaces

Libros y Publicaciones

[1] Aidan O’Dwyer. Handbook of PI and PID controller tuning rules, 3rd edition, Imperial College Press. ISBN: 978-1-84816-242-6

[2] Karl J. Astrom, Tore Hagglund. Control PID avanzado, Pearson, ISBN: 978-84-8322-511-0

[3] J.G. Ziegler, N.B. Nichols. Optimum Settings For Automatic Controllers, 1942 edition, American Society of Mechanical Engineers. [Link]

[4] G.H. Cohen, G.A. Coon. Theoretical Consideration of Retarded Control, 1953 edition, American Society of Mechanical Engineers. [Link] [Link2]

[5] Daniel E. Rivera. Internal Model Control: A Comprehensive View, 1999 edition, College of Engineering and Applied Sciences. [Link]

4 comentarios en «Arduino COM Plotter»

  1. muy bueno tu proyecto.
    estoy buscando la manera de poder graficar dos sensores sumando las graficas de cada uno es decir como un trazador de curvas. tome parte de un proyecto ya echo y lo modifique a mi necesidad y funciona perfecto en una pantalla TFT pero no puedo graficarlo en Visual. tendras algun ejemplo de graficar algo similar?

    1. Si tienes el código fuente de Arduino, simplemente envías las variables de la siguiente manera:
      Serial.print(«#»); //Carácter de inicio de trama
      Serial.print(var1,0); //Variable 1
      Serial.write(» «); //Carácter separador
      Serial.print(var2,0); //Variable 2
      Serial.write(» «); //Carácter separador
      Serial.print(varn,0); //Variable n
      Serial.println();

      Para la parte de Net (en éste caso VB) tienes el código fuente aquí:
      https://garikoitz.info/blog/descargas/Arduino_COM_Plotter_source.zip
      https://github.com/deurus/ACP

      Un saludo

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información básica sobre protección de datos
Responsable Garikoitz Martínez Moreno +info...
Finalidad Gestionar y moderar tus comentarios. +info...
Legitimación Consentimiento del interesado. +info...
Destinatarios Automattic Inc., EEUU para filtrar el spam. +info...
Derechos Acceder, rectificar y cancelar los datos, así como otros derechos. +info...
Información adicional Puedes consultar la información adicional y detallada sobre protección de datos en nuestra página de política de privacidad.