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. Olá. Eu sou o Costa, moro no Porto , Portugal.
    O meu passatempo é a eletrónica, na programação sou um principiante.

    Caro Claudio ,devo felicitá-lo pela sua bondade em compartilhar estes, excelentes, projetos e sua explanação pormenorizada.
    Devo também dizer que, pesquisei na net e não encontrei “material”, assembler, tão didático quanto o seu.
    Quanto a este projeto, ao gravar o programa no pic,uso o winpic e o programador é uma variação do Tait programmer,fabrico caseiro,grava muito bem os pics 16f84a, 16f628a, 16f877a, apresenta o seguinte erro:
    Info: Loading definitions for “PIC16F676” from C:\Programas\WinPic\devices.ini .
    Info: PIC16F676 added by Rich Heslip, merged 2004-08-07
    Couldn’t find “devices\PIC16F676.dev”, please borrow/copy from MPLAB !
    Initialising PIC-Programmer: Success.
    Testing: delay(500ms) took 0.50 seconds, timer_freq=2800.8900 MHz … ok
    Programming…
    Erasing (“bulk” or “chip”) …
    Oscillator calibration word looks bad (0x003FFF) !
    Programming and Verifying CODE, 0x000000..0x0002BC
    Warning: using default OSC CALIB word instead of 0x003FFF .
    Verify Error: 000000: read 00342B, wanted 002856
    Verify Error: 000004: read 003FFF, wanted 000009
    Verify Error: 000005: read 003FFF, wanted 0000A6
    Verify Error: 000006: read 003FFF, wanted 000833
    Verify Error: 000007: read 003FFF, wanted 00008A
    Verify Error: 000008: read 003FFF, wanted 000826
    Verify Error: 000009: read 003FFF, wanted 002011
    Verify Error: 00000A: read 003FFF, wanted 003E00
    Verify Error: 00000B: read 003FFF, wanted 001903
    Verify Error: 00000C: read 003FFF, wanted 000008
    Verify Error: 00000D: read 003FFF, wanted 00225D
    Verify Error: 00000E: read 003FFF, wanted 000AA6
    Verify Error: 00000F: read 003FFF, wanted 000826
    Verify Error: 000010: read 003FFF, wanted 002809
    Verify Error: 000011: read 003FFF, wanted 000082
    Verify Error: 000012: read 003FFF, wanted 003420
    Verify Error: 000013: read 003FFF, wanted 003450
    Programming aborted after 17 errors.
    Programming DATA, 0x002100..0x002103
    Verify Error: 002101: read 000048, wanted 000090
    Verify Error: 002102: read 0000FF, wanted 000001
    Verify Error: 002103: read 0000FF, wanted 00002C
    Restoring BANDGAP calibration bits for CONFIG-WORD
    Programming CONFIG, 0x002000..0x002007
    Verify Error: 002007: read 003E00, wanted 003FC4
    ERROR: Programming FAILED !

    Se pudesse me elucidar.
    Aqui fica, o meu muito obrigado.
    Atentamente
    R. Costa Eusébio

    1. Olá Costa!
      Obrigado por suas observações apreciativas sobre o blog. Quanto ao seu problema, note a linha ‘Info:’ que diz:

      Info: Carregando definições para “PIC16F676” de C: \ Programas \ WinPIC \ devices.ini.
      Info: PIC16F676 adicionado por Rich Heslip, adição em 2004-08-07
      Não foi possível encontrar “dispositivos \ PIC16F676.dev”, por favor, emprestar / copiar do MPLAB!

      O WinPic não conseguiu encontrar o arquivo de definições para o pic 12f675. Não sei dizer porque está faltando.
      Sugiro que tente reinstalar o WinPic800 novamente e então tente gravar o pic.

      Adicionalmente, se algum leitor deste blog já passou por esta situação, se desejar, poderá dar sugestões para a solução do problema, as quais serão muito apreciadas.

      Cláudio

      1. Olá Cláudio.
        Desejo-lhe, muito bom dia.

        Fiz o que você sugeriu.
        Problema resolvido.

        E,como nunca é demais mostrar gratidão,
        mais uma vez lhe fico grato pela sua gentileza e disponibilidade.

        Atentamente:
        R. Costa Eusébio.

  2. Prezado Claudio, quero lhe agradecer por toda a atenção e ajuda. O projeto já esta funcionando em minha aplicação. Mais uma vez obrigado!

    1. Olá Rodney! Parabéns, e sucesso em suas aplicações. Caso tenha algum ‘projetinho’ que queira compartilhar conosco, fique a vontade em enviar!
      Cláudio

      1. Prezado Claudio, pintou uma dúvida após alguns dias utilizando o projeto. Eu percebi que quando ligo o dispositivo e a temperatura ajustada para ligar for menor que a temperatura de leitura, quero dizer a temperatura ambiente, ele não arma o relé. O relé só é acionado quando coloco a temperatura de ligar igual a temperatura ambiente ou se for maior(quando ele alcançar a temperatura ele arma). Quanto ao ajuste de desligar esta funcionando perfeitamente. Eu não sei se o problema esta na programação ou se fiz algo de errado. Desde já agradeço a atenção.

        1. Olá Rodney!
          Montei em protoboard para testar isto, e com o hex original não procede o comportamento mencionado. Verifique alguma possível alteração que você tenha feita no código.
          Cláudio

  3. Prezado Claudio eu consegui montar o gravador do PIC e testei no winpic800. O programa detectou o Pic e nos testes que realizei deu tudo ok. A minha dúvida é que o código quando baixo do fórum vem para mim como TXT. De qualquer forma carreguei ele no winpic800, mas quando fui gravar deu o seguinte erro (erro de verificação no endereço 0x000000 verificando:0x284A lendo:0x3fff). Não sei o que tem de errado. Você pode me ajudar. Desde já agradeço!

    1. Olá Rodney!
      Isto significa que não conseguiu gravar o pic. Verifique as ligações do programador ao pic. Certifique de alimentar o pic com 5 volts (vcc e gnd). A fonte do programador tem que ter no minimo 13 volts para produzir a tensão correta de programação no pino ‘vpp’ (4). Tente ler o pic, mas ligando o pino pgd(dado) ao gnd e veja se está lendo tudo ‘0000’. Depois deixe sem ligar este fio e leia o pic e veja se está dando 0xff em tudo. Se não acontecer o mencionado, tem erro de conexão, ou instalação do Winpic, ou mesmo, o Windows poderá não estar liberando a porta serial . Lembre-se que o WinPic tem que ser configurado para PROGRAMADOR JDM e Vpp invertido para funcionar. Para saber quais pinos ligar em cada pic, baixe os datasheet dos mesmo e veja em que pinos devem ser ligados os mesmos, pois isto muda de pic para pic. No pino pino 16f676 o pino 4 é o ‘vpp’, o pino 12 é o clock, o pino 13 é o dado, o pino 14 é o VCC (5 volts) e o pino 1 o gnd.
      Cláudio

      1. Prezado Claudio, ainda não desistir do projeto. Me tira uma dúvida. olhando o datasheet do 16f676 o VDD esta no pino 1 e o VSS esta no pino 14. Diferente do que você me falou. Com isso fiquei na dúvida e não sei se ligando errado posso danificar o projeto ou até mesmo queimar o PIC. Outra coisa essa fonte externa de 5V posso tirar de uma USB ou tem que ser externa como a de 13V? O meu led acende direto quando ligo a fonte de 13v e pisca mais forte quando peço para o WinPic ler o PIC. Isso é normal? Abraço!

        1. Olá Rodney!
          Ops! É isto mesmo, siga a pinagem do datasheet, pois de cabeça, sempre me engano. A inversão realmente fará esquentar o pic, conduzindo os diodos de proteção das portas e poderá danifica-lo permanentemente. Já cheguei a ligar invertido brevemente e constatei isto, apesar de ter sobrevivido. Na hora de programar, seria bom você reduzir os 13 volts para 5 com um regulador 7805. Não sei se teria problemas misturando alimentação, mas é um bom prato para confusão. No uso, poderá usar os 5 volts do USB. Durante o período de leitura/escrita é normal o led ficar piscando, pois o programador liga e desliga a tensão de programação no pino vpp.
          Cláudio

  4. Prezado Claudio, consegui montar o circuito, mas estou com um problema, pois o display acende, mas aparece apenas quadradinhos na linha debaixo, fiz medições nos pontos de teste a o Lm35 esta funcionando direitinho. Pode me ajudar quanto ao problema do display? Desde já agradeço!

    1. Olá Rodney!
      Estes ‘quadradinhos’ podem indicar que não houve uma ligação correta com o pic. Verifique algum erro de ligação entre o LCD e o PIC, conferindo a ligação pino a pino. Lembrando que você deverá já ter carregado o arquivo hex no pic antes de tentar fazer funcionar.
      Cláudio

      1. Prezado Claudio, obrigado pela resposta. Na verdade nunca trabalhei com PIC e estudando melhor vi que o mesmo tem multi funções e precisa ser programa para a qual você deseja. Vou ter que criar o gravado para o PIC e gravar o arquivo HEX que você disponibiliza no fórum. Abraço!

        1. Olá Rodney! Não se preocupe, que programar o pic é uma operação rápida e simples. Você necessitará de um software programador em seu PC, como o WinPic (gratuíto) e também um hardware programador simples que poderá usar o “SIMPLES PROGRAMADOR DE PIC‘ deste blog. Depois, com o hardware ligado ao pic e alimentado, e a conexão na porta serial (DB9) ligada do programador ao PC, basta abrir o WinPic e escolher o hex para esta montagem e clicar em programar. Em segundos será feita esta programação. Existe também a venda, vários programadores profissionais e também os caseiros (como o JDM), para o pic. Caso faça apenas esta montagem, poderá montar um programador em 5 minutos usando um protoboard e poucos componentes (use o esquema do simples programador e dispense a chave multipla, ligando direto no pinos do pic). Não desista!
          Cláudio

  5. Prezado Claudio, seu projeto é perfeito para as minhas necessidades. O único problema é que moro no Rio de Janeiro e as melhores lojas de eletrônica aqui não vendem os principais componentes para o projeto. Minha pergunta é, você tem esse projeto pronto para venda? caso não você me indica algum site de venda de componentes confiável. Desde já agradeço!

    1. Olá Rodney!
      Os artigos aqui postados são de caracter didático e não tenho arranjo para comercializar kits ou componentes. Existem várias empresas que comercializam na Internet e são sérias. Verifique a opinião de usuários da internet sobre isto, e tome a sua decisão.
      Cláudio

      1. Prezado Claudio, muito obrigado pela sua atenção. Eu consegui achar aqui no RJ uma loja que tinha todos os componentes. Gostaria de tirar uma dúvida do esquema, pois não consegui identificar que componente é esse. No pino 13 do PIC antes de passar pelo resistor de 75 ohms tem um componente descrito 1/15 o que é isso? Desde já agradeço.

        1. Olá Rodney! O componente em questão é um capacitor eletrolítico de 1 microfarads com tensão de trabalho de 15 volts .
          Cláudio

Comments are closed.

Back To Top