{"id":674,"date":"2020-05-19T13:45:51","date_gmt":"2020-05-19T13:45:51","guid":{"rendered":"https:\/\/garikoitz.info\/blog\/?p=674"},"modified":"2025-11-19T21:30:39","modified_gmt":"2025-11-19T21:30:39","slug":"arduino-com-plotter","status":"publish","type":"post","link":"https:\/\/garikoitz.info\/blog\/2020\/05\/arduino-com-plotter\/","title":{"rendered":"Arduino COM Plotter"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em>Versi\u00f3n 0.5 [Septiembre 2020]<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Arduino COM Plotter<\/strong>, desde ahora <strong>ACP<\/strong>, surgi\u00f3 de la necesidad de capturar y procesar datos en mis proyectos caseros. Poco a poco voy incorporando m\u00e1s opciones como por ejemplo el simulador de sistemas de primer orden y los m\u00e9todos de sinton\u00eda PID, pero en esencia su funcionalidad principal es capturar y graficar datos del puerto serie.<\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u00cdndice<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Alternar tabla de contenidos\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/garikoitz.info\/blog\/2020\/05\/arduino-com-plotter\/#Interfaz\" >Interfaz<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/garikoitz.info\/blog\/2020\/05\/arduino-com-plotter\/#Captura_de_datos\" >Captura de datos<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/garikoitz.info\/blog\/2020\/05\/arduino-com-plotter\/#Preparar_la_trama_de_datos_en_nuestro_script_de_Arduino\" >Preparar la trama de datos en nuestro script de Arduino<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/garikoitz.info\/blog\/2020\/05\/arduino-com-plotter\/#Configurar_las_variables\" >Configurar las variables<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/garikoitz.info\/blog\/2020\/05\/arduino-com-plotter\/#Grafico_de_captura\" >Gr\u00e1fico de captura<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/garikoitz.info\/blog\/2020\/05\/arduino-com-plotter\/#Zoom\" >Zoom<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/garikoitz.info\/blog\/2020\/05\/arduino-com-plotter\/#Escalas_de_los_Ejes_Y\" >Escalas de los Ejes Y<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/garikoitz.info\/blog\/2020\/05\/arduino-com-plotter\/#Notas_de_texto\" >Notas de texto<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/garikoitz.info\/blog\/2020\/05\/arduino-com-plotter\/#Ajuste_y_Simulacion\" >Ajuste y Simulaci\u00f3n<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/garikoitz.info\/blog\/2020\/05\/arduino-com-plotter\/#Lexico_tipico\" >L\u00e9xico t\u00edpico<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/garikoitz.info\/blog\/2020\/05\/arduino-com-plotter\/#Ajuste\" >Ajuste<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/garikoitz.info\/blog\/2020\/05\/arduino-com-plotter\/#Simulacion\" >Simulaci\u00f3n<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/garikoitz.info\/blog\/2020\/05\/arduino-com-plotter\/#Descarga\" >Descarga<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/garikoitz.info\/blog\/2020\/05\/arduino-com-plotter\/#Referencias\" >Referencias<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/garikoitz.info\/blog\/2020\/05\/arduino-com-plotter\/#Enlaces\" >Enlaces<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/garikoitz.info\/blog\/2020\/05\/arduino-com-plotter\/#Libros_y_Publicaciones\" >Libros y Publicaciones<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Interfaz\"><\/span>Interfaz<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/Interfaz_01-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/Interfaz_01-1-1024x576.png\" alt=\"\" class=\"wp-image-678\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/Interfaz_01-1-1024x576.png 1024w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/Interfaz_01-1-300x169.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/Interfaz_01-1-768x432.png 768w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/Interfaz_01-1-1536x864.png 1536w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/Interfaz_01-1-480x270.png 480w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/Interfaz_01-1.avif 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Est\u00e1 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\u00f3n PID. Encima de la zona 1 tenemos una barra de herramientas para poder abrir, guargar y exportar nuestros proyectos.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Podemos configurar el puerto serie, velocidad, as\u00ed como las particularidades de la trama de datos.<\/li>\n\n\n\n<li>En el Log vamos acumulando los datos recibidos y a la derecha podemos cambiar el nombre y el eje Y de las variables.<\/li>\n\n\n\n<li>Gr\u00e1fico de captura.<\/li>\n\n\n\n<li>En la parte de Ajuste indicamos las variables de nuestro sistema o proceso y seleccionamos el m\u00e9todo de sinton\u00eda. En la parte de simulaci\u00f3n tenemos los datos relativos al controlador y a la simulaci\u00f3n.<\/li>\n\n\n\n<li>Gr\u00e1fico de simulaci\u00f3n. Si hemos rellenado correctamente los datos del paso anterior y hacemos clic en el bot\u00f3n simular nos aparecer\u00e1 una simulaci\u00f3n de nuestro sistema en funci\u00f3n de la sinton\u00eda de nuestro controlador y par\u00e1metros de simulaci\u00f3n.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Captura_de_datos\"><\/span>Captura de datos<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Preparar_la_trama_de_datos_en_nuestro_script_de_Arduino\"><\/span>Preparar la trama de datos en nuestro script de Arduino<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Para que ACP capture los datos del puerto serie debemos de indicarle con que <strong>car\u00e1cter empieza la trama<\/strong>, el <strong>n\u00famero de variables<\/strong> y el <strong>car\u00e1cter separador<\/strong>. En el bucle principal <strong>void loop()<\/strong> debes tener algo parecido al script de debajo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Serial.print(\"#\");              \/\/car\u00e1cter inicio\nSerial.print(Variable1);\nSerial.write(\" \");              \/\/car\u00e1cter separador\nSerial.print(Variable2); \nSerial.write(\" \");              \/\/car\u00e1cter separador\nSerial.print(Variable3); \nSerial.println();<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En funci\u00f3n del script de Arduino debes de modificar la parte de configuraci\u00f3n en ACP para empezar a capturar.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/ACP_config.png\"><img decoding=\"async\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/ACP_config.png\" alt=\"\" class=\"wp-image-682\"\/><\/a><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Configurar_las_variables\"><\/span>Configurar las variables<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de empezar la captura es recomendable poner nombre a nuestras variables y especificar la escala. En cuanto a las escalas, las <strong>dos primeras<\/strong> variables comparten el <strong>eje Y primario<\/strong> situado a la <strong>izquierda <\/strong>de la gr\u00e1fica y el <strong>resto<\/strong> el <strong>eje Y secundario<\/strong> situado a la <strong>derecha <\/strong>de la gr\u00e1fica.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-thumbnail\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/ACP_datos-150x150.png\" alt=\"\" class=\"wp-image-683\"\/><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Grafico_de_captura\"><\/span>Gr\u00e1fico de captura<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Zoom\"><\/span>Zoom<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos hacer zoom seleccionando con el rat\u00f3n el \u00e1rea deseada. Para deshacer el zoom simplemente pulsar el bot\u00f3n que aparece en el propio eje junto a la barra de scroll.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/ACP_zoom03.png\"><img decoding=\"async\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/ACP_zoom03.png\" alt=\"\" class=\"wp-image-689\"\/><\/a><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Escalas_de_los_Ejes_Y\"><\/span>Escalas de los Ejes Y<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Si hacemos clic sobre cualquiera de los ejes Y del gr\u00e1fico de captura nos aparecer\u00e1 un asistente para introducir el nuevo valor m\u00ednimo y m\u00e1ximo.<\/p>\n\n\n\n<div class=\"wp-block-media-text is-stacked-on-mobile alignwide\"><figure class=\"wp-block-media-text__media\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/mousewheel01.png\"><img decoding=\"async\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/mousewheel01.png\" alt=\"\" class=\"wp-image-845 size-full\"\/><\/a><\/figure><div class=\"wp-block-media-text__content\">\n<p class=\"wp-block-paragraph\">Situando el rat\u00f3n sobre el eje Y primario o secundario y girando la rueda del rat\u00f3n la escala del eje aumenta o disminuye.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con el rat\u00f3n 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.<\/p>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/youtu.be\/V4yX5jPHrG4\">https:\/\/youtu.be\/V4yX5jPHrG4<\/a><\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Notas_de_texto\"><\/span>Notas de texto<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Si hacemos clic sobre las series nos aparecer\u00e1 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\u00f3n derecho.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/ACP_notatexto01.png\"><img decoding=\"async\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/ACP_notatexto01.png\" alt=\"\" class=\"wp-image-692\"\/><\/a><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Las notas de texto nos permiten obtener datos del gr\u00e1fico mediante unas palabras clave precedidas de una almohadilla (#). Las m\u00e1s comunes son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>#VALX<\/strong> &#8211; Valor en ese punto del eje X<\/li>\n\n\n\n<li><strong>#VAL<\/strong> &#8211; Valor en ese punto del eje Y<\/li>\n\n\n\n<li><strong>#SERIESNAME<\/strong> &#8211; Nombre de la serie<\/li>\n\n\n\n<li><strong>#INDEX<\/strong> &#8211; \u00cdndice del valor<\/li>\n\n\n\n<li><strong>#TOTAL<\/strong> &#8211; Suma total de todos los valores del eje Y<\/li>\n\n\n\n<li><strong>#AVG<\/strong> &#8211; Media de todos los valores del eje Y<\/li>\n\n\n\n<li><strong>#MIN<\/strong> &#8211; Valor m\u00ednimo de la serie<\/li>\n\n\n\n<li><strong>#MAX<\/strong> &#8211; Valor m\u00e1ximo de la serie<\/li>\n\n\n\n<li><strong>#FIRST <\/strong>&#8211; Primer valor de la serie<\/li>\n\n\n\n<li><strong>#LAST<\/strong> &#8211; \u00daltimo valor de la serie<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Para limitar los decimales basta con a\u00f1adir al final de cada palabra clave <strong>{f2}<\/strong> donde el n\u00famero especifica el n\u00famero de decimales, ej <strong>#MAX{f2}<\/strong> mostrar\u00e1 por ejemplo 25,34.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>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 <\/code><\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/ACP_nota_ej.png\"><img decoding=\"async\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/ACP_nota_ej.png\" alt=\"\" class=\"wp-image-696\"\/><\/a><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Ajuste_y_Simulacion\"><\/span>Ajuste y Simulaci\u00f3n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Lexico_tipico\"><\/span>L\u00e9xico t\u00edpico<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Os comento los t\u00e9rminos m\u00e1s utilizados que normalmente son t\u00e9rminos anglosajones, para que no se pierda nadie.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>SP<\/strong>: SetPoint o Punto de Consigna.<\/li>\n\n\n\n<li><strong>PV<\/strong>: Process Variable o Variable de Proceso.<\/li>\n\n\n\n<li><strong>OP<\/strong>: Output o salida.<\/li>\n\n\n\n<li><strong>StepTest<\/strong>: Test de salto en escal\u00f3n.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><em><span class=\"has-inline-color has-vivid-red-color\">Los cr\u00e9ditos de la parte de Ajuste y Simulaci\u00f3n le pertenecen a <a rel=\"noreferrer noopener\" href=\"https:\/\/www.linkedin.com\/in\/rafagmartin\" target=\"_blank\"><strong>Rafael Gonz\u00e1lez Martin<\/strong><\/a> quien tiene una amplia experiencia en control de procesos y desarroll\u00f3 hace a\u00f1os una herramienta llamada <strong>PIDLab<\/strong> de la que Ajuste y Simulaci\u00f3n es una peque\u00f1a parte.<\/span><\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si vamos a implementar un PID en nuestro proyecto y aprovechando que podemos graficar con relativa facilidad, se incorpor\u00f3 en la versi\u00f3n 0.2 la parte de Ajuste y Simulaci\u00f3n. En esencia, si somos capaces de obtener las constantes que definen nuestro sistema (K, To y Tp), estableciendo unos valores de simulaci\u00f3n podemos predecir como ser\u00e1 la respuesta de nuestro sistema ante una variaci\u00f3n del punto de consigna o de la carga para una determinada sinton\u00eda de nuestro controlador.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Ajuste\"><\/span>Ajuste<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">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\u00e9todos de sinton\u00eda.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>K<\/strong>: Ganancia del sistema.<\/li>\n\n\n\n<li><strong>To<\/strong>: Tiempo muerto del sistema.<\/li>\n\n\n\n<li><strong>Tp<\/strong>: Tiempo de proceso.<\/li>\n\n\n\n<li><strong>Tf<\/strong>: El par\u00e1metro Tf interviene en el c\u00e1lculo de ciertos m\u00e9todos de sinton\u00eda como Lambda o IMC de los que luego veremos un ejemplo. Este par\u00e1metro suele venir referenciado en los libros como la letra griega lambda ( \u03bb )<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/ACP_ajuste01-1.png\"><img decoding=\"async\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/ACP_ajuste01-1.png\" alt=\"\" class=\"wp-image-716\" style=\"width:92px;height:auto\"\/><\/a><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Las constantes del sistema se pueden calcular de varias formas pero en ACP se calculan mediante el m\u00e9todo 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\u00e1fico de captura. Si pulsamos en la calculadora se nos abre un formulario donde nos piden 9 par\u00e1metros y a cambio nos devuelve el c\u00e1lculo de las constantes y nos pinta en el gr\u00e1fico de captura en forma de notas de texto donde est\u00e1n situadas T1 y T2. A continuaci\u00f3n un ejemplo:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-thumbnail\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/ACP_ajuste02_calc-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/ACP_ajuste02_calc-1-150x150.png\" alt=\"\" class=\"wp-image-705\"\/><\/a><\/figure>\n<\/div>\n\n\n<ol class=\"wp-block-list\">\n<li><strong>PV inicial<\/strong>: valor inicial de PV del test.<\/li>\n\n\n\n<li><strong>PV final<\/strong>: valor final de PV del test.<\/li>\n\n\n\n<li><strong>Serie PV<\/strong>: hay que indicar que serie o vector es la PV.<\/li>\n\n\n\n<li><strong>OP inicial<\/strong>: valor inicial de la salida en el test.<\/li>\n\n\n\n<li><strong>OP final<\/strong>: valor final de la salida en el test.<\/li>\n\n\n\n<li><strong>Tiempo inicial<\/strong>: segundo en el que la PV cambia como respuesta al movimiento de OP.<\/li>\n\n\n\n<li><strong>Tiempo final<\/strong>: segundo en el que la PV se mantiene estable tras el movimiento de OP.<\/li>\n\n\n\n<li><strong>M\u00e1ximo<\/strong>: rango superior de nuestro controlador\/sensor.<\/li>\n\n\n\n<li><strong>M\u00ednimo<\/strong>: rango inferior de nuestro controlador\/sensor.<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/ACP_steptest.png\" alt=\"\" class=\"wp-image-706\"\/><figcaption class=\"wp-element-caption\">Escal\u00f3n analizado con T1 y T2 obtenidos en el c\u00e1lculo<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Tras rellenar los par\u00e1metros anteriores al pulsar en la calculadora nos aparecer\u00e1n las constantes del sistema, nos pinta T1 y T2 en el gr\u00e1fico y si pulsamos en Aceptar nos las copiar\u00e1 al formulario principal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>*Cuando los valores de T1 y T2 no est\u00e1n en la gr\u00e1fica el c\u00e1lculo coge el valor m\u00e1s cercano al calculado (no interpolado).<\/em><\/p>\n\n\n<figure class=\"wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube  lyte-align aligncenter\"><div class=\"lyte-wrapper fourthree\" style=\"width:420px;max-width:100%;margin:5px;\"><div class=\"lyMe\" id=\"WYL_ml6GOEckhTI\"><div id=\"lyte_ml6GOEckhTI\" data-src=\"\/\/i.ytimg.com\/vi\/ml6GOEckhTI\/hqdefault.jpg\" class=\"pL\"><div class=\"tC\"><div class=\"tT\"><\/div><\/div><div class=\"play\"><\/div><div class=\"ctrl\"><div class=\"Lctrl\"><\/div><div class=\"Rctrl\"><\/div><\/div><\/div><noscript><a href=\"https:\/\/youtu.be\/ml6GOEckhTI\" rel=\"nofollow\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i.ytimg.com\/vi\/ml6GOEckhTI\/0.jpg\" alt=\"YouTube video thumbnail\" width=\"420\" height=\"295\" \/><br \/>Ver este v\u00eddeo en YouTube<\/a><\/noscript><\/div><\/div><div class=\"lL\" style=\"max-width:100%;width:420px;margin:5px;\"><\/div><figcaption>Ejemplo de c\u00e1lculo de K, To y Tp<\/figcaption><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Ahora que tenemos las constantes del sistema nos toca elegir el m\u00e9todo de sinton\u00eda. Cada m\u00e9todo est\u00e1 dise\u00f1ado para trabajar mejor en ciertas situaciones y por eso he puesto en Tipo y Especificaci\u00f3n una peque\u00f1a explicaci\u00f3n, pero puede que del m\u00e9todo que a priori es el m\u00e1s adecuado por dise\u00f1o obteng\u00e1is la respuesta que menos os gusta, mi recomendaci\u00f3n es que simul\u00e9is y cuando est\u00e9is m\u00e1s o menos seguros prob\u00e9is en el sistema real. Para obtener las constantes del controlador (Kc, Ti* y Td*), desplegar haciendo doble clic en el nombre y a continuaci\u00f3n hacer clic en P, PI o PID en funci\u00f3n del que est\u00e9 disponible. Aqu\u00ed es cuando podemos jugar con el par\u00e1metro Tf comentado anteriormente. Tf es la constante de tiempo en segundos deseada en lazo cerrado y afecta a los m\u00e9todos Lambda, IMC, SIM C e Improved SIM C. Cuanto mayor es el par\u00e1metro menos agresivos ser\u00e1n las constantes obtenidas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">* Si en las librer\u00edas PID para Arduino nos piden <strong>Ki<\/strong> y <strong>Kd<\/strong> hay que convertir dichas constantes siendo <strong>Ki = Kc\/Ti<\/strong> y <strong>Kd = Kc*Td<\/strong>. A partir de la versi\u00f3n 0.5 se muestran todos los datos autom\u00e1ticamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em><span class=\"has-inline-color has-vivid-red-color\">Los m\u00e9todos de sinton\u00eda incluidos en ACP est\u00e1n dise\u00f1ados para <strong>sistemas no integradores de primer orden con tiempo muerto<\/strong> y an\u00e1lisis en lazo abierto.<\/span><\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Simulacion\"><\/span>Simulaci\u00f3n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">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\u00e1metros a rellenar son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Ts<\/strong>: Tiempo de muestreo en segundos. Deber\u00eda de coincidir con el par\u00e1metro Delay configurado en la trama de datos y que es el Delay de nuestro script de Arduino.<\/li>\n\n\n\n<li><strong>T.Final<\/strong>: Tiempo que queremos simular en segundos.<\/li>\n\n\n\n<li><strong>PV.Ini<\/strong>: Valor de la PV inicial en la simulaci\u00f3n en unidades de ingenier\u00eda.<\/li>\n\n\n\n<li><strong>OP.Ini<\/strong>: Valor de la salida inicial en la simulaci\u00f3n en %.<\/li>\n\n\n\n<li><strong>Carga.Ini<\/strong>: Valor de la carga inicial en simulaci\u00f3n en unidades de ingenier\u00eda. Normalmente se deja en cero.<\/li>\n\n\n\n<li><strong>D.SP:<\/strong> Variaci\u00f3n de SetPoint que vamos a simular. Acepta valores positivos y negativos.<\/li>\n\n\n\n<li><strong>D.Carga<\/strong>: Variaci\u00f3n de carga que vamos a simular. Acepta solo valores positivos.<\/li>\n\n\n\n<li><strong>OP.L.Sup<\/strong>: L\u00edmite superior de la salida.<\/li>\n\n\n\n<li><strong>OP.L.Inf<\/strong>: L\u00edmite inferior de la salida.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/ACP_sim01.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"258\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/ACP_sim01-1024x258.png\" alt=\"\" class=\"wp-image-723\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/ACP_sim01-1024x258.png 1024w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/ACP_sim01-300x75.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/ACP_sim01-768x193.png 768w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/ACP_sim01-1536x386.png 1536w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/ACP_sim01-604x152.png 604w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2020\/05\/ACP_sim01.avif 1853w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Simulaci\u00f3n del sistema calculado previamente con sinton\u00eda IAE-SP<\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Descarga\"><\/span>Descarga<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Liberado bajo <a href=\"https:\/\/www.gnu.org\/licenses\/gpl-3.0.html\" target=\"_blank\" rel=\"noreferrer noopener\">licencia GNU\/GPL V3<\/a><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/garikoitz.info\/blog\/descargas\/Arduino_COM_Plotter_bin.zip\">Arduino COM Plotter 0.6<\/a> [ZIP]<\/li>\n\n\n\n<li><a href=\"https:\/\/garikoitz.info\/blog\/descargas\/Arduino_COM_Plotter_source.zip\">Arduino COM Plotter 0.6<\/a> [c\u00f3digo fuente VS2019] [ZIP]<\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/deurus\/ACP\" target=\"_blank\" rel=\"noreferrer noopener\">Repositorio Github<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Referencias\"><\/span>Referencias<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Enlaces\"><\/span>Enlaces<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a rel=\"noreferrer noopener\" href=\"https:\/\/www.arduino.cc\/en\/Main\/Software\" target=\"_blank\">Arduino IDE<\/a><\/li>\n\n\n\n<li><a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/RobinPerris\/DarkUI\/wiki\/Using-DarkUI\" target=\"_blank\">DarkUI by Robin Perris<\/a><\/li>\n\n\n\n<li><a rel=\"noreferrer noopener\" href=\"https:\/\/www.luisllamas.es\/arduino-puerto-serie\/\" target=\"_blank\">Comunicaci\u00f3n de Arduino con puerto serie<\/a><\/li>\n\n\n\n<li><a rel=\"noreferrer noopener\" href=\"https:\/\/tableroalparque.weebly.com\/uploads\/5\/1\/6\/9\/51696511\/5_identificacion_de_procesos_y_curva_de_reaccion.pdf\" target=\"_blank\">Identificaci\u00f3n de procesos y curva de reacci\u00f3n<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/r-downing\/AutoPID\" target=\"_blank\" rel=\"noreferrer noopener\">Librer\u00eda para Arduino AutoPID by Ryan Downing<\/a> [<a rel=\"noreferrer noopener\" href=\"https:\/\/r-downing.github.io\/AutoPID\/\" target=\"_blank\">01<\/a>]<\/li>\n\n\n\n<li><a href=\"https:\/\/www.picuino.com\/es\/arduprog\/control-pid-digital.html\" target=\"_blank\" rel=\"noreferrer noopener\">Control PID digital<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Libros_y_Publicaciones\"><\/span>Libros y Publicaciones<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">[1] Aidan O&#8217;Dwyer. Handbook of PI and PID controller tuning rules, 3rd edition, Imperial College Press. ISBN: 978-1-84816-242-6<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">[2] Karl J. Astrom, Tore Hagglund. Control PID avanzado, Pearson, ISBN: 978-84-8322-511-0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">[3] J.G. Ziegler, N.B. Nichols. Optimum Settings For Automatic Controllers, 1942 edition, American Society of Mechanical Engineers. [<a rel=\"noreferrer noopener\" href=\"https:\/\/garikoitz.info\/blog\/descargas\/Z-N.pdf\" target=\"_blank\">Link<\/a>]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">[4] G.H. Cohen, G.A. Coon. Theoretical Consideration of Retarded Control, 1953 edition, American Society of Mechanical Engineers. [<a rel=\"noreferrer noopener\" href=\"https:\/\/garikoitz.info\/blog\/descargas\/Cohen_Coon.pdf\" target=\"_blank\">Link<\/a>] [<a rel=\"noreferrer noopener\" href=\"http:\/\/folk.ntnu.no\/skoge\/puublications_others\/Cohen%20and%20Coon%20(1953)%20-%20Theoretical%20Consideration%20of%20Retarded%20Control.pdf\" target=\"_blank\">Link2<\/a>]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">[5] Daniel E. Rivera. Internal Model Control: A Comprehensive View, 1999 edition, College of Engineering and Applied Sciences. [<a rel=\"noreferrer noopener\" href=\"https:\/\/garikoitz.info\/blog\/descargas\/IMC_(Rivera).pdf\" target=\"_blank\">Link<\/a>]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Versi&oacute;n 0.5 [Septiembre 2020] Arduino COM Plotter, desde ahora ACP, surgi&oacute; de la necesidad de capturar y procesar datos en mis proyectos caseros. Poco a poco voy incorporando m&aacute;s opciones como por ejemplo el simulador de sistemas de primer orden y los m&eacute;todos de sinton&iacute;a PID, pero en esencia su funcionalidad principal es capturar y graficar datos del puerto serie. Interfaz Est&aacute; dividida en 5 zonas, de la 1 a la 3 se corresponden a la parte de la captura&#8230;<\/p>\n<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/garikoitz.info\/blog\/2020\/05\/arduino-com-plotter\/\"> Leer m\u00e1s<span class=\"screen-reader-text\">  Leer m\u00e1s<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":680,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","wpupg_custom_link":[],"wpupg_custom_link_behaviour":[],"wpupg_custom_link_nofollow":[],"wpupg_custom_image":[],"wpupg_custom_image_id":[],"footnotes":""},"categories":[15],"tags":[94,16,95,100,102,17,101],"class_list":["post-674","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","tag-acp","tag-arduino","tag-arduino-com-plotter","tag-captura-puerto-serie","tag-metodos-de-sintonia","tag-pid","tag-sintonia-pid"],"_links":{"self":[{"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/posts\/674","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/comments?post=674"}],"version-history":[{"count":73,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/posts\/674\/revisions"}],"predecessor-version":[{"id":2560,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/posts\/674\/revisions\/2560"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/media\/680"}],"wp:attachment":[{"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/media?parent=674"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/categories?post=674"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/tags?post=674"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}