Termostato!

Boa noite pessoal!

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.

Achei este tutorial e montei http://webingenerale.com/index.php/articoli-e-giude/item/1-costruire-un-termostato-con-arduino, porem ele e muito instavel, alguem me sugere algo mais confiavel,

Este seria o ideal, Arduino - Projeto Termostato - YouTube, porem o meu e o UNO e sou meio leigo ainda, preciso do esquema de montagem.

Obrigado a todos !!

Eu uso o DS18b20.

Define instável...

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!

O que pode fazer para evitar isso é usar a média. Tira várias amostras da temperatura ao longo de um período e faz a média.

E para isso que serve algo chamado de histerese. A média dos valores ajuda, mas não resolve esse problema.

A histerese basicamente liga o led aos 30, mas só desliga por exemplo aos 28. Isso é aliás o verdadeiro funcionamento dum termostato.

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

Desculpem lá... mas não sabem ler...

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.

#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);

Penso que como está ira ligar e desligar de imediato.
Que tal assim:

if (temperatura >= SETPOINT) digitalWrite(led, HIGH);

if (temperatura <= (SETPOINT - HISTERESE ) digitalWrite(led, LOW);

Desta forma a zona entre os 29e os 30 fica com uma histerese de um grau

Ups... Pequena gralha... :blush:

Opa, valeu gente, vou testar aqui novamente com estas alterações, muito obrigado pelas dicas !!