Estoy tratando de implementar un algoritmo PID básico en un Arduino Leonardo para mezclar agua caliente y fría del grifo utilizando válvulas servocontroladas. El objetivo es mantener la temperatura lo más cerca posible de la consigna. Es especialmente importante evitar que la temperatura de salida sobrepase el punto de consigna para proteger al usuario de las quemaduras. En segundo lugar, es importante conseguir que la temperatura se acerque al punto de consigna lo más rápidamente posible.
Para pequeños cambios de temperatura, un implementación estándar del algoritmo PID parece funcionar bien. Pero no sé cómo tener en cuenta los largos retrasos que pueden producirse al esperar que el agua caliente llegue a la válvula, ya que estos retrasos son mucho más largos que los retrasos estándar después de cambiar las posiciones de la válvula.
Obviamente, dependiendo de la longitud de la línea de agua caliente y del tiempo transcurrido desde el último uso del agua caliente, el agua caliente puede tardar varias decenas de segundos en llegar a la válvula, por lo que durante este tiempo, la temperatura del agua se mantiene bastante constante a una temperatura baja y la válvula de agua caliente pronto se abre al 100%. La componente integral comienza a acumular un gran valor de error.
Cuando el agua caliente llega finalmente a la válvula, la temperatura detectada aumenta muy rápidamente hasta la temperatura máxima del agua caliente. Debido al gran error integral, la válvula de agua caliente se mantiene al 100% durante mucho tiempo después de que la temperatura supere el punto de ajuste, debido a la espera de que el valor integral se reduzca a niveles normales. Por lo tanto, el resultado es un agua a la máxima temperatura durante varias (decenas) de segundos.
No estoy seguro de cómo explicar esto posible un gran retraso. En este caso, ¿sería prudente establecer un límite superior (y un límite inferior) en el valor del error integral, para limitar el tiempo máximo de respuesta? Esto parece anular el propósito del componente integral, y además seguiría imponiendo algunos retraso después de alcanzar el punto de consigna.
¿O hay una manera mejor de manejar los cambios rápidos de entrada después de un largo retraso?
Gracias por cualquier consejo.