{"id":167,"date":"2017-12-23T03:08:58","date_gmt":"2017-12-23T03:08:58","guid":{"rendered":"https:\/\/garikoitz.info\/blog\/?p=167"},"modified":"2022-05-05T12:36:44","modified_gmt":"2022-05-05T12:36:44","slug":"estrategias-de-control-con-arduino","status":"publish","type":"post","link":"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/","title":{"rendered":"Estrategias de control con Arduino"},"content":{"rendered":"<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\/2017\/12\/estrategias-de-control-con-arduino\/#Introduccion\" >Introducci\u00f3n<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/#Control_ONOFF_con_histeresis\" >Control ON\/OFF con hist\u00e9resis<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/#PID\" >PID<\/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\/2017\/12\/estrategias-de-control-con-arduino\/#Control_por_eventos\" >Control por eventos<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/#Componentes_utilizados\" >Componentes utilizados<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/#Arduino_Uno_R3\" >Arduino Uno R3<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/#Sensor_HC-SR04\" >Sensor HC-SR04<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/#Sonda_DS18B20\" >Sonda DS18B20<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/#GDM2004D_%E2%80%93_Display_20%C3%974\" >GDM2004D &#8211; Display 20&#215;4<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/#Micro_bomba_de_agua\" >Micro bomba de agua<\/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\/2017\/12\/estrategias-de-control-con-arduino\/#Calentador\" >Calentador<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/#Modelo_matematico\" >Modelo matem\u00e1tico<\/a><\/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\/2017\/12\/estrategias-de-control-con-arduino\/#Desarrollo_del_proyecto\" >Desarrollo del proyecto<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/#Control_ONOFF_con_histeresis-2\" >Control ON\/OFF con hist\u00e9resis<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/#Codigo_Arduino_resumido\" >C\u00f3digo Arduino resumido<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/#Muestreo_de_datos_con_Matlab\" >Muestreo de datos con Matlab<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/#Control_PID\" >Control PID<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/#Codigo_Arduino_resumido-2\" >C\u00f3digo Arduino resumido<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/#Muestreo_de_datos_con_Matlab-2\" >Muestreo de datos con Matlab<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/#Ajuste_manual_del_PID\" >Ajuste manual del PID<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/#Ajuste_del_PID_con_Matlab\" >Ajuste del PID con Matlab<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/#Control_por_eventos-2\" >Control por eventos<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/#Codigo_Arduino\" >C\u00f3digo Arduino<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/#Codigo_Matlab_lectura_puerto_serie_del_nivel\" >C\u00f3digo Matlab lectura puerto serie del nivel<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/#Codigo_Matlab_lectura_puerto_serie_de_la_temperatura\" >C\u00f3digo Matlab lectura puerto serie de la temperatura<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/#Galeria_de_imagenes\" >Galer\u00eda de im\u00e1genes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/#Bibliografia\" >Bibliograf\u00eda<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Introduccion\"><\/span>Introducci\u00f3n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>El proyecto elegido para llevar a cabo con Arduino y en el que desarrollaremos diferentes tipos de controles,\u00a0 consiste en dos dep\u00f3sitos de agua de 13 litros de capacidad interconectados mediante una bomba. El dep\u00f3sito 1 se considera el principal y por lo tanto se implementar\u00e1 un control de nivel mediante PID y un control de temperatura del agua mediante un sistema ON\/OFF con hist\u00e9resis.<\/p>\n<figure id=\"attachment_179\" aria-describedby=\"caption-attachment-179\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/Esquema3.fw_.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-179 size-medium\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/Esquema3.fw_-300x167.png\" alt=\"Figura 1: Esquema general de la planta\" width=\"300\" height=\"167\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/Esquema3.fw_-300x167.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/Esquema3.fw_-485x270.png 485w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/Esquema3.fw_.avif 716w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-179\" class=\"wp-caption-text\">Figura 1: Esquema general de la planta<\/figcaption><\/figure>\n<h3><span class=\"ez-toc-section\" id=\"Control_ONOFF_con_histeresis\"><\/span>Control ON\/OFF con hist\u00e9resis<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Para el control ON\/OFF con hist\u00e9resis, tal como se muestra en la figura 1, controlaremos la temperatura del dep\u00f3sito 1 mediante la sonda de temperatura DS18B20 que actuar\u00e1 de sensor y el calentador que har\u00e1 las veces de actuador.<\/p>\n<p>En la figura 2 se puede apreciar el diagrama de flujo del control ON\/OFF con hist\u00e9resis. Se trata de un control tradicional en lazo cerrado por lo que el actuador entra y sale repetidas veces hasta situarse en la temperatura de referencia.<\/p>\n<figure id=\"attachment_188\" aria-describedby=\"caption-attachment-188\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/sistema.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-188 size-medium\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/sistema-300x74.png\" alt=\"Figura 2: Diagrama de flujo del control ON\/OFF con hist\u00e9resis\" width=\"300\" height=\"74\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/sistema-300x74.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/sistema.avif 553w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-188\" class=\"wp-caption-text\">Figura 2: Diagrama de flujo del control ON\/OFF con hist\u00e9resis<\/figcaption><\/figure>\n<p>Para minimizar el tiempo de funcionamiento del actuador y as\u00ed alargar su vida \u00fatil, estableceremos una banda muerta o de tolerancia de modo que se ampl\u00ede la diferencia entre el tiempo de encendido y apagado (hist\u00e9resis). El valor de la banda muerta depender\u00e1 de cada sistema y de su an\u00e1lisis.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"PID\"><\/span>PID<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Para el control PID, tal y como muestra la figura 1, utilizaremos el sensor ultras\u00f3nico para medir el nivel y la bomba como actuador. El objetivo es tratar de controlar el nivel del dep\u00f3sito 1.<\/p>\n<p>El diagrama de flujo de la planta es el siguiente:<\/p>\n<figure id=\"attachment_189\" aria-describedby=\"caption-attachment-189\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/sistema_PID.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-189 size-medium\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/sistema_PID-300x74.png\" alt=\"Figura 3: Diagrama de flujo del control PID\" width=\"300\" height=\"74\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/sistema_PID-300x74.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/sistema_PID.avif 553w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-189\" class=\"wp-caption-text\">Figura 3: Diagrama de flujo del control PID<\/figcaption><\/figure>\n<h3><span class=\"ez-toc-section\" id=\"Control_por_eventos\"><\/span>Control por eventos<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>El control por eventos implica que es un evento el que hace que muestreamos una se\u00f1al y no se haga peri\u00f3dicamente como es m\u00e1s habitual. Obviamente el tiempo no desaparece nunca del c\u00e1lculo, ya que necesitamos tener una referencia a la hora de detectar eventos y muestrear se\u00f1ales.<\/p>\n<figure id=\"attachment_173\" aria-describedby=\"caption-attachment-173\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/Control_eventos.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-173 size-medium\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/Control_eventos-300x109.png\" alt=\"Figura 4: Diagrama de flujo del control por eventos en PID\" width=\"300\" height=\"109\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/Control_eventos-300x109.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/Control_eventos-604x220.png 604w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/Control_eventos.avif 683w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-173\" class=\"wp-caption-text\">Figura 4: Diagrama de flujo del control por eventos en PID<\/figcaption><\/figure>\n<p>Para ello generaremos una serie de funciones que nos ayudaran en que situaci\u00f3n est\u00e1 nuestra planta y si debemos lanzar un evento o podemos esperar al siguiente.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Componentes_utilizados\"><\/span>Componentes utilizados<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"Arduino_Uno_R3\"><\/span>Arduino Uno R3<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>La placa elegida para el desarrollo del proyecto es Arduino Uno R3. Esta placa dispone de 13 entradas\/salidas digitales, de las cuales 6 se pueden utilizar como PWM,\u00a0 y 5 entradas anal\u00f3gicas. Dispone de conectividad suficiente para peque\u00f1os proyectos aunque con ciertos componentes como el display LCD se hace necesario la utilizaci\u00f3n del bus I2C para economizar entradas y salidas.<\/p>\n<figure id=\"attachment_172\" aria-describedby=\"caption-attachment-172\" style=\"width: 225px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/arduino-uno-r3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-172 size-medium\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/arduino-uno-r3-225x300.png\" alt=\"Figura 5: Arduino UNO R3.\" width=\"225\" height=\"300\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/arduino-uno-r3-225x300.png 225w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/arduino-uno-r3-203x270.png 203w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/arduino-uno-r3.avif 300w\" sizes=\"auto, (max-width: 225px) 100vw, 225px\" \/><\/a><figcaption id=\"caption-attachment-172\" class=\"wp-caption-text\">Figura 5: Arduino UNO R3.<\/figcaption><\/figure>\n<h3><span class=\"ez-toc-section\" id=\"Sensor_HC-SR04\"><\/span>Sensor HC-SR04<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Como sensor de nivel utilizaremos un sensor ultras\u00f3nico de bajo costo. Adem\u00e1s de su reducido precio, ofrece otras ventajas ya que no le afectan ni la luz solar ni materiales oscuros. Dispone de dos transductores, b\u00e1sicamente un micr\u00f3fono y un altavoz que son los encargados de enviar y recibir la se\u00f1al. El c\u00e1lculo de la distancia se basa en la velocidad del sonido en el aire, 340 m\/s a 20\u00baC, teniendo en cuenta que por cada grado cent\u00edgrado de aumento la velocidad aumenta 0,6 m\/s. Las caracter\u00edsticas principales se describen a continuaci\u00f3n:<\/p>\n<figure id=\"attachment_194\" aria-describedby=\"caption-attachment-194\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/hcsr04.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-194 size-medium\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/hcsr04-300x248.jpg\" alt=\"Figura 6: Sensor HC-SR04.\" width=\"300\" height=\"248\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/hcsr04-300x248.jpg 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/hcsr04-327x270.jpg 327w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/hcsr04.avif 505w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-194\" class=\"wp-caption-text\">Figura 6: Sensor HC-SR04.<\/figcaption><\/figure>\n<ul>\n<li>Pines utilizados: 2 (TRIGGER, ECHO) + 2 (alimentaci\u00f3n).<\/li>\n<li>Rango de medici\u00f3n entre 20 y 4000mm (\u00b13mm).<\/li>\n<li>\u00c1ngulo efectivo de medici\u00f3n: &lt;15\u00ba.<\/li>\n<li>Consumo en reposo: &lt;2mA<\/li>\n<li>Consumo en funcionamiento: 15mA.<\/li>\n<\/ul>\n<figure id=\"attachment_195\" aria-describedby=\"caption-attachment-195\" style=\"width: 242px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/HC-SR04-Conexi\u00f3n.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-195\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/HC-SR04-Conexi\u00f3n-242x300.jpg\" alt=\"Figura 7: Esquema de conexi\u00f3n HC-SR04.\" width=\"242\" height=\"300\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/HC-SR04-Conexi\u00f3n-242x300.jpg 242w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/HC-SR04-Conexi\u00f3n-768x951.jpg 768w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/HC-SR04-Conexi\u00f3n-218x270.jpg 218w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/HC-SR04-Conexi\u00f3n.jpg 795w\" sizes=\"auto, (max-width: 242px) 100vw, 242px\" \/><\/a><figcaption id=\"caption-attachment-195\" class=\"wp-caption-text\">Figura 7: Esquema de conexi\u00f3n HC-SR04.<\/figcaption><\/figure>\n<h3><span class=\"ez-toc-section\" id=\"Sonda_DS18B20\"><\/span>Sonda DS18B20<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Se trata de una sonda impermeable con una resoluci\u00f3n configurable de entre 9 y 12 bits y un rango de medici\u00f3n de -55 a 125\u00baC (\u00b10,5\u00baC). Funciona bajo la interfaz 1-Wire que requiere un solo hilo para su conexi\u00f3n, llevando cada sensor un numero identificativo de 64 bits grabado internamente para su distinci\u00f3n.<\/p>\n<figure id=\"attachment_196\" aria-describedby=\"caption-attachment-196\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ds18b20.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-196\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ds18b20-300x219.jpg\" alt=\"Figura 8: Sonda DS18B20. \" width=\"300\" height=\"219\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ds18b20-300x219.jpg 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ds18b20-370x270.jpg 370w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ds18b20.avif 486w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-196\" class=\"wp-caption-text\">Figura 8: Sonda DS18B20.<\/figcaption><\/figure>\n<figure id=\"attachment_198\" aria-describedby=\"caption-attachment-198\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/con_ds18b20.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-198\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/con_ds18b20-300x195.png\" alt=\"Figura 9: Esquema de conexi\u00f3n DS18B20.\" width=\"300\" height=\"195\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/con_ds18b20-300x195.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/con_ds18b20-768x499.png 768w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/con_ds18b20-416x270.png 416w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/con_ds18b20.avif 875w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-198\" class=\"wp-caption-text\">Figura 9: Esquema de conexi\u00f3n DS18B20.<\/figcaption><\/figure>\n<h3><span class=\"ez-toc-section\" id=\"GDM2004D_%E2%80%93_Display_20%C3%974\"><\/span>GDM2004D &#8211; Display 20&#215;4<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Con el fin de visualizar el estado de los diferentes sensores, utilizaremos un display de 20 caracteres por 4 columnas. Nativamente el display necesita la conexi\u00f3n de 6 pines digitales para su funcionamiento.<\/p>\n<figure id=\"attachment_200\" aria-describedby=\"caption-attachment-200\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/display20x4.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-200\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/display20x4-300x174.jpg\" alt=\"Figura 10: Display GDM2004D.\" width=\"300\" height=\"174\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/display20x4-300x174.jpg 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/display20x4-465x270.jpg 465w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/display20x4.avif 493w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-200\" class=\"wp-caption-text\">Figura 10: Display GDM2004D.<\/figcaption><\/figure>\n<p>Con el fin de simplificar y economizar la conexi\u00f3n con Arduino, usaremos un adaptador I2C que nos reduce los pines necesarios a 2.<\/p>\n<figure id=\"attachment_201\" aria-describedby=\"caption-attachment-201\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/lcdi2c.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-201\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/lcdi2c-300x178.jpg\" alt=\"Figura 11: Adaptador LCD - I2C\" width=\"300\" height=\"178\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/lcdi2c-300x178.jpg 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/lcdi2c-456x270.jpg 456w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/lcdi2c.avif 500w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-201\" class=\"wp-caption-text\">Figura 11: Adaptador LCD &#8211; I2C<\/figcaption><\/figure>\n<figure id=\"attachment_202\" aria-describedby=\"caption-attachment-202\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/con_lcdi2c.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-202\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/con_lcdi2c-300x179.jpg\" alt=\"\" width=\"300\" height=\"179\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/con_lcdi2c-300x179.jpg 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/con_lcdi2c-453x270.jpg 453w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/con_lcdi2c.avif 680w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-202\" class=\"wp-caption-text\">Figura 12: Esquema de conexi\u00f3n adaptador I2C. Fuente: https:\/\/www.robotics.org.za\/image\/data\/Display\/I2C_display\/LCD2004_03_arduino.jpg<\/figcaption><\/figure>\n<h3><span class=\"ez-toc-section\" id=\"Micro_bomba_de_agua\"><\/span>Micro bomba de agua<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Utilizaremos una micro bomba (55x35mm) de 12V sin escobillas, sumergible (clase IP68) y capaz de proporcionar 240 L\/H. El consumo nominal es de 400mA (5W). Debido a que trabaja a 12V y con el fin de poder regularla en un rango aceptable para nuestro proyecto, utilizaremos un transistor NPN para su conexi\u00f3n con arduino.<\/p>\n<figure id=\"attachment_203\" aria-describedby=\"caption-attachment-203\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/microbba.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-203\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/microbba-300x192.jpg\" alt=\"\" width=\"300\" height=\"192\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/microbba-300x192.jpg 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/microbba.avif 421w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-203\" class=\"wp-caption-text\">Figura 13: Micro bomba.<\/figcaption><\/figure>\n<figure id=\"attachment_204\" aria-describedby=\"caption-attachment-204\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/con_bba.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-204\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/con_bba-300x298.png\" alt=\"\" width=\"300\" height=\"298\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/con_bba-300x298.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/con_bba-150x150.png 150w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/con_bba-768x764.png 768w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/con_bba-1024x1018.png 1024w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/con_bba-271x270.png 271w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/con_bba.avif 1300w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-204\" class=\"wp-caption-text\">Figura 14: Esquema de conexi\u00f3n de la micro bomba.<\/figcaption><\/figure>\n<h3><span class=\"ez-toc-section\" id=\"Calentador\"><\/span>Calentador<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Se trata de un calentador parcialmente sumergible con un rango de trabajo de 20 a 34\u00baC. Funciona a 220V por lo que su accionamiento desde arduino se har\u00e1 a trav\u00e9s de un rel\u00e9.<\/p>\n<figure id=\"attachment_205\" aria-describedby=\"caption-attachment-205\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/calentador.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-205\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/calentador-300x300.jpg\" alt=\"\" width=\"300\" height=\"300\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/calentador-300x300.jpg 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/calentador-150x150.jpg 150w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/calentador-270x270.jpg 270w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/calentador.avif 434w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-205\" class=\"wp-caption-text\">Figura 15: Calentador<\/figcaption><\/figure>\n<figure id=\"attachment_206\" aria-describedby=\"caption-attachment-206\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/con_calentador.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-206\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/con_calentador-300x294.png\" alt=\"\" width=\"300\" height=\"294\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/con_calentador-300x294.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/con_calentador-275x270.png 275w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/con_calentador.avif 555w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-206\" class=\"wp-caption-text\">Figura 16: Esquema de conexi\u00f3n del calentador mediante rel\u00e9.<\/figcaption><\/figure>\n<h2><span class=\"ez-toc-section\" id=\"Modelo_matematico\"><\/span>Modelo matem\u00e1tico<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>A continuaci\u00f3n se desarrollar\u00e1 un modelo matem\u00e1tico pragm\u00e1tico que nos servir\u00e1 sobre todo para desarrollar el apartado de control por eventos.<\/p>\n<figure id=\"attachment_184\" aria-describedby=\"caption-attachment-184\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/modelo_mat.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-184\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/modelo_mat-300x210.png\" alt=\"\" width=\"300\" height=\"210\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/modelo_mat-300x210.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/modelo_mat.avif 380w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-184\" class=\"wp-caption-text\">Figura 17: Esquema del dep\u00f3sito<\/figcaption><\/figure>\n<ul>\n<li>Datos\n<ul>\n<li>a = 0,18m, b = 0,4m, c = 0,18m<\/li>\n<li>Qe = entre 3,05*10<sup>-5<\/sup> m\u00b3\/s y 4,71*10<sup>-5<\/sup> m\u00b3\/s<\/li>\n<li>Qs = 3,33&#215;10<sup>-5<\/sup>m\u00b3\/s<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Conocidas las medidas del prisma rectangular obtenemos el volumen.<\/p>\n<figure id=\"attachment_234\" aria-describedby=\"caption-attachment-234\" style=\"width: 101px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ec01.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-234 size-full\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ec01.png\" alt=\"\" width=\"101\" height=\"36\" \/><\/a><figcaption id=\"caption-attachment-234\" class=\"wp-caption-text\">(1)<\/figcaption><\/figure>\n<p>El volumen real lo podemos obtener en todo momento sabiendo la altura actual del nivel del dep\u00f3sito.<\/p>\n<figure id=\"attachment_235\" aria-describedby=\"caption-attachment-235\" style=\"width: 107px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ec02.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-235\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ec02.png\" alt=\"\" width=\"107\" height=\"33\" \/><\/a><figcaption id=\"caption-attachment-235\" class=\"wp-caption-text\">(2)<\/figcaption><\/figure>\n<p>Conocido el volumen en cada instante podemos obtener el tiempo de llenado o vaciado. Para el tiempo de vaciado (tv) usamos el volumen calculado previamente. Para el tiempo de llenado (tl) necesitamos el volumen que nos queda por llenar.<\/p>\n<figure id=\"attachment_236\" aria-describedby=\"caption-attachment-236\" style=\"width: 115px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ec03.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-236\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ec03.png\" alt=\"\" width=\"115\" height=\"60\" \/><\/a><figcaption id=\"caption-attachment-236\" class=\"wp-caption-text\">(3)<\/figcaption><\/figure>\n<figure id=\"attachment_237\" aria-describedby=\"caption-attachment-237\" style=\"width: 144px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ec04.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-237\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ec04.png\" alt=\"\" width=\"144\" height=\"63\" \/><\/a><figcaption id=\"caption-attachment-237\" class=\"wp-caption-text\">(4)<\/figcaption><\/figure>\n<h2><span class=\"ez-toc-section\" id=\"Desarrollo_del_proyecto\"><\/span>Desarrollo del proyecto<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Arduino proporciona un m\u00e1ximo de 40 mA por salida, debido a eso utilizaremos una fuente de alimentaci\u00f3n externa de 5 y 12V para garantizar el buen funcionamiento de todos los equipos. En total usaremos entre entradas y salidas 13 pines, 5 anal\u00f3gicos y 8 digitales.<\/p>\n<figure id=\"attachment_209\" aria-describedby=\"caption-attachment-209\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/proyecto_arduino.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-209\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/proyecto_arduino-300x177.png\" alt=\"\" width=\"300\" height=\"177\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/proyecto_arduino-300x177.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/proyecto_arduino-459x270.png 459w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/proyecto_arduino.avif 666w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-209\" class=\"wp-caption-text\">Figura 18: Relaci\u00f3n de pines utilizados.<\/figcaption><\/figure>\n<p>El panel de mando es f\u00edsico como se puede apreciar en la figura 19. En la parte izquierda est\u00e1n situados los controles pertenecientes a la parte autom\u00e1tica y a la derecha los manuales. En el display tenemos toda la informaci\u00f3n necesaria para el control PID y ON\/OFF con hist\u00e9resis. Tambi\u00e9n se dispone de un modo manual para pruebas y ajustes.<\/p>\n<figure id=\"attachment_210\" aria-describedby=\"caption-attachment-210\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/panelmando.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-210\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/panelmando-300x287.jpg\" alt=\"\" width=\"300\" height=\"287\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/panelmando-300x287.jpg 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/panelmando-768x735.jpg 768w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/panelmando-282x270.jpg 282w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/panelmando.avif 851w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-210\" class=\"wp-caption-text\">Figura 19: Panel de mando<\/figcaption><\/figure>\n<figure id=\"attachment_211\" aria-describedby=\"caption-attachment-211\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/deposito1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-211 size-medium\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/deposito1-300x225.jpg\" alt=\"Figura 20: Dep\u00f3sito 1\" width=\"300\" height=\"225\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/deposito1-300x225.jpg 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/deposito1-768x576.jpg 768w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/deposito1-1024x768.jpg 1024w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/deposito1-360x270.jpg 360w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/deposito1.avif 1038w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-211\" class=\"wp-caption-text\">Figura 20: Dep\u00f3sito 1<\/figcaption><\/figure>\n<p>La purga se realiza mediante una bomba estrangulada en la impulsi\u00f3n, debido a que por sus caracter\u00edsticas no admite regulaci\u00f3n mediante PWM. La bomba de purga se puede apreciar en la figura 20.<\/p>\n<figure id=\"attachment_212\" aria-describedby=\"caption-attachment-212\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/deposito2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-212\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/deposito2-300x225.jpg\" alt=\"\" width=\"300\" height=\"225\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/deposito2-300x225.jpg 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/deposito2-768x576.jpg 768w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/deposito2-1024x768.jpg 1024w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/deposito2-360x270.jpg 360w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/deposito2.avif 1038w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-212\" class=\"wp-caption-text\">Figura 21: Dep\u00f3sito 2<\/figcaption><\/figure>\n<p>La bomba principal (bomba B1) se muestra en la figura 21. Esta bomba admite regulaci\u00f3n PWM pero tiene un rango muerto entre 0 y 5,5V (0 \u2013 117 PWM), algo que se tendr\u00e1 en cuenta al ajustar los par\u00e1metros del PID y la purga.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Control_ONOFF_con_histeresis-2\"><\/span>Control ON\/OFF con hist\u00e9resis<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<figure id=\"attachment_182\" aria-describedby=\"caption-attachment-182\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/Esquema3_on-off.fw_.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-182\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/Esquema3_on-off.fw_-300x167.png\" alt=\"\" width=\"300\" height=\"167\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/Esquema3_on-off.fw_-300x167.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/Esquema3_on-off.fw_-485x270.png 485w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/Esquema3_on-off.fw_.avif 716w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-182\" class=\"wp-caption-text\">Figura 22: Sistema ON\/OFF con hist\u00e9resis.<\/figcaption><\/figure>\n<p>Para este sistema desarrollaremos un control cl\u00e1sico de temperatura. Al tratarse de un calentador de 220V, se actuar\u00e1 mediante un rel\u00e9, que para evitar que no est\u00e9 entrando y saliendo de forma continua, se establecer\u00e1 una banda muerta. Tras analizar el comportamiento del sistema, se establece una tolerancia de 0,5\u00baC como se puede observar en la figura 23.<\/p>\n<figure id=\"attachment_187\" aria-describedby=\"caption-attachment-187\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/imagen01.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-187\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/imagen01-300x209.png\" alt=\"\" width=\"300\" height=\"209\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/imagen01-300x209.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/imagen01-387x270.png 387w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/imagen01.avif 500w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-187\" class=\"wp-caption-text\">Figura 23: Gr\u00e1fica del control ON\/OFF con hist\u00e9resis.<\/figcaption><\/figure>\n<p>El rango \u00fatil del calentador est\u00e1 entre 20 y 30\u00baC y leeremos la temperatura mediante un sensor de temperatura situado en el dep\u00f3sito 1. Para simplificar, el setpoint de la temperatura ser\u00e1 un n\u00famero entero.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"Codigo_Arduino_resumido\"><\/span>C\u00f3digo Arduino resumido<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Leemos el setpoint introducido mediante el potenci\u00f3metro y comprobamos que la diferencia con la temperatura real no es mayor o igual a medio grado cent\u00edgrado. Con el fin de obtener una respuesta m\u00e1s r\u00e1pida en la temperatura, y puesto que el calentador y la sonda se encuentran en dep\u00f3sitos separados, el nivel est\u00e1 variando entre 65 y 100mm de forma continua, de este modo se garantiza el movimiento de flujo de agua entre dep\u00f3sitos.<\/p>\n<p>A continuaci\u00f3n se muestra el c\u00f3digo principal del control. Para ver el c\u00f3digo completo saltar al <a href=\"#Codigo_Arduino\">apartado 7<\/a>.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\">\/\/SetPoint regulable Temperatura\nfloat sett=analogRead(A2);\nSPtemp=map(sett,0,1023,30,15);\n\/\/Calculo el error\nErrorTemp = SPtemp-temp;\n\/\/Banda muerta de 0.5\u00baC\nif(ErrorTemp&lt;=0.5){ \n   digitalWrite(13, LOW);\n}else{\n   digitalWrite(13, HIGH);\n}\n\u2026\n\/\/ Nivel entre 65 y 100mm de forma continua\n      \tif (bypassPID==true){\/\/No hago caso al setpoint\n        if (mediamm&gt;=100){\n          analogWrite(3, 0);\n        }\n        if (mediamm&lt;=65){\n          analogWrite(3, 255);\n        }\n      \t}else{\n        analogWrite(3, control);\n}\n\u2026\n<\/pre>\n<h4><span class=\"ez-toc-section\" id=\"Muestreo_de_datos_con_Matlab\"><\/span>Muestreo de datos con Matlab<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Aun favoreciendo el movimiento del agua entre dep\u00f3sitos, la respuesta de la temperatura es bastante lenta como muestra la figura 24.<\/p>\n<figure id=\"attachment_215\" aria-describedby=\"caption-attachment-215\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/datos_matlab.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-215\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/datos_matlab-300x225.png\" alt=\"\" width=\"300\" height=\"225\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/datos_matlab-300x225.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/datos_matlab-360x270.png 360w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/datos_matlab.avif 560w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-215\" class=\"wp-caption-text\">Figura 24: Datos de temperatura recogidos con Matlab<\/figcaption><\/figure>\n<h3><span class=\"ez-toc-section\" id=\"Control_PID\"><\/span>Control PID<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<blockquote><p><em>Lectura recomendada: <a href=\"https:\/\/garikoitz.info\/blog\/2022\/05\/introduccion-al-algoritmo-pid-y-su-implementacion-en-arduino\/\" target=\"_blank\" rel=\"noopener noreferrer\">Introducci\u00f3n al algoritmo PID y su implementaci\u00f3n en Arduino<\/a><\/em><\/p><\/blockquote>\n<p>La implementaci\u00f3n del PID se har\u00e1 sobre un control de nivel simple. El nivel lo obtendremos en mil\u00edmetros mediante un sensor de ultrasonidos y en funci\u00f3n del setpoint de referencia actuaremos sobre una micro bomba de corriente cont\u00ednua aprovechando una salida PWM de arduino. La microbomba es de 12V de modo que utilizaremos un transistor NPN para hacer funcionar a la bomba, ya que arduino no es capaz de aportar ese voltaje. En resumen, transmitiremos la se\u00f1al PWM (0-5V) a la base del transistor y este dejer\u00e1 pasar entre colector y emisor los 12V de forma proporcional a la se\u00f1al transmitida por la base. El rango \u00fatil de trabajo de la bomba est\u00e1 entre 5,5 y 12V (117 &#8211; 255 PWM).<\/p>\n<figure id=\"attachment_181\" aria-describedby=\"caption-attachment-181\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/Esquema3_nivel2.fw_.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-181\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/Esquema3_nivel2.fw_-300x167.png\" alt=\"\" width=\"300\" height=\"167\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/Esquema3_nivel2.fw_-300x167.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/Esquema3_nivel2.fw_-485x270.png 485w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/Esquema3_nivel2.fw_.avif 716w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-181\" class=\"wp-caption-text\">Figura 25: Sistema PID.<\/figcaption><\/figure>\n<h4><span class=\"ez-toc-section\" id=\"Codigo_Arduino_resumido-2\"><\/span>C\u00f3digo Arduino resumido<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Solamente se muestra el c\u00f3digo parcial del PID, para ver el c\u00f3digo completo de arduino saltar al <a href=\"#Codigo_Arduino\">apartado 7<\/a>.<\/p>\n<p>El PID es un sistema de control robusto y eficiente, pero requiere de ciertas precauciones a la hora de implementarlo. A continuaci\u00f3n se detallan las caracter\u00edsticas principales incluidas.<\/p>\n<ul>\n<li><strong>Tiempo de c\u00e1lculo<\/strong>. El PID funciona mejor cuanto menos tiempo pase entre c\u00e1lculos, por ello mismo se ha establecido el tiempo de c\u00e1lculo en 10ms.<\/li>\n<li><strong>Filtro<\/strong>: La variable m\u00e1s importante en el control, es el nivel, por esto mismo, se utiliza la media de las \u00faltimas cinco medidas a modo de filtro.<\/li>\n<li><strong>Paso de autom\u00e1tico a manual<\/strong>. Con el fin de economizar potencia de c\u00e1lculo, cuando estemos en modo manual simplemente dejaremos de calcular los valores del PID.<\/li>\n<li><strong>Anti Windup<\/strong>. Cuando se llega a saturar el actuador, la salida del controlador deja de corresponderse con la acci\u00f3n aplicada al proceso. Para ello, limitamos la acci\u00f3n integral entre un m\u00ednimo y un m\u00e1ximo con el fin de no llegar a la situaci\u00f3n mencionada anteriormente.<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\">\u2026\nfloat Kp = 25;\nfloat Kd = 10; \nfloat Ki = 1;\nfloat I; \/\/ Valor Integral\nfloat D; \/\/ Valor Derivativo\n\/\/AUTOM\u00c1TICO----------------------------------------------------\nif (modo==false){\n    \/\/SetPoint regulable NIVEL\n    float set=analogRead(A1);\n    SetPoint=map(set,0,1023,120,50);\n    \/\/ PID\n    \/\/ Error-----------------------------------------------------\n    ErrorAnt=Error;\n    Error= SetPoint- mediamm;\n    \/\/ Derivada--------------------------------------------------\n    D=Error-ErrorAnt;\n    \/\/ Limito Integral (anti-windup)\n    int ok = 3; \/\/damos por bueno -&gt; banda muerta de 3mm\n    int nook = 10; \/\/10mm de diferencia, dejo actuar\n    if(abs(I)&gt;ok &amp;&amp; abs(I)&lt;nook){\n       I=I+mediamm*Ki;\n    }else {\n       I=0;\n    }\n    \/\/\n    control=Kp*Error+Kd*D+I;\n    \/\/L\u00edmites del controlador\n    if(control&lt;=0){\n        control=0;\n    } \n    if(control&gt;=255){\n        control=255;\n    } \n    if(control&lt;=165 &amp;&amp; control&gt;=50){\n        \t control=175;\n    }\n    \/\/ Actuo sobre la bomba\n      analogWrite(3, control);\n}\n    \u2026\n<\/pre>\n<h4><span class=\"ez-toc-section\" id=\"Muestreo_de_datos_con_Matlab-2\"><\/span>Muestreo de datos con Matlab<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Mediante un script en Matlab (ver apartado 10.2),recogeremos los datos que env\u00eda Arduino por el puerto serie (USB). El objetivo es recoger los datos suficientes para poder analizar posteriormente nuestro sistema y optimizar los datos de control.<\/p>\n<p>Muestreamos el nivel, el setpoint del nivel y la salida pwm de la bomba. Las muestras se toman cada 100ms.<\/p>\n<figure id=\"attachment_218\" aria-describedby=\"caption-attachment-218\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/muestreo_datos.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-218\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/muestreo_datos-300x225.png\" alt=\"\" width=\"300\" height=\"225\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/muestreo_datos-300x225.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/muestreo_datos-360x270.png 360w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/muestreo_datos.avif 560w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-218\" class=\"wp-caption-text\">Figura 26: Datos muestreados antes del ajuste de constantes.<\/figcaption><\/figure>\n<p>En la figura 26 vemos diferentes cambios de nivel sin optimizar los par\u00e1metros del PID.<\/p>\n<figure id=\"attachment_219\" aria-describedby=\"caption-attachment-219\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/muestreo_datos02.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-219\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/muestreo_datos02-300x227.png\" alt=\"\" width=\"300\" height=\"227\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/muestreo_datos02-300x227.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/muestreo_datos02-357x270.png 357w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/muestreo_datos02.avif 609w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-219\" class=\"wp-caption-text\">Figura 27: Datos muestreados con constantes ajustadas.<\/figcaption><\/figure>\n<p>En la figura 27 podemos ver los diferentes cambios de nivel que hemos muestreado. Partimos de 69mm y terminamos en 100mm. Vemos que la bomba se encuentra en el rango de acci\u00f3n especificado (165 &#8211; 255) y que la PV sigue al SP de forma correcta.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"Ajuste_manual_del_PID\"><\/span>Ajuste manual del PID<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Seg\u00fan la tabla 1 podemos sintonizar nuestro PID mediante prueba error. Nuestro sistema es sencillo, por lo que la sintonizaci\u00f3n no deber\u00eda suponer mucho problema. Las pruebas se realizan en lazo cerrado empezando por un control proporcional (P) para pasar a un control PI y finalmente un PID.<\/p>\n<figure id=\"attachment_241\" aria-describedby=\"caption-attachment-241\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla1-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-241\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla1-1-300x69.png\" alt=\"\" width=\"300\" height=\"69\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla1-1-300x69.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla1-1.avif 554w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-241\" class=\"wp-caption-text\">Tabla 1: Efecto de los par\u00e1metros de control<\/figcaption><\/figure>\n<p>Empezamos anulando los par\u00e1metros\u00a0 Ki y Kd y poniendo un valor de 100 en Kp para ver la respuesta que tiene el sistema. La respuesta es muy brusca por lo que vamos bajando sucesivamente el valor hasta que el valor que nos satisface es 25. A continuaci\u00f3n hacemos lo propio con el par\u00e1metro Ki. En este caso llegamos a la conclusi\u00f3n de que necesitamos un valor bajo para que la respuesta sea adecuada, ya que valores superiores a 1 hacen que la respuesta sea demasiado anticipativa. Finalmente buscamos el valor para Kd. Los valores obtenidos manualmente se indican en la tabla 2.<\/p>\n<figure id=\"attachment_240\" aria-describedby=\"caption-attachment-240\" style=\"width: 165px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-240\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla2.png\" alt=\"\" width=\"165\" height=\"92\" \/><\/a><figcaption id=\"caption-attachment-240\" class=\"wp-caption-text\">Tabla 2: Valores obtenidos de forma manual<\/figcaption><\/figure>\n<p>Con estos par\u00e1metros obtenemos una respuesta adecuada. Se puede ver un ejemplo del funcionamiento del proceso en el siguiente video:<\/p>\n<p>https:\/\/youtu.be\/ZmjsE1y2EPU<\/p>\n<h4><span class=\"ez-toc-section\" id=\"Ajuste_del_PID_con_Matlab\"><\/span>Ajuste del PID con Matlab<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Como hemos visto anteriormente, el ajuste de las constantes del PID se realiz\u00f3 mediante prueba y error. Para optimizar estos valores, haremos uso de Matlab, de la herramienta de identificaci\u00f3n de sistemas (System Identification Tool) y de la herramienta PID Tunning.<\/p>\n<p>Lanzamos la herramienta de identificaci\u00f3n de sistemas mediante el comando IDENT e importamos nuestros datos.<\/p>\n<figure id=\"attachment_221\" aria-describedby=\"caption-attachment-221\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ident.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-221\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ident-300x200.png\" alt=\"\" width=\"300\" height=\"200\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ident-300x200.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ident-406x270.png 406w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ident.avif 649w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-221\" class=\"wp-caption-text\">Figura 28: System Identification Tool \u2013 Importar datos<\/figcaption><\/figure>\n<p>Los datos que vamos a importar est\u00e1n en el dominio del tiempo y las variables que nos interesan son la bomba (PWM) y el nivel (mm), el tiempo de muestreo (Sampling interval) es de 0.1 segundos.<\/p>\n<figure id=\"attachment_222\" aria-describedby=\"caption-attachment-222\" style=\"width: 163px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ident_import.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-222\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ident_import-163x300.png\" alt=\"\" width=\"163\" height=\"300\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ident_import-163x300.png 163w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ident_import-147x270.png 147w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ident_import.avif 243w\" sizes=\"auto, (max-width: 163px) 100vw, 163px\" \/><\/a><figcaption id=\"caption-attachment-222\" class=\"wp-caption-text\">Figura 29: Datos importados<\/figcaption><\/figure>\n<p>A continuaci\u00f3n procesamos el modelo y lo exportamos al espacio de trabajo como \u201cP1\u201d.<\/p>\n<figure id=\"attachment_223\" aria-describedby=\"caption-attachment-223\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ident02.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-223\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ident02-300x200.png\" alt=\"\" width=\"300\" height=\"200\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ident02-300x200.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ident02-406x270.png 406w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/ident02.avif 649w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-223\" class=\"wp-caption-text\">Figura 30: System Identification Tool &#8211; Procesado<\/figcaption><\/figure>\n<p>Una vez que tenemos nuestro modelo en el espacio de trabajo abrimos PID tunning e importamos el modelo. PID tunning nos brinda la oportunidad de ajustar los par\u00e1metros del control PID mediante visualizaci\u00f3n de la respuesta escal\u00f3n del proceso analizado. Podemos ver la respuesta escal\u00f3n y los par\u00e1metros obtenidos en las figuras 31 y 32.<\/p>\n<figure id=\"attachment_224\" aria-describedby=\"caption-attachment-224\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/pidtunning.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-224\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/pidtunning-300x145.png\" alt=\"\" width=\"300\" height=\"145\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/pidtunning-300x145.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/pidtunning-558x270.png 558w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/pidtunning.avif 730w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-224\" class=\"wp-caption-text\">Figura 31: PID tunning. Respuesta escal\u00f3n.<\/figcaption><\/figure>\n<figure id=\"attachment_225\" aria-describedby=\"caption-attachment-225\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/pidtunning2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-225\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/pidtunning2-300x287.png\" alt=\"\" width=\"300\" height=\"287\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/pidtunning2-300x287.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/pidtunning2-282x270.png 282w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/pidtunning2.avif 366w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-225\" class=\"wp-caption-text\">Figura 32: PID tunning. Par\u00e1metros obtenidos.<\/figcaption><\/figure>\n<p>Finalmente obtenemos los valores de las constantes para la respuesta elegida. El objetivo es minimizar el tiempo de respuesta y el sobreimpulso. Podemos ver una comparativa de los par\u00e1metros de control en la tabla 3.<\/p>\n<figure id=\"attachment_242\" aria-describedby=\"caption-attachment-242\" style=\"width: 262px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-242\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla3.png\" alt=\"\" width=\"262\" height=\"118\" \/><\/a><figcaption id=\"caption-attachment-242\" class=\"wp-caption-text\">Tabla 3: Comparativa de los valores obtenidos<\/figcaption><\/figure>\n<h3><span class=\"ez-toc-section\" id=\"Control_por_eventos-2\"><\/span>Control por eventos<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Para desarrollar el control por eventos, usaremos el modelo matem\u00e1tico desarrollado anteriormente. La idea es analizar tanto el control ON\/OFF con hist\u00e9resis como el PID y optimizar los consumos.<\/p>\n<p>En el caso del control ON\/OFF con hist\u00e9resis, con los datos muestreados podemos afirmar que para subir un grado cent\u00edgrado necesitamos aproximadamente 250 segundos. El sistema disipa temperatura aproximadamente a un ritmo de 1,5\u00baC\/h por lo que el calentador actuar\u00e1 3 veces por hora durante 750 segundos, para mantenerse en la temperatura de referencia. En este caso en concreto, la mejor opci\u00f3n para este sistema de control ser\u00eda economizar el consumo durmiendo a Arduino y despertarle mediante interrupci\u00f3n. De este modo solamente despertar\u00eda cuando fuera necesario para activar el calentador. Si nuestro sistema de control contara con m\u00e1s rel\u00e9s, y estos se activaran de forma as\u00edncrona, desarrollar un control por eventos si ser\u00eda beneficioso, ya que la naturaleza del sistema nos impedir\u00eda dormir el microcontrolador. En nuestro control de temperatura, no hay lugar a dudas, implementar el control por eventos es malgastar tiempo y recursos, ya que, por su simplicidad \u00a0podemos economizar consumos al m\u00e1ximo durmiendo el microcontrolador. Tras el an\u00e1lisis del sistema y los consumos obtenidos, podemos afirmar que utilizando la estrategia de dormir el microcontrolador, estamos ahorrando 30mA con respecto al estado de reposo, esto es un 70% de consumo menos.<\/p>\n<figure id=\"attachment_243\" aria-describedby=\"caption-attachment-243\" style=\"width: 253px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla4.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-243\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla4.png\" alt=\"\" width=\"253\" height=\"138\" \/><\/a><figcaption id=\"caption-attachment-243\" class=\"wp-caption-text\">Tabla 4: Consumo control ON\/OFF con hist\u00e9resis.<\/figcaption><\/figure>\n<p>El control PID, al contrario que el caso anterior, es m\u00e1s efectivo cuanto menor sea el muestreo, pero una alta tasa de muestreo implica mayor comunicaci\u00f3n con el actuador, mayor consumo y menor vida \u00fatil de los elementos que componen el sistema. Una de las maneras en que economiza consumos el control por eventos es minimizando la comunicaci\u00f3n con el actuador. Para minimizar la acci\u00f3n del actuador necesitamos muestrear muy r\u00e1pido y tener nuestro sistema modelado. Supongamos que inicialmente nuestro tiempo de muestreo era de 1 segundo, para implementar en control por eventos, establecemos el tiempo de muestreo en 100ms, de modo que ahora muestreamos 10 veces m\u00e1s que antes pero eso no significa que el actuador trabaje 10 veces m\u00e1s, sino que disponemos de m\u00e1s datos para decidir si debe actuar o no. Para que el control sea eficiente debemos adem\u00e1s, de establecer ciertos l\u00edmites como un tiempo m\u00e1ximo en el que el actuador llevar\u00e1 a cabo una acci\u00f3n obligada, y el error m\u00e1ximo que nos podemos permitir para que el sistema siga siendo estable y nos d\u00e9 tiempo a actuar. Para establecer un tiempo m\u00e1ximo de actuaci\u00f3n, deberemos analizar el sistema en detalle. En funci\u00f3n del tiempo m\u00e1ximo, estableceremos un error m\u00e1ximo adecuado.<\/p>\n<figure id=\"attachment_226\" aria-describedby=\"caption-attachment-226\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/muestreorapido.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-226\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/muestreorapido-300x219.png\" alt=\"\" width=\"300\" height=\"219\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/muestreorapido-300x219.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/muestreorapido-370x270.png 370w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/muestreorapido.avif 373w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-226\" class=\"wp-caption-text\">Figura 33: Gr\u00e1fica de muestreo r\u00e1pido.<\/figcaption><\/figure>\n<p>El caudal de entrada (Q<sub>e<\/sub>) lo hemos obtenido de forma experimental midiendo el tiempo que tarda en llenar un vaso de 250ml a diferentes voltajes.<\/p>\n<figure id=\"attachment_227\" aria-describedby=\"caption-attachment-227\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/pwmbba.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-227\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/pwmbba-300x183.png\" alt=\"\" width=\"300\" height=\"183\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/pwmbba-300x183.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/pwmbba.avif 443w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-227\" class=\"wp-caption-text\">Figura 34: Relaci\u00f3n PWM y L\/min de la bomba B1.<\/figcaption><\/figure>\n<p>A continuaci\u00f3n, hallamos el tiempo de llenado o vaciado que usaremos como tiempo m\u00e1ximo que no debemos sobrepasar. Para ello usaremos las ecuaciones planteadas en el modelo matem\u00e1tico.<\/p>\n<p><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/formulaseventos.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-228\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/formulaseventos.png\" alt=\"\" width=\"265\" height=\"55\" \/><\/a><\/p>\n<p>Teniendo en cuenta que:<\/p>\n<ul>\n<li>a = 0,18m, b = 0,4m, c = 0,18m<\/li>\n<li>Qe = entre 3,05&#215;10<sup>-5<\/sup> m\u00b3\/s y 4,71&#215;10<sup>-5<\/sup> m\u00b3\/s<\/li>\n<li>Qs = 3,33&#215;10<sup>-5<\/sup>m\u00b3\/s<\/li>\n<\/ul>\n<figure id=\"attachment_229\" aria-describedby=\"caption-attachment-229\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla5.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-229\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla5-300x174.png\" alt=\"\" width=\"300\" height=\"174\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla5-300x174.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla5.avif 380w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-229\" class=\"wp-caption-text\">Tabla 5: Tabla de tiempos.<\/figcaption><\/figure>\n<p>Obtenida la tabla de tiempos, podemos establecer el tiempo m\u00e1ximo en 30 segundos sin perder la estabilidad del sistema.<\/p>\n<p>Finalmente estableceremos un error m\u00e1ximo entre el nivel actual y el setpoint de 10mm, de este modo economizaremos actuaciones pero controlando el sistema en todo momento.<\/p>\n<p>A continuaci\u00f3n veamos el c\u00f3digo PID original y el PID basado en eventos.<\/p>\n<p><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/codigos_pid.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-230\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/codigos_pid-300x253.png\" alt=\"\" width=\"300\" height=\"253\" srcset=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/codigos_pid-300x253.png 300w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/codigos_pid-320x270.png 320w, https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/codigos_pid.avif 537w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Tras el c\u00e1lculo del error, establecemos una condici\u00f3n de actuaci\u00f3n solamente si el error es mayor o igual a 10mm y si por el contrario llegamos a los 300 muestreos. Recordemos que el muestreo se realiza cada 100ms, por lo que 30000ms \/ 100ms = 300. Si cualquiera de las opciones se da, calculamos el control y reiniciamos el contador de muestreo.<\/p>\n<figure id=\"attachment_232\" aria-describedby=\"caption-attachment-232\" style=\"width: 202px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla6.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-232\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/tabla6.png\" alt=\"\" width=\"202\" height=\"177\" \/><\/a><figcaption id=\"caption-attachment-232\" class=\"wp-caption-text\">Tabla 6: Consumos control PID.<\/figcaption><\/figure>\n<p>Cada vez que no se ejecuta la acci\u00f3n de control, estamos ahorrando entre 290mA con la bomba principal parada, a 13 mA en r\u00e9gimen de control, dependiendo del consumo puntual de los elementos del sistema. Tambi\u00e9n hay que tener en cuenta que cada vez que no ejecutamos una acci\u00f3n estamos preservando la vida \u00fatil de ciertos elementos del sistema, lo que supone un ahorro a largo plazo.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Codigo_Arduino\"><\/span>C\u00f3digo Arduino<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\">\/\/===============================================================\n\/\/ Librer\u00edas\n\/\/===============================================================\n#include &lt;OneWire.h&gt;\n#include &lt;DallasTemperature.h&gt;\n#include &lt;Wire.h&gt;                 \n#include &lt;LiquidCrystal_I2C.h&gt;   \n\/\/===============================================================\n\/\/ Variables globales &amp; Constantes\n\/\/===============================================================\n#define ONE_WIRE_BUS 2\n\/\/                             \nOneWire oneWire(ONE_WIRE_BUS); \nDallasTemperature sensores(&amp;oneWire);\nLiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);\/\/Direccion de LCD\n\/\/\nDeviceAddress S1 = {0x28, 0xFF, 0xAA, 0x58, 0x2D, 0x04, 0x00, 0xBD};  \/\/T\u00aa Tanque\nunsigned long time = 0; \/\/ tiempo de ejecucion del ultimo ciclo\nint period = 50; \/\/ Periodo de muestreo en ms\nint periodo = 1000; \/\/ Periodo de muestreo en ms\nboolean debug = false;\/\/false=matlab\nboolean modo = false;\/\/false=auto true=manual\nboolean bypassPID = false;\/\/FALSE=PID normal TRUE=nivel 65mm-100mm\nString modos = \"\";\nfloat temp;\nint Trig_pin, Echo_pin; \/\/Trigger = pin 9 | ECHO = pin 8  \nint n=5; \/\/ valores para media\nint v[5];\nunsigned long mm;\nint mediamm;\nunsigned long lastmm;\nint senal;\n\/\/\nfloat Kp = 25;\/\/19.45;\nfloat Kd = 0.1;\/\/0.0058;\nfloat Ki = 0.3;\/\/0.1;\nfloat I; \/\/ Valor Integral\nfloat D; \/\/ Valor Derivativo\nint Error;\nint ErrorAnt;\nfloat control;\nunsigned long SetPoint;\nint SPtemp;\nfloat ErrorTemp;\n\/\/===============================================================\n\/\/ SETUP\n\/\/===============================================================\nvoid setup(void)\n{\n  Serial.begin(9600); \/\/Abrimos la comunicaci\u00f3n por serial\n  sensores.begin();   \/\/Iniciamos sensor T\u00aa\n  lcd.begin(20,4);    \/\/Indicamos tipo de LCD  \n  \/\/lcd.backlight();\n  Ultrasonido(9,8);   \/\/Trigger = pin 9 | ECHO = pin \n  mm = microsecondsToMeasure(duracion());\n  v[0] =mm;\n  v[1] =mm;\n  v[2] =mm; \n  v[3] =mm; \n  v[4] =mm;       \n}\n\/\/===============================================================\n\/\/ BUCLE PRINCIPAL\n\/\/===============================================================\nvoid loop(void)\n{\n    \/\/Nivel\n    mm = microsecondsToMeasure(duracion());\n    \/\/ Calculo la media del NIVEL\n      for (int i=0; i&lt;n-1; i++){ \/\/ Utilizamos array\n        v[i] =v[i+1];\n      }\n      v[n-1]= mm;\/\/(mm - lastmm);\n      mediamm=0;\n      for (int i=0; i&lt;n; i++){ \/\/ Calculamos la media\n        mediamm = mediamm+ v[i];\n      }\n      mediamm = mediamm\/n;\n      mediamm = 170-mediamm;\/\/Nivel en parte superior\n    \/\/Temperatura\n    sensores.setResolution(S1, 9);\/\/0,5\u00baC resoluci\u00f3n\n    sensores.requestTemperatures();\n    Mostrar_Datos(S1);\n  if (digitalRead(12) == HIGH){\n    modo=true;\n    modos=\"MANUAL\";\n  }else{\n      modo=false;\n      modos=\"AUTOMATICO\";\n   }\n   \/\/Purga\n   \/\/if (digitalRead(7) == HIGH &amp;&amp; mediamm &lt;=120){\n   \/\/ analogWrite(5, 255);\n   \/\/}else{\n   \/\/ analogWrite(5, 0);\n   \/\/}\n \/\/MODO MANUAL-------------------------------------------------\n \/\/-------------------------------------------------------------      \n  if (modo==true){\n       \/\/Bomba en MANUAL\n      int bomba=0;\n      float niv=analogRead(A0);\n      bomba=map(niv,0,1023,0,255);\n      analogWrite(3, bomba);\n      \/\/Temperatura en MANUAL\n         \/\/Rel\u00e9 calentador\n      if (digitalRead(7) == HIGH){\n       digitalWrite(13,HIGH);\n       }else{\n       digitalWrite(13,LOW);\n       }\n      \/\/LCD en MANUAL\n      lcd.clear();\n      lcd.setCursor(0,0);\n      lcd.print(\"====== \");\n      lcd.print(modos);\n      lcd.print(\" ======\");\n      \/\/\n      lcd.setCursor(0,1);\n      lcd.print(\"Temperatura \");             \n      lcd.print(temp);\n      lcd.print(\" \\337C\");\n      \/\/\n      lcd.setCursor(0,2);\n      lcd.print(\"Bomba \");\n      lcd.print(bomba*0.0470588);\n      lcd.print(\" V\");\n      \/\/\n      lcd.setCursor(0,3);\n      lcd.print(\"Nivel \");\n      lcd.print(mediamm);\n      lcd.print(\" mm\");\n      \/\/\n      }\n  \/\/AUTOM\u00c1TICO----------------------------------------------------\n  if (modo==false){\n    \/\/ MODO AUTOM\u00c1TICO---------------------------------------------\n    \/\/------------------------------------------------------------- \n    \/\/SetPoint regulable NIVEL\n    float set=analogRead(A1);\n    SetPoint=map(set,0,1023,50,120);\n    \/\/-----------------------------\n    \/\/ PID\n    \/\/ Error-----------------------------------------------------\n      ErrorAnt=Error;\n      Error=SetPoint-mediamm;\n      \/\/if(abs(Error)&lt;=3){ \/\/Banda muerta de 5mm\n      \/\/  Error=0;\n      \/\/} \n    \/\/ Derivada--------------------------------------------------\n      D=Error-ErrorAnt;\n    \/\/ Limito Integral\n      int ok = 3; \/\/damos por bueno -&gt; banda muerta de 5mm\n      int nook = 10; \/\/8mm de diferencia, dejo actuar\n      if(abs(Error)&gt;ok &amp;&amp; abs(Error)&lt;nook){\n        I=I+mediamm*Ki;\n      } \n      else {\n        I=0;\n      }\n    \/\/\n      control=Kp*Error+Kd*D+I;\n      if(control&lt;=0){\n        control=0;\n        senal=0;\n      } \n      if(control&gt;=255){\n        control=255;\n        senal=255;\n      } \n      if(control&lt;=165 &amp;&amp; control&gt;=50){\n        senal=175;\n        control=175;\n      } else{\n        senal=control;\n      }\n      \/\/ Actuo sobre la bomba\n      if (bypassPID==true){\/\/No hago caso al setpoint\n        if (mediamm&gt;=100){\n          analogWrite(3, 0);\n        }\n        if (mediamm&lt;=65){\n          analogWrite(3, 255);\n        }\n      }else{\n        analogWrite(3, control);\n      }\n    \/\/\n  \/\/ON-OFF con hist\u00e9resis------------------------\n  \/\/SetPoint regulable Temperatura\n  float sett=analogRead(A2);\n  SPtemp=map(sett,0,1023,30,15);\n  \/\/Calculo el error\n  ErrorTemp = SPtemp-temp;\n  \/\/Banda muerta de 0.5\u00baC\n  if(ErrorTemp&lt;=0.5){ \n     digitalWrite(13, LOW);\n    }else{\n     digitalWrite(13, HIGH);\n  }\n    \/\/LCD en AUTO\n     lcd.clear();\n     lcd.setCursor(0,0);\n    lcd.print(\"==== \");\n    lcd.print(modos);\n    lcd.print(\" ====\");\n    \/\/\n    lcd.setCursor(0,1);\n    lcd.print(\"Nivel \");\n    lcd.print(mediamm);\n    lcd.print(\" mm\");\n    lcd.print(\" SP \");\n    lcd.print(SetPoint);\n    \/\/\n    lcd.setCursor(0,2);\n    lcd.print(\"Bomba \");\n    \/\/control*=0,3921;\n    lcd.print(control*0.3921);\n    lcd.print(\" %  \");\n    lcd.print(senal);\n    \/\/\n    lcd.setCursor(0,3);\n    lcd.print(\"Temp \");             \n    lcd.print(temp);\n    lcd.print(\" \\337C\");\n    lcd.print(\" SP \");\n    lcd.print(SPtemp);\n  }\n  \/\/MATLAB-------------------------------------------------\n  if(debug==false){\n  \/\/(Nivel,SetPoint,control,temp,sptemp)\n  \/\/Serial.print(mediamm);\n  \/\/Serial.print(\",\");\n  \/\/Serial.print(SetPoint);\n  \/\/Serial.print(\",\");\n  \/\/Serial.print(control);\n  \/\/Serial.print(\",\");\n    Serial.print(temp);\n    Serial.print(\",\");\n    Serial.print(SPtemp);\n    Serial.print(\",\");\n    \/\/Serial.print(ErrorTemp);\n  }else{\n    \/\/TEMPERATURA\n    \/\/Serial.print(\"T \");\n    \/\/Serial.print(temp);\n    \/\/Serial.print(\" SP \");\n    \/\/Serial.print(SPtemp);\n    \/\/Serial.print(\" Error\");\n    \/\/Serial.print(ErrorTemp);\n    \/\/Serial.println(\"\");\n    \/\/NIVEL\n    \/\/Serial.print(\"Nivel: \");\n    \/\/Serial.print(mediamm);\n    \/\/Serial.print(\" SP: \");\n    \/\/Serial.print(SetPoint);\n    \/\/Serial.print(\" Error: \");\n    \/\/Serial.print(Error);\n    \/\/Serial.print(\" ErrorAnt: \");\n    \/\/Serial.print(ErrorAnt);\n    \/\/Serial.print(\" Control: \");\n    \/\/Serial.print(control);\n    \/\/Serial.print(\" Kp*Error: \");\n    \/\/Serial.print(Kp*Error);\n    \/\/Serial.print(\" D: \");\n    \/\/Serial.print(D);\n    \/\/Serial.print(\" I: \");\n    \/\/Serial.print(I);\n    \/\/Serial.println(\"\"); \n  }\n  delay (100);\/\/Dura 0.1 segundos\n }\n\/\/===============================================================\n\/\/ Subroutinas\n\/\/===============================================================\nvoid Ultrasonido(int TP, int EP)\n{\n   pinMode(TP,OUTPUT);\n   pinMode(EP,INPUT);\n   Trig_pin=TP;\n   Echo_pin=EP;\n}\nunsigned long duracion(void)\n{\n  digitalWrite(Trig_pin, LOW);\n  delayMicroseconds(2);\n  digitalWrite(Trig_pin, HIGH);\n  delayMicroseconds(10);\n  digitalWrite(Trig_pin, LOW); \n  return pulseIn(Echo_pin,HIGH);\n}\nunsigned long microsecondsToMeasure(unsigned long microseconds)\n{\n  \/\/return microseconds * 0.017;  \/\/(cm) Distancia = 340m\/s * 10^2cm\/m * 1s\/10^6us * tiempo_us\n  return microseconds * 0.17;  \/\/(mm)Distancia = 340m\/s * 10^3mm\/m * * 1s\/10^6us * tiempo_us\n}\n\n\/\/Creamos una funcion para mostrar la direccion de los sensores\nvoid Mostrar_Direccion(DeviceAddress direccion)\n{\n  for (uint8_t i = 0; i &lt; 8; i++)\n  {\n    if (direccion[i] &lt; 16)\n      \/\/Serial.print(\"0\");\n    Serial.print(direccion[i], HEX);\n  }\n}\n\n\/\/Funcion que muestra la temperatura en grados centigrados del sensor\nvoid Mostrar_Temperatura(DeviceAddress direccion)\n{\n  float tempC = sensores.getTempC(direccion);\n  temp = tempC;\n}\n\n\/\/Funcion que muestra la resolucion del sensor de dicha direccion. Las resoluciones posibles pueden ser:\n\/\/Resolucion a 9 bits 0.50 \u00baC\n\/\/Resolucion a 10 bits 0.25 \u00baC\n\/\/Resolucion a 11 bits 0.125 \u00baC\n\/\/Resolucion a 12 bits 0.0625 \u00baC\nvoid Mostrar_Resolucion(DeviceAddress direccion)\n{\n  \/\/Serial.print(\"Resolucion: \");\n  \/\/Serial.print(sensores.getResolution(direccion));\n  \/\/Serial.println();   \n}\n\n\/\/Funcion que muestra los datos del sensor de dicha direccion\nvoid Mostrar_Datos(DeviceAddress direccion)\n{\n  \/\/Serial.print(\"Direccion del dispositivo: \");\n  \/\/Mostrar_Direccion(direccion);\n  \/\/Serial.print(\" \");\n  Mostrar_Temperatura(direccion);\n}<\/pre>\n<h2><span class=\"ez-toc-section\" id=\"Codigo_Matlab_lectura_puerto_serie_del_nivel\"><\/span>C\u00f3digo Matlab lectura puerto serie del nivel<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"matlab\">function Matlab_Arduino(muestras)\n\nclose all;\nclc;\n%Variables\nglobal nivel;\nglobal nivelsp;\nglobal bomba;\nglobal tiempo;\nnivel=[];\nnivelsp=[];\nbomba=[];\ndelay=0.01; % delay de void loop en segundos\ntiempo=[];\n\n%Inicializo el puerto serial\ndelete(instrfind({'Port'},{'COM3'}));\npuerto_serial=serial('COM3');\npuerto_serial.BaudRate=9600;\nwarning('off','MATLAB:serial:fscanf:unsuccessfulRead');\n\n%Abro el puerto serial\nfopen(puerto_serial); \n\n%Declaro un contador del n\u00famero de muestras ya tomadas\ncontador=1;\n\n%Creo una ventana para la gr\u00e1fica\n%figure('Name','Comunicaci\u00f3n serie')\nfigure\nax1 = subplot(2,1,1); % subplot superior\nax2 = subplot(2,1,2); % subplot inferior\ngrid off;\nhold on;\n \n%Bucle de toma de muestras\nwhile (contador&lt;=muestras)\n        %axis tight\n        %d           decimal numbers                         \n        %e, %f, %g   floating-point numbers\n        puertoserie=fscanf(puerto_serial,'%f,%f,%f')';\n        nivel(contador)=puertoserie(1);\n        nivelsp(contador)=puertoserie(2);\n        bomba(contador)=puertoserie(3);\n        plot(ax1,contador,nivel(contador),'X',contador,nivelsp(contador),'*');\n        ylim(ax1,[0 150]); \n        xlim(ax1,[contador-5 contador+5]);\n        title(ax1,'Nivel real (mm) y SetPoint (mm)')\n        ylabel(ax1,'Niveles (mm)')\n        xlabel(ax1,'Tiempo (s)')\n        %\n        plot(ax2,contador,bomba(contador),'X');\n        ylim(ax2,[0 260]); \n        xlim(ax2,[contador-5 contador+5]);\n        title(ax2,'PWM Bomba B1')\n        ylabel(ax2,'PWM (0-255)')\n        xlabel(ax2,'Tiempo (s)')\n        drawnow\n        contador=contador+1;\n        pause(1);\nend\n%Auto-generamos la variable tiempo\nfor i=1:length(nivel)\n    tiempo(i)=i*delay;\nend\n%Guardo las variables en el espacio de trabajo\nassignin('base', 'Nivel', nivel);\nassignin('base', 'NivelSP', nivelsp);\nassignin('base', 'Bomba', bomba);\nassignin('base', 'tiempo', tiempo);\nputvar(nivel);\nputvar(nivelsp);\nputvar(bomba);\nputvar(tiempo);\n%Cierro y limpio \nfclose(puerto_serial); \ndelete(puerto_serial);\n\nend\n<\/pre>\n<h2><span class=\"ez-toc-section\" id=\"Codigo_Matlab_lectura_puerto_serie_de_la_temperatura\"><\/span>C\u00f3digo Matlab lectura puerto serie de la temperatura<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"matlab\">function Datos_temperatura(muestras)\n\nclose all;\nclc;\n%Variables\nglobal temp;\nglobal tempsp;\nglobal tiempo;\ntemp=[];\ntempsp=[];\ndelay=1; % delay de void loop en segundos\ntiempo=[];\n\n%Inicializo el puerto serial\ndelete(instrfind({'Port'},{'COM3'}));\npuerto_serial=serial('COM3');\npuerto_serial.BaudRate=9600;\nwarning('off','MATLAB:serial:fscanf:unsuccessfulRead');\n\n%Abro el puerto serial\nfopen(puerto_serial); \n\n%Declaro un contador del n\u00famero de muestras ya tomadas\ncontador=1;\n\n%Creo una ventana para la gr\u00e1fica\n%figure('Name','Comunicaci\u00f3n serie')\nfigure\ngrid off;\nhold on;\n \n%Bucle de toma de muestras\nwhile (contador&lt;=muestras)\n%for contador=1:length(muestras)\n        %axis tight\n        %d           decimal numbers                         \n        %e, %f, %g   floating-point numbers\n        puertoserie=fscanf(puerto_serial,'%f,%d');\n        temp(contador)=puertoserie(1);\n        tempsp(contador)=puertoserie(2);\n        plot(contador,temp(contador),'X',contador,tempsp(contador),'*');\n        ylim([10 30]); \n        xlim([0 contador+2]);\n        title('Temperatura (\u00baC) y SetPoint (\u00baC)')\n        ylabel('Temperaturas (\u00baC)')\n        xlabel('Tiempo (s)')\n        drawnow\n        contador=contador+1;\n        pause(0.01);\nend\n%Auto-generamos la variable tiempo\nfor i=1:length(Temperatura)\n    tiempo(i)=i*delay;\nend\n%Guardo las variables en el espacio de trabajo\nassignin('base', 'Temperatura', temp);\nassignin('base', 'TemperaturaSP', tempsp);\nassignin('base', 'tiempo', tiempo);\nputvar(temp);\nputvar(tempsp);\nputvar(tiempo);\n%Cierro y limpio\nfclose(puerto_serial); \ndelete(puerto_serial);\n\nend\n<\/pre>\n<h2><span class=\"ez-toc-section\" id=\"Galeria_de_imagenes\"><\/span>Galer\u00eda de im\u00e1genes<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div id='gallery-1' class='gallery galleryid-167 gallery-columns-8 gallery-size-thumbnail'><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon portrait'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160426_182126-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160426_182126-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon portrait'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160426_182131-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160426_182131-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon portrait'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160426_182137-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160426_182137-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon portrait'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160426_182142-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160426_182142-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160426_182150-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160426_182150-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160426_182154-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160426_182154-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160501_175413-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160501_175413-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160501_175422-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160501_175422-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160501_175426-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160501_175426-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160501_182957-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160501_182957-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160501_183001-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160501_183001-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160504_182438-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160504_182438-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160504_182444-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160504_182444-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160504_182455-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160504_182455-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160508_182715-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160508_182715-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160508_182726-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160508_182726-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160508_182730-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160508_182730-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160508_182735-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160508_182735-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160508_182752-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160508_182752-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160508_182811-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160508_182811-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160508_182818-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160508_182818-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160508_182827-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160508_182827-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160509_123806-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160509_123806-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160509_123811-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160509_123811-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160509_123811_.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160509_123811_-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160509_123811_.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160509_123811_-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160511_105626-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160511_105626-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160511_105652-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160511_105652-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_121554-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_121554-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_121614-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_121614-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_121618-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_121618-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_121626-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_121626-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_121630-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_121630-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_121638-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_121638-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_121655-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_121655-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_122333-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_122333-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_122352-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_122352-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon portrait'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_122400-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_122400-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_122756-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_122756-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_122801-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_122801-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_122812-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_122812-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_122813-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160516_122813-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160517_103804-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160517_103804-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160517_103812-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160517_103812-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160517_110632-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160517_110632-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160517_110642-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160517_110642-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160517_110649-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160517_110649-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160517_110704-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160517_110704-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160517_110713-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160517_110713-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160518_171338-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160518_171338-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160518_171343-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160518_171343-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160518_174036-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160518_174036-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160518_174047-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160518_174047-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160518_174054-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160518_174054-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160518_174055-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160518_174055-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure><figure class='gallery-item'>\n\t\t\t<div class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160518_174059-scaled.avif'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/garikoitz.info\/blog\/wp-content\/uploads\/2017\/12\/IMG_20160518_174059-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/div><\/figure>\n\t\t<\/div>\n\n<h2><span class=\"ez-toc-section\" id=\"Bibliografia\"><\/span>Bibliograf\u00eda<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p style=\"padding-left: 30px;\">[1] \u00a0\u00a0 Arduino.<em> Arduino board UNO<\/em>. Especificaciones t\u00e9cnicas. [en l\u00ednea]. Italia, 2016. Disponible en: <a href=\"https:\/\/goo.gl\/31jbDl\">https:\/\/goo.gl\/31jbDl<\/a><\/p>\n<p style=\"padding-left: 30px;\">[2] \u00a0\u00a0 Farnell Components SL. BC549C.<em> Transistor NPN<\/em>. Especificaciones t\u00e9cnicas. [en l\u00ednea]. Espa\u00f1a, 2016. Disponible en: <a href=\"http:\/\/goo.gl\/hB8KzL\">http:\/\/goo.gl\/hB8KzL<\/a><\/p>\n<p style=\"padding-left: 30px;\">[3] \u00a0\u00a0 Friends-of-Fritzing foundation. <em>Fritzing<\/em>. <em>Software de dise\u00f1o de esquemas electr\u00f3nicos<\/em> [en l\u00ednea]. Alemania, 2016. Disponible en: <a href=\"http:\/\/goo.gl\/3hta7i\">http:\/\/goo.gl\/3hta7i<\/a><\/p>\n<p style=\"padding-left: 30px;\">[4] HC-SR04.<em> Sensor ultrasonidos<\/em>. Especificaciones t\u00e9cnicas. [en l\u00ednea]. 2016. Disponible en: <a href=\"http:\/\/goo.gl\/5jUiYM\">http:\/\/goo.gl\/5jUiYM<\/a><\/p>\n<p style=\"padding-left: 30px;\">[5] \u00a0\u00a0 Karl-Erik Arz\u00e9n. <em>A simple event-based PID controller.<\/em> [en l\u00ednea]. 14th IFAC World Congress Beijing, China, 1999. Disponible en: <a href=\"http:\/\/goo.gl\/y0zzGx\">http:\/\/goo.gl\/y0zzGx<\/a><\/p>\n<p style=\"padding-left: 30px;\">[6] \u00a0\u00a0 Katsuhiko Ogata. Ingenier\u00eda de control moderna. 5\u00aa edici\u00f3n. Editorial Pearson, 2010. ISBN: 978-84-8322-660-5<\/p>\n<p style=\"padding-left: 30px;\">[7] \u00a0\u00a0 Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino, and David Mellis. <em>Arduino IDE<\/em>. <em>Software de programaci\u00f3n de Arduino <\/em>\u00a0[en l\u00ednea]. Italia, 2016. Disponible en: <a href=\"https:\/\/goo.gl\/OibmBq\">https:\/\/goo.gl\/OibmBq<\/a><\/p>\n<p style=\"padding-left: 30px;\">[8] \u00a0\u00a0 Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino, and David Mellis.<em> Arduino<\/em>. Referencia de programaci\u00f3n de Arduino [en l\u00ednea]. Italia, 2016. Disponible en: <a href=\"https:\/\/goo.gl\/PhfOHk\">https:\/\/goo.gl\/PhfOHk<\/a><\/p>\n<p style=\"padding-left: 30px;\">[9] \u00a0\u00a0 MathWorks INC. <em>Documentaci\u00f3n t\u00e9cnica de Matlab<\/em> [en l\u00ednea]. Espa\u00f1a, 2016. Disponible en: <a href=\"http:\/\/goo.gl\/CGNZyc\">http:\/\/goo.gl\/CGNZyc<\/a><\/p>\n<p style=\"padding-left: 30px;\">[10] Maxim integrated INC. DS18B20.<em> Sonda de temperatura<\/em>. Especificaciones t\u00e9cnicas. [en l\u00ednea]. California, 2016. Disponible en: <a href=\"https:\/\/goo.gl\/Mc9pjV\">https:\/\/goo.gl\/Mc9pjV<\/a><\/p>\n<p style=\"padding-left: 30px;\">[11] S.Dormido. <em>Educaci\u00f3n en autom\u00e1tica. Nuevos retos<\/em> [en l\u00ednea]. Madrid, 2016. Disponible en: <a href=\"http:\/\/goo.gl\/1vj64j\">http:\/\/goo.gl\/1vj64j<\/a><\/p>\n<p style=\"padding-left: 30px;\">[12] Xiamen Ocular Optics CO Ltd. GDM2004D.<em> Display LCD<\/em>. Especificaciones t\u00e9cnicas. [en l\u00ednea]. China, 2016. Disponible en: <a href=\"https:\/\/goo.gl\/4E87Ch\">https:\/\/goo.gl\/4E87Ch<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introducci&oacute;n El proyecto elegido para llevar a cabo con Arduino y en el que desarrollaremos diferentes tipos de controles,&nbsp; consiste en dos dep&oacute;sitos de agua de 13 litros de capacidad interconectados mediante una bomba. El dep&oacute;sito 1 se considera el principal y por lo tanto se implementar&aacute; un control de nivel mediante PID y un control de temperatura del agua mediante un sistema ON\/OFF con hist&eacute;resis. Control ON\/OFF con hist&eacute;resis Para el control ON\/OFF con hist&eacute;resis, tal como se muestra&#8230;<\/p>\n<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/garikoitz.info\/blog\/2017\/12\/estrategias-de-control-con-arduino\/\"> Leer m\u00e1s<span class=\"screen-reader-text\">  Leer m\u00e1s<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":172,"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":[16,20,21,26,22,19,24,23,18,17,25],"class_list":["post-167","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","tag-arduino","tag-control-por-eventos","tag-ds18b20","tag-gdm2004d","tag-hc-sr04","tag-histeresis","tag-ident","tag-matlab","tag-on-off","tag-pid","tag-pid-tunning"],"_links":{"self":[{"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/posts\/167","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=167"}],"version-history":[{"count":28,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/posts\/167\/revisions"}],"predecessor-version":[{"id":1686,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/posts\/167\/revisions\/1686"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/media\/172"}],"wp:attachment":[{"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/media?parent=167"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/categories?post=167"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/tags?post=167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}