Boa noite, Vini!
Então, concordo com o Guilherme e o Luis. Um processo de aquecimento através de serpentinas e/ou resistência é um dos que mais se adéqua ao falho conceito de "processo de primeira ordem" (que são mais teóricos que práticos). O controle da temperatura de um fluido em um equipamento com elementos de alta capacitância, em teoria, deveria apresentar uma variação menor! Mas, para ser justo contigo, acharia difícil que atingisse a perfeita estabilização do processo de aquecimento, afinal, o atuador utilizado apresenta-se como uma "válvula ON/OFF" e de nada adianta controlar um sistema com PID se sua saída não é analógica. O seu meio de controle apresenta um funcionamento semelhante a um ar condicionado e seu termostato, deveras mais arcaico que um PID. Quem sabe se, atuando na corrente fornecida à máquina através de uma resistência variável, você não consiga melhorar o sistema?
Também gostaria de adicionar como adendo que, teorizando uma fórmula matemática que não exija o uso de integrais e derivadas (justamente a restrição que temos usando arduino), o sistema de controle PID resulta na fórmula: Kp * e + KP * e * Ki * Tempo de erro + Kp * e * Kd * Velocidade de erro. Pelo que é perceptível na linha de código, você não considera o tempo de erro, mas sim o tempo do loop, ignorando se houve ou não erro (ainda assim é funcional, afinal, apresentando erro zero, a correção integral será zero, bem como erro negativo resultará na diminuição da atuação e erro positivo em seu aumento); no entanto, o meio de controle derivativo que me pareceu um pouco menos verossímil. Num sistema PID, creio que ficaria melhor o seguinte:
void loop () {
erro = setpoint - leitura;
// resto do código
d = kD * (erro - erro_anterior) / delta; //é permissível ignorar o valor do kP se o seu kD já o traz incluso
...
erro_anterior = erro;
}
Mas enfim, seu sistema de controle (sem uso do tempo e velocidade de erro) realmente foi capaz de regular a temperatura, afinal, via de fato, o tempo morto de processos térmicos é gigantesco; mas um processo como seguidor de linha PID vai exigir que a velocidade de erro e o tempo de erro sejam considerados (afinal, apresentam constantes deltas erro em um curto intervalo de tempo (como por exemplo ao detectar uma curva de 90°)). Caso aceite o desafio, gostaria de sugerir que mude seu meio de atuação para uma resistência variável, controlando a corrente, e não o tempo de atuação através de um relé, afinal, como eu mesmo disse, é um sistema de altíssimo tempo morto que, ao passo que te serve de ajuda (não requerendo o PID ao pé da letra), te serve também de atrapalhador, uma vez que a variação da temperatura vai ser medida "séculos" depois da sua atuação.
Caso queira ajuda nas linhas de código, me coloco à disposição!