Estou tentando implementar um algoritmo PID básico em um Leonardo do Arduino para misturar água quente e fria da torneira usando válvulas servo-controladas. O objetivo é manter a temperatura o mais próximo possível de um ponto de ajuste. Especialmente importante é impedir que a temperatura de saída ultrapasse o ponto de ajuste para proteger o usuário de queimaduras. Secundariamente importante é obter a temperatura perto do ponto de ajuste o mais rápido possível.
Para pequenas mudanças de temperatura, uma implementação padrão do algoritmo PID parece funcionar bem. Mas não sei explicar os longos atrasos que podem ocorrer ao esperar que a água quente atinja a válvula, pois esses atrasos são muito mais longos do que os atrasos padrão após alterar as posições da válvula.
Obviamente, dependendo do comprimento da linha de água quente e do tempo desde o último uso da água quente, pode levar várias dezenas de segundos para que a água quente alcance a válvula; portanto, durante esse tempo, a temperatura da água permanece razoavelmente constante a uma temperatura baixa e a válvula de água quente logo abre 100%. O componente integral começa a acumular um grande valor de erro.
Quando a água quente finalmente atinge a válvula, a temperatura detectada aumenta muito rapidamente para a temperatura máxima da água quente. Devido ao grande erro integral, a válvula de água quente é mantida em 100% por um longo tempo após a temperatura exceder o ponto de ajuste, devido à espera que o valor integral seja reduzido para níveis normais. Assim, o resultado é a temperatura máxima da água por vários (dezenas) de segundos.
Não sei como explicar esse possível atraso. Nesse caso, seria aconselhável definir um limite superior (e inferior) no valor integral do erro, a fim de limitar o tempo máximo de resposta? Isso parece derrotar o objetivo do componente integral e ainda imporia algum atraso após atingir o ponto de ajuste.
Ou existe uma maneira melhor de lidar com alterações rápidas de entrada após um longo atraso?
Obrigado por qualquer conselho!