Sou novato no ARDUINO, maois preciso de um Termostato, que ligue em uma determinada temperartura e desligue apos ela reduzir novmente a temperatura ate o indicado.
Bom dia, quando disse instável seria entre a variação de temperatura se ela esta definida entre armar em 30 Graus e a temperatura fica alternando entre 29,99 e 30 ele fica ligando e desligando o led.
Mais continuando mexer aqui eu alterei o tempo de leitura para 30 segundos assim ele não varia tanto!
Deverias guardar as ultimas 10 amostras (com intervalos de algumas milésimas de segundo) e fazer a média entre esses 10 valores, assim não vais ter estrilhos
marcosxp:
Bom dia, quando disse instável seria entre a variação de temperatura se ela esta definida entre armar em 30 Graus e a temperatura fica alternando entre 29,99 e 30 ele fica ligando e desligando o led.
Isto é assim porque o código está feito desta forma:
if (temperatura >= 30) digitalWrite(led, HIGH);
else digitalWrite(led, LOW);
Isto está errado e não deve nunca ser feito assim. Até controladores PID têm histerese.
Fazer uma média das temperaturas não resolve o problema. Pode minimizá-lo, mas não o resolve pois a temperatura pode passar de 29.99 para 30.0 e de volta abaixo de 30 com qualquer que seja o sensor.
Para resolver isto implementa-se uma histerese desta forma:
#define HISTERESE 1.0 // 1 grau de histerese.
#define SETPOINT 30.0 //setpoint de 30 graus.
if (temperatura <= SETPOINT) digitalWrite(led, HIGH);
if (temperatura < (SETPOINT + HISTERESE)) digitalWrite(led, LOW);
Depois dependendo da estabilidade do sensor poder-se-á ajustar a histerese para um valor menor ou maior.