FAÇA UM SIMPLES TERMOSTATO ELETRÔNICO COM UM PIC 16F676 (SENSOR LM35)

Gostaria de controlar de forma automática a temperatura de seu aquário? Ou ainda, de um aquecedor de café? Ou quem sabe, de uma chocadeira de ovos? Então, você vai querer saber mais…

Existem muitas maquinas que trabalham com termostato interno: geladeiras, freeser, cafeteiras de padaria, ar condicionado, fornos, aquários, etc. Muitos usam laminas de bimetal (ferro de passar roupa), outros usam a expansão dos gases para pressionar um interruptor (geladeira) e ainda os que usam a eletrônica para o controle. A vantagem dos termostatos eletrônicos está na possibilidade de visualizar a temperatura e as facilidades de calibração.
Neste projeto didático, estamos usando um microcontrolador PIC 16F676 e um sensor LM35 para ligar/desligar um relé de carga. Este relé poderá acionar inúmeras cargas, dependendo da necessidade do hobista.
Veja o esquema elétrico abaixo:

Em princípio, não difere muito do PIC_TERMOMETRO, exceto pelas chaves de controle e rele adicionado.
Ao ligar, aparecerá o seguinte no display:

| PIC_TERMOSTATO |
|LARIOS.TECNOL.WS|

E após alguns instantes, vai para tela de trabalho, como abaixo:

|TEMP= 30.4Cº ON |
|L= 28.4 D= 32.5 |

Onde, a primeira linha do LCD, indicará a temperatura atual do sensor e a situação do relé:  ligado ou desligado. Na segunda linha, a letra “L” indica a temperatura que irá ligar o relé e a letra “D”, a temperatura que irá desligar o relé. No pino 2 do PIC, foi colocado um botão para fazer incremento de temperatura (up) e no pino 3, o botão de decremento (down). Quando apertamos ‘up’ irá incrementar e apertando ‘down’ irá decrementar os dígitos (da função “L” =  ligar abaixo desta temperatura). Para ajustar a função “D” (desligar acima desta temperatura) , o botão ligado ao pino 4 (func) deverá ser acionado antes do botão, e mantê-lo pressionado, enquanto se aciona o botão ‘up’ ou ‘down’. O incremento na função “L” ocorrerá até o seu valor ser igual ao da função “D”. Depois, para de incrementar, mesmo com botão pressionado. Sempre o valor ajustado na função “L’ será menor ou igual ao valor ajustado na função “D”, nunca superior.
Os fios que ligam o sensor LM35 devem ser preferivelmente curtos para evitar interferências que possam gerar instabilidades na leitura. Foi colocado um filtro, com um resistor de 75 ohms em série com capacitor de 1 uF, conforme sugestão do datasheet do componente.
No ponto de teste PT1, poderá ser colocado um voltímetro de precisão para ler a temperatura para fins de calibração. A cada 10mVolts corresponderá a um grau centígrado. No ponto de teste PT2, deverá ser colocado também o voltímetro e ajustado no potenciômetro para obter 2,048 volts, em relação ao GND. Este potenciômetro, deverá ser preferencialmente do tipo ‘multivoltas’, o que facilitará em muito a calibração desta tensão.
As regulagens são salvas nas primeiras posições da EEprom interna do PIC. Assim, mesmo que acabe a energia, não será perdido este valores, sendo recuperados da EEprom, na ocasião da reinicialização.
O relé de carga tem bobina para 5 volts, sendo seus contatos para 10 a 15 amperes (dependendo da sua aplicação, poderá ser alterado).
A fonte de alimentação poderá ser feita com um pequeno transformador de 110/9 volts, retificadores, capacitores e um regulador 7805 para obter os ‘regulados’ 5 volts.

Abaixo temos a primeira sugestão de uso: Controlar a temperatura de um aquário !

Deverá ser usada as resistências apropriadas para aquário nesta aplicação e tomar todas as medidas de segurança e isolação de fios.
O LM35 deverá ser soldado a 3 fios flexíveis de comprimento suficiente para chegar a placa. Depois, este sensor, já com os fios ligados, deverá ser colocado em um pequeno tubo de ensaio (de vidro) e preenchido com cola resistente a água (silicone por exemplo). O tubo de ensaio, com o sensor em dentro, deverá ficar mergulhado dentro do aquário.

A próxima sugestão: Controlar a temperatura de uma chocadeira !

Poderá ser usado um conjunto de lâmpadas para prover o calor necessário ao ambiente dos ovos a serem chocados.
Deverá ser pesquisado qual é a temperatura ideal para esta aplicação, visto ser muito critica.

Uma sugestão final: Aquecedor de cafeteira

Também, deverá ser usado resistências ‘blindadas’, com aterramento em toda a estrutura metálica, visando a segurança do operador deste equipamento. O relé nesta função, deverá ser bem dimensionado, ou ainda, faze-lo acionar um ‘contator’ elétrico adicional.
Obs: Este material é publicado com objetivos didáticos. Poderá estar sujeito a bug’s ainda não detectados. Esta montagem foi realizada e testada apenas em protoboard.
Visto que está sendo fornecido os arquivos do programa, cada hobista poderá fazer as alterações que julgar necessário, em conformidade com as suas necessidades. Visto que algumas sugestões envolvem riscos de choque elétrico, cada montador assumirá seus próprios riscos de segurança.
Caso queira uma versão com display de 7 seguimentos, veja este link.

Clique abaixo para visualizar o arquivo ASM da primeira versão:
PIC_TERMOSTATO_ASM

Clique abaixo para visualizar o arquivo HEX da primeira versão:
PIC_TERMOSTATO_HEX

Poderá baixar estes arquivos com terminação ‘.asm’ e ‘.hex’, na pasta abaixo:
PIC_TERMOSTATO_V1_FILES

Em 08/02/2012 foi feita uma alteração, com aprimoramento na velocidade de incremento do ajuste inicial, em 3 etapas: lento, médio e rápido, mantendo-se simplesmente apertado o botão de ajuste. Adicionalmente, a frase ‘off’ foi substituída por ‘des’ e ‘on’ por ‘lig’ (padronizado para português).

Poderá visualizar o arquivo ASM desta segunda versão clicando abaixo:
PIC_TERMOSTATO_V2_ASM

Poderá visualizar o arquivo HEX da segunda versão clicando abaixo:
PIC_TERMOSTATO_V2_HEX

Poderá baixar os arquivos da versão 2, com terminação ‘.asm’ e ‘.hex’, clicando na pasta abaixo:
PIC_TERMOSTATO_V2_FILES

Segue abaixo, pasta para baixar, com versão 3 de 13/03/2014, com aprimoramentos citados acima, acrescentando mais estabilidade na leitura:
PIC_TERMOSTATO_V3

Segue a placa para circuito impresso, sendo gentileza do Agnaldo ‘Foxcom’ (dúvidas: agnaldofraga@hotmail.com):
TERMOMETRO 676 LCD PCB FOXCON

Em 21/03/2021 foi postado a versão 4, reescrita em linguagem “C” para CCS C Compiler:

PIC_TERMOSTATO_V4_ZIP

Manuais:
datasheet Pic16f676
LM35

Curiosidades:
A ventilação do cupinzeiro
A longa soneca dos ursos
Cuidado com alimentos
Fim do mundo – Do que as pessoas tem mais medo?

Outros assuntos:
Ensine seus filhos bons principios com atividades de colorir
Como posso ter ânimo para exercitar
Entrevista com um bioquímico
Como posso controlar meu peso?
Como reagir a um assédio sexual?
Como lidar com os sogros?
Converse com seus filhos sobre sexo
Desempenhem bem seu papel de pais
Como lidar com dívidas
Como parar de discutir com seu conjuge
Como sobreviver ao primeiro ano de casamento

Até o próximo artigo!!!

112 comments on “FAÇA UM SIMPLES TERMOSTATO ELETRÔNICO COM UM PIC 16F676 (SENSOR LM35)

  1. claudio fiquei impressionado com este termostato com pic 16f676 e lcd tem como mudar ele para o pic 16f628? na biblioteca do meu compilador nao tem este o 16f676.grato aliás to impressionado e com todos estes artigos rsrsr.abraço

    1. Olá José !
      O PIC 12f676 tem internamente um conversor analógico digital, sendo que no pic 16f628a não dispõem deste hardware interno, impossibilitando a implementação deste termostato.
      Cláudio

    2. Olá José!
      Desconsidere o email anterior, pois confundi com outro assunto.
      Quanto a usar 12 leds por seguimento, sendo que cada led tem um resistor de 150 ohms, teremos por volta de 20 mA por led. Multiplique por 12= 240 mA por seguimento, pois estão em paralelo, certo! Cada display necessitará então, de 7 x 240 mA= 1,68 A. Agora, você montará 5 display x 1,68A = 8,4 Amperes !!!! Haja fonte para isto, não é verdade!
      No entanto, 8,4 Amperes x 5 volts = 42 watts ( potencia pequena). Qual a solução ?
      Usar tensões maiores para obter correntes menores. Se fosse colocado 12 leds em série, obteremos 2,2v (queda da tensão do led) x 12 = 26,4 volts. Uma fonte de 30 volts poderia ser usada. Assim, ficaria: 30 – 26,4 = 3,6 v e o resistor limitador será: 3,6v/0,02Amp = 180 ohm 1/4 w. Acionando 7 seguimentos a 20mA = 140 mA por display. Usando 5 display, necessitaria de :
      140 mA x 5 = 0,7 Amperes. Este valor seria mais razoável do que usar 8,4 Amperes, não é mesmo!!!

      Claudio

    3. Olá José!
      Eu me esqueci que o circuito é multiplexado. Assim na versão de leds paralelos terá 1,68 Amperes com todos seguimentos acesos e na versão série com 30 V , terá 140 mA.
      Note que a potencia dissipada será menor com 30 V. (1,68 x 5 = 8,4 W , no caso paralelo e 30 x 0,14 = 4,2 W, no caso de led série em 30 v).
      Cláudio

        1. Olá José!
          Existem vários, mas alguns não são facilmente encontrados no comercio. Tente por UDN2981, M63800, M54561P, sendo estes do tipo PNP.
          Cláudio

  2. :mrgreen: Olá Claudio, ja enviei o pcb desta versão com lcd ao seu e-mail, caso queira disponibilizar ao pessoal fique a vontade….

  3. :mrgreen: Olá claudio, Bem explicado, vou analizar o fonte para que redusa esta piscada, o pcb ti envio assim que estiver 100% o esquema, fiz algumas alterações por isto que que nao envieia ainda para vc ok. valeu ai pelas dicas, abraços.

  4. ❓ Olá claudio. Fiz o que vc me surgeriu ai que o display nao funciona mesmo, ja testes com mais de uma marca e fica da mesma forma, o que ficou piscando menos foi alterar o valor=
    movlw .200
    call WAIT_uS

    para=
    movlw .6
    call WAIT_uS

    mesmo assim da para perceber quando atualiza os caracter da a piscada.
    Vc teria alguma outra surgestão, valeu ai pela atenção ok.

    1. Olá Agnaldo! Alguns comandos do lcd exigem mais delay que outros, e pode variar de fabricante. Acredito 6 useg foi o menor valor que você testou, que o Lcd ainda funciona corretamente. Este é o limite, então. Para um projeto didático já está bom. Mas para um projeto profissional, talvez teriamos que alterar as rotinas de apresentação, como manter certos caracteres e trocar apenas o resultado. Também pensar em fazer todas as conversões, salvar na ram e apresentar em uma única sequencia de envio, etc (ou seja, refazer o código até achar o que agrada). Tente entender como o código asm funciona e faça as modificações que, a seu ver, possam melhorar o desempenho (código free).
      Cláudio

  5. 😛 Olá claudio, o pcb esta pronto e ja montei, aqui em meus testes observei que acada leitura concluida da temperatura o lcd pisca os caracter, ja tentei diminuir o tempo de leitura mais ainda continua, o que vc me sujere ai para o display para piscar a cada atualização. abraços,,,

    1. Olá Agnaldo!
      A piscada tem que ver com o tempo do pulso de clock do “E” do lcd. Em desenvolvimento, coloco um tempo maior pois alguns lcd não operam bem em tempos rápidos. Mas, tente alterar a parte do código asm conforme abaixo, descomentando o primeiro ‘LcdPulse_E’ e comentando o segundo:

      ;LcdPulse_E
      bsf LCD_E ;Enables LCD
      NOP
      NOP
      NOP
      NOP
      bcf LCD_E ;Disabled LCD
      return

      LcdPulse_E bsf LCD_E ;Enables LCD
      ; movlw 1 ;Wait 1ms
      ; call LcdDelay
      movlw .200
      call WAIT_uS
      bcf LCD_E ;Disabled LCD
      ; movlw 1 ;Wait 1ms
      ; call LcdDelay
      return

      Claudio

Comments are closed.

Back To Top