(Resolvido) - Termostato com LM35 e ponteciômetro

Ola bom dia.
Preciso de ajuda com um termostato com LM35, potenciômetro a ligar um led.
O LM35 esta ligado ao A0.
Potenciômetro esta na A2.
Esta marcando as temperaturas certas o LM35, mas ao mexer no potenciômetro para especificar a temperatura ao lm35 ao chegar nos 35 graus pelo potenciômetro ele altera o valor do lm35.
Coloquei o código no pastebin.

http://pastebin.com/2NNMM3DV


Grato.

 

Exibições: 1618

Responder esta

Respostas a este tópico

Minha sugestão :

 ValorPot = analogRead (Pot);

 ValorBinario = map(ValorPot, 010230 , 70);

Oi JM, bom dia.

Ontem o LdG estava uma carroça, e não sei se você entendeu a minha orientação.

No seu código, em " void Potenciometro() " , você faz 2 leituras analógicas seguidas.

       valor = analogRead(LM35);               Duração da instrução 1us       Duração do processo de 13 a 260μs 

       Temp= ( 5 * valor * 100) / 1024;         Duração da instrução +- 3us                        

       ValorPot = analogRead (Pot);            Duração da instrução 1us       Duração do processo de 13 a 260μs 

       ...

       ...

Veja bem, você faz uma leitura alógica que o processo de ADC pode demorar até 260us, e em seguida

em mesos de 5us, você faz outra leitura analógica.

Mas como o processo anterior não terminou, ele irá afetar o resultado da leitura seguinte.

Informação na pag237 do datasheet do Atmega328

  24. Analog-to-Digital Converter
       24.1 Features
                  • 10-bit Resolution
                  • 0.5 LSB Integral Non-linearity
                  • ± 2 LSB Absolute Accuracy
                  • 13 - 260μs Conversion Time   <-<-<-<-----------------------------------

 ideia sugerida:

       valor = analogRead(LM35);                 Duração da instrução 1us       Duração do processo de 13 a 260μs 

       delayMicroseconds(300);                   Tempo de espera de 300us  para terminar o ADC     

       Temp= ( 5 * valor * 100) / 1024;          Duração da instrução +- 3us                        

       ValorPot = analogRead (Pot);             Duração da instrução 1us       Duração do processo de 13 a 260μs 

       delayMicroseconds(300);                   Tempo de espera de 300us  para terminar o ADC   

       ...

       ...

Sugiro fazer a mesma coisa aqui:

        void sensor() 

        valor = analogRead(LM35);

         delayMicroseconds(300);                                Tempo de espera de 300us  para terminar o ADC   

        Temp= ( 5 * valor * 100) / 1024;

  Depois dê um retorno dizendo se esta sugestão solucionou o seu problema.

Rui

Ola.
Obrigado pela ajuda, agora estou no trampo e aqui o site esta ok.
Ontem não estava entendendo nada de tanto lag, como disse parecia que estava em outra galaxia rs.
Eu fiz as duas leitura seguidas pois como separei por duas funções e não conseguia ler o valor do lm35 por esta em outra função, por isso a repeti.
E já testei tudo somente no void loop e da o mesmo.

uma duvida, você vai utilizar rele no seu termostato?

O lm35 sofre interferência do rele também, é bem chato, tentei fazer  e acabei optando usar um sensor ds18b20.

O Rui descobriu o problema !

Ola.
Acabei usando um sensor NTC10k e funcionou tranquilo !
Muito mais fácil e menos linhas de código !

Agora vó ver sobre o ln35.

Oi JM, bom dia.

Por gentileza, você pode postar o esquema que utilizou para ler a temperatura do LM35.

Post as ligações e o valor do potenciômetro também.

Quero fazer uns teste com seu esquema e com seu code.

Rui

 

Oi JM,

revendo o seu code encontrei algumas dúvidas.

1a. voce não definiu a entrada de A0:

""   int Temp, valor, LM35; // Variaveis para LM35 - Temperatura, gravar valor e porta A0 LM35  ""

O A2 voce definiu:

"" int Pot = A2, ValorPot = 0, ValorBinario = 0; // Variaveis para o potenciometro "" 

Outro problema:

Aqui voce testa :  if (valor > ValorPot)   valor comparado com valorPot

Mas valor é o valor de uma leitura analógica com 29oC, aqui o resultado de valor é:   Valor 58 Temp 28.

e ajustando o ValorBinario, que você mostra no LCD, em 30,  fica assim : ValorPot 772 ValorBinario 30.

Para que a igualdade aconteça, os valores ficam assim:   Valor 59 Temp 28 ValorPot 59 ValorBinario 2

Rui

Ola Rui.
Amanha postarei o esquema da ligação do circuito que usei com o LM35 e o Pot.
O ruim esta a conexão com a pagina.
Mas amanha posto tudo aqui !!

Ola Luis, obrigado pelas dicas.

Jorge, como também tenho interesse no termostato, fiz uns teste com led, ficou bom

http://pastebin.com/XQAjeek7

O problema é que quando a temperatura esta próxima do valor desejado, fica ligando e desligando, o certo seria por uma média de leitura do LM35.

Uma vez tive um problema com potenciômetro,Resolvido - problema LM35DZ + potenciômetro, a solução foi por um capacitor cerâmico de 22uf entre o pino GND e o Pino out do LM35, mas hoje utilizei um eletrolítico de 1uf e funcionou beleza, a sugestão dos 300us do Rui foi muito boa.

Só que com um relay o bicho fica muito doido.

Luis, vc colocar um intervalo entre as execuções, tipo um delay?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço