Olá pessoal, quero compartilhar com vcs um projeto de termostato ajustavel via potenciometro para controlar a temperatura de ambientes diversos.

  esse projeto foi baseado num skech do cookbook onde era necessário configurar a temperatura de referencia via pc.  O funcionamento é  seguinte:

 ao configurar a temperatura pelo potenciometro, em 27ºc por exemplo, toda vez que a temperatura lida pelo LM35 chegar a 27ºc ou menos, a saida 9 será habilitada e o pino 13 acenderá para mostrar o estado do aquecedor, aquecedor este que deve ser ligado através de um transistor ao pino 9.

 sketch abaixo.

/*termostato ajustavel via potenciometro utilizando LM35, as saidas
* 9 e 13 são habilitadas quando a leitura feita pelo sensor é inferior
* ou igual a temperatura setada pelo potenciometro. o pino 13 deve
* ser ligado a um led para monitorar o estado do aquecedor e o pino 9
* deve ser ligado a um aquecedor através de um transistor.
*/

#include <LiquidCrystal.h>
const int numRows = 2;
const int numCols = 16;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

const int inPin = 0; // LM35 conectado no pino 0
const int potPin = 1; // potenciometro no pino 1
const int aquecePin = 9; // aquecedor ligado ao pino 9
const int ledPin = 13; // saida para aquecedor

void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
pinMode(aquecePin, OUTPUT);
pinMode(ledPin, OUTPUT);
}
void loop()
{
int value = analogRead(inPin); //valor lido no LM35
long celsius = (value * 500L) /1024; // OBS; caso precise calibrar o LM35 alterar o valor entre parenteses
lcd.setCursor(0,0);
Serial.print(celsius);
lcd.print(celsius);
Serial.print(" graus Celsius: ");
lcd.print((char)223);
lcd.print("C");

/* OBS nas linhas abaixo está escrito "celsius1" porque trata-se do
* valor regulado no potenciometro, caso seja retirado o numero 1
* a leitura mostrada na segunda linha do display será apenas repetição
* da leitura obtida pelo LM35.
*/

value = analogRead(potPin); //valor regulado no potenciometro
long celsius1 = (value * 500L) /1024; // 10 mV por graus C.
Serial.print(celsius1);
lcd.setCursor(0,1);
lcd.print(celsius1);
Serial.print(" graus Celsius: ");
lcd.print((char)223);
lcd.print("C");

if(celsius <= celsius1) //se celsius menor ou igual a celsius1 ligar pinos 13 e 9
{
lcd.setCursor(5,1);
digitalWrite(aquecePin, HIGH); // aquecedor no pino 9
digitalWrite(ledPin, HIGH); // led no pino 13
Serial.println("pino on");
lcd.print("On ");
}
else
{
lcd.setCursor(5,1);
digitalWrite(aquecePin, LOW); // aquecedor no pino 9
digitalWrite(ledPin, LOW); // led no pino 13
Serial.println("pino off");
lcd.print("Off");
}
delay(1000);
}

 pessoal, espero ter alguma serventia para alguem, resolvi postar aqui pq procurei por toda a rede e não encontrei nada que pudesse me atender, apenas termometros que faziam apenas leitura.

agradeço aos manos marcelo mosc e marcos daniel pela ajuda com os caracters estranhos que apareciam antes.

abraço a todos.

Exibições: 11998

Responder esta

Respostas a este tópico

 fala sérgio, montei esse projeto para controlar a temp do meu aquário, acredito que vc possa trabalhar com shield ethernet tbm, embora eu nunca tenha trabalhado com a mesma.

eu utilizo um potenciometro para controlar a temperatura de referencia, mas na minha tentativa anterior eu setava essa temperatura pelo PC, com a ethernet shield vc poderia controlar a temperatura tbm e não apenas monitorar.

experimente com essa versão da sketch.

//*termostato baseado no cookbook adaptado pra LCD ajustavel apenas via PC

#include <LiquidCrystal.h>
const int numRows = 2;
const int numCols = 16;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

const int inPin = 0; // sensor conectado no pino analogico 0
const int outPin = 13; //2; // saida digital
const int threshold = 28; // valor de referencia de temperatura
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
pinMode(outPin, OUTPUT);
}
void loop()
{
int value = analogRead(inPin);
long celsius = (value * 500L) /1024; // caso seja necessário calibrar o LM35 alterar o valor entre parenteses
lcd.setCursor(0,0);
Serial.print(celsius);
lcd.print(celsius);
Serial.print(" graus Celsius: ");
lcd.print((char)223);
lcd.print("C");
if(celsius <= threshold) //se celsius menor ou igual a threshold ligar pino 13
{
lcd.setCursor(0,1);
digitalWrite(outPin, HIGH);
Serial.println("pino on");
lcd.print("ligado ");
}
else
{
lcd.setCursor(0,1);
digitalWrite(outPin, LOW);
Serial.println("pino off");
lcd.print("desligado");
}
delay(1000); // delay de 1 segundo
}

nesse sketch não implementei saida para transistor apenas o pino 13 para monitorar o estado do termostato.

se sua intenção é ligar o termostato para aquecer um ambiente, é só usar do jeito que está, se quiser resfriar um ambiente é só trocar o sinal de menor por maior na frase if(celsius <= threshold) e trocar as linhas HIGH e LOW em

lcd.setCursor(0,1);
digitalWrite(outPin, HIGH);
Serial.println("pino on");
lcd.print("ligado ");


lcd.setCursor(0,1);
digitalWrite(outPin, LOW);
Serial.println("pino off");
lcd.print("desligado");

e tbm onde diz se o pino está ligado e desligado, essas ultimas info são apenas para mostrar no monitor serial e LCD.

mano, abraço e se puder ajudar em algo mais, conte comigo.

 sergio, me surgiu uma dúvida, como disse antes nunca usei a ethernet shield, pra setar o valor de referencia da sketch acima vc deve altera-lo na IDE do arduino. com a shield provalvelmente você vai precisar bolar um meio de tornar esse valor configuravel de alguma outra forma sem ser pela IDE.

Oi Erick, blz?

Muito legal !, mas me diga uma coisa, seu sistema funcionando no aquário ele fica ligando e desligando com muita frequência?

Provavelmente em ambiente aberto (ar) ele deve ficar ligando e desligando toda hr, porém como a água retem calor por mais tempo deve funcionar muito bem.

Geralmente esse tipo de controle ON OFF de temperatura costuma-se deixar a temperatura desajada como temperatura média..

Por exe vc quer em 27º então vc aquece até  28º e só retorna a aquecer quado chegar em 26º, Isso depende, claro da dinâmica do sistema.

Algumas perguntas..srsr

E o sensor(lm35) fica muito próximo do aquecedor?

A temperatura do aquário fica uniforme?

Seu aguario tem quantos litros?

Já mediu a taxa de aquecimento?

Qual potencia do aquecedor?

Vlew!!

 fala hugo, primeiro descupe minha demora em responder, estava trabalhando direto e muit cansado para entrar na net.

bom pessoal, nesse momento não estou usando esse termostato em meu aqua, tive problemas de oscilação com o lm35 no inicio e só conseguia setar a temperatura via PC, então baixou uma frente fria aqui no rio e no segundo dia apareceram peixes doentes, isso me forçou a comprar um aquecedor com termostato da marca JEBO, que tem se mostrado muito bom, o anterior colou ligado e cozinhou tudo, mas o termostato arduino funciona bem.

respondendo as perguntas:

 fica ligando e desligando com certa frequencia sim, devido a histerese do aquecedor e a circulação do aqua. por isso não é interessante montar o sistema com um relê, o melhor é um transistor. o tic 226 pode trabalhar com até 10A.

 o LM35 não é a prova d'agua, então temos que dar um jeito nisso, eu o revesti com silicone, mas cada um pode tentar a sua forma,

 com isso, perdesse transmissão de calor do meio para o sensor, alem do comprimento do cabo que vc irá usar, para compensar eu usei um termometro convencional e calibrei o LM35 alterando a razão tensão por grau celsiu " long celsius = (value * 500L) /1024; // caso seja necessário calibrar o LM35 alterar o valor entre parenteses "

a temperatura fica uniforme na medida do possível, próximo a superfície fica um pouco mais quente que no fundo, isso é natural.

meu aquario tem 160L, o aquecedor 150w e que taxa de aquecimento é essa?  áh, o aquecedor fica a dois palmos de distancia do sensor.

lembrando que cabem melhorias.

oO! o antigo termostato que vc tinha cozinhou seus peixes?? o loco!!!! kkkkkkkkkk

A taxa de aquecimento era pra saber a variação de temperatura com a aquecedor ligado e com o aquecedor desligado (cº/tempo) e assim observar o comportamento do sistema. Poderíamos tbm obter a relação de tensão e temperatura, enfim, tentar criar um modelo para desenvolver um sistema mais sofisticado com isso um controle de temperatura mais eficiente e economizar energia.

Se comportamento do sistema(aquário) for muito lento o controle ON/OFF funciona bem.

Esses aquecedores podem ser alimentados com CC??

Não estou querendo complicar o simples, só foi uma ideia mirabolante que me veio a cabeça...srrsrs

Abraço...

 o aquecedor que cozinhou meu aqua era chinez pra variar. esses aquecedores são são simples resistencias de niquel-cromo enrolados num tipo de baquelite, envoltas em areia ou lã acrílica para transmitir a temperatura, tudo isso num cilindro de vidro, pode ser alimentado em corrente contínua sim, mas a histerese seria maior e a tensão maior que a da rede, então não vale a pena.

 você pode encontrar aquecedores sem termostatos mecanicos de até 10w bem baratos para testes, aqui no rio R$10,00, mas todos tem que trabalhar sempre submersos, senão estouram o vidro.

fique a vontade para fazer experimentos mano.

erick de souza gomes Você poderia me passar o esquema de termometro pois a tempo to atras e não acho.

Agradeço: meu email é: fredmantec@yahoo.com.br.

Grato

mano, você quer apenas um termômetro ou um termostato? que o esquema elétrico tbm? cara nunca usei o fritzmam, esse programa que o pessoal faz o desenh esquematico. se vc quiser só o código tá aí:

//*termostato baseado no cookbook adaptado pra LCD ajustavel apenas via PC

#include <LiquidCrystal.h>
const int numRows = 2;
const int numCols = 16;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

const int inPin = 0; // sensor conectado no pino analogico 0
const int outPin = 13; //2; // saida digital
const int threshold = 28; // valor de referencia de temperatura
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
pinMode(outPin, OUTPUT);
}
void loop()
{
int value = analogRead(inPin);
long celsius = (value * 500L) /1024; // caso seja necessário calibrar o LM35 alterar o valor entre parenteses
lcd.setCursor(0,0);
Serial.print(celsius);
lcd.print(celsius);
Serial.print(" graus Celsius: ");
lcd.print((char)223);
lcd.print("C");

vlw mano.

Amigo...Olha eu quero o termostato que é mais interessante para mim.

Este marca a temperatura tb no lcd?

Olha se vc puder mande o desenho esquematico, pode ser no modelo convencional mesmo sem ser como o pessoal faz ai eu intepreto e vou tirando as duvidas com vc.

Obrigado pelo codigo e aguardo sua resposta.

Vlw.

 o transistor é um TIC226, dá uma conferida na ligação do mesmo. o desenho no fritzing não ficou muito bom.

a linha vermelha que entra e sai no TIC é de corrente altenada, não achei como desenhar uma tomada e digitar textos no programa.

erick de souza gomes Vlw mano...vou testar e posto o resultado.

Abraços

Parabéns pelo tutorial, eu tenho Arduino mega 1280, e estou com uma certa dificuldade em conectar com o LCD 16x04, ja baxei o datasheet, mas não sei a pinagem com o arduino. alguém ja conseguio?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço