Páginas

domingo, 25 de março de 2012

Termômetro tipo Bargraph com PIC

Este é mais um pequeno projeto utilizando PIC. Trata-se de um termômetro, na verdade um indicador de temperatura, por faixas, através de um arranjo de LEDs, tipo Bargraph. Este circuito pode ser útil para se medir variações de temperatura, e evitar sobreaquecimento ou congelamento de equipamentos, motores, ambientes, etc. Na verdade, este projeto é bem flexível, os leitores podem e devem altera-lo conforme as suas necessidades. A base do circuito é o PIC 16F268A, mas pode ser implementado em qualquer microcontrolador da família 16F que possua os módulos de tensão de referência e comparador analógico.


A sonda utilizada é do tipo NTC, mas qualquer outro tipo de transdutor de temperatura (PTC, PT100, LM35X, termopar, ...)  pode ser utilizado com pequenas alterações no código fonte.

Funcionamento: Basicamente o programa compara a tensão nos terminais do sensor (Vin-) com uma tensão gerada pelo módulo de referencia de tensão (Vref) do PIC, que pode gerar até 32 tensões distintas. O comparador analógico produz a saída: setando ou limpando o bit C2OUT, sendo assim, C2OUT=1 quando Vref >Vin- , ou C2OUT=0 quando Vref < Vin-.

Esquema módulo de comparação analógica do PIC utilizando também a tensão de referência interna.

Funcionamento do comparador. As áreas pretas indicam a faixa  de incerteza na saída.

COMPARAÇÃO: Considerando a lógica do NTC,  carregamos o maior valor possível no módulo de tensão de referência. Assim, se Vin > Vref(x) significa que a temperatura da sonda está acima da faixa, neste caso o processador vai acender o led da primeira faixa e depois mudar a Vref(x) para um valor mais baixo Vref(x-1). Depois compara novamente a entrada com a referência, sempre que Vin > Vref(x) um led acende e Vref(x) diminui para um valor menor até chegar a ultima faixa, quando todos os leds terão acendido. Se numa determinada faixa Vin < Vref(x) o processador vai apagar todos os leds correspondentes as faixas inferiores ao Vref(x) atual e manter os leds correspondentes as faixas superiores acessos.

Observe a tabela abaixo, ela evidencia o comportamento não linear do NTC, a curva exponencial porém, pode ser linearizada colocando-se um resistor de 10k em série, fazendo um divisor de tensão. a terceira coluna mostra isso. (plote os gráficos temperatura vs. resistência do NTC e temperatura vs. tensão no divisor).
Resposta do NTC e tensão de saída do divisor utilizando um resistor de 10k


Deve-se fazer ajustes no programa fonte para que ele funcione de acordo com a sua aplicação e faixa de monitoramento pretendida. Como exemplo de monitoramento da temperatura do motor do carro, pode-se selecionar alguns valores na faixa de 40 à 110°C.

Pode-se eventualmente incluir um sinal de saída, programar um pino de I/O do PIC para mudar de estado (alto/baixo) quando determinada faixa for atingida. Esse sinal pode ser utilizado para acionar (através de um relê ou SSR) um ventilador, resistência ou compressor para aumentar/diminuir a temperatura do equipamento que estamos monitorando ou simplesmente desligar a carga. Uma típica aplicação seria colocar a sonda junto ao bloco do motor do carro e quando o mesmo atingir determinada temperatura, o programa aciona a ventoinha do radiador automaticamente, forçando a redução da temperatura. Isso é muito útil em alguns veículos que não tem sensor de temperatura (apenas aquela luz que acende depois que o carro já ferveu!).

O bargraph utilizado foi do tipo catôdo comum, isto é: acende quando colocamos nível alto no pino de I/O e apaga quando colocamos nível baixo. Essa lógica pode ser facilmente invertida no código fonte caso o display disponível seja do tipo anôdo comum, ou invertendo os componentes caso seja utilizados LEDs discretos.  O número de Leds no arranjo é limitado apenas pela quantidade de pinos do microcontrolador, caso seja necessário, pode-se utilizar um processador com mais pinos ou alterar a programação para acionar decodificadores de 3 para 8.

Encorajo fortemente a inclusão de filtros, para reduzir os ruídos e evitar variações espúrias, principalmente quando se trabalha em algum nível próximo da faixa de incerteza do comparador.


Por enquanto vou ficar devendo o leiaute da placa de circuito. Ela não é difícil de rotear, uma vez que são poucos os componentes utilizados. Os conectores J1 e J2 mostrados no esquema, servem justamente para a conexão da fonte e do sensor, que não ficarão na placa e precisam aparecer no ARES quando geramos a leiaute da placa.


Ficha técnica:
Processador: PIC(R) 16F628A - microchip(TM)
Esquemático, simulação: Proteus 7.8 (ISIS + ARES)
IDE programação, gravação: MPLAB 8 (http://www.microchip.com/)
compilador C: CCS
Programador: ICD-2 - MultiPROG
As figuras 02 e 03 foram retiradas do datasheet do PIC

Arquivos:
Código fonte, esquemas, hex, etc..
-Termobar (escrito em assembly)
-Termobar_C (escrito em C)



21 comentários:

  1. amigo tem como me enviar o projeto em c para que eu possa da uma olhada estou tentado ler um ntc mais ate agora nao entedi como faiz o calculo meu email luciano_amorim29@yahoo.com.br

    ResponderExcluir
    Respostas
    1. amigo ate agora seu email ainda nao chegou o codigo fonte para ver se eu consigo enteder a logica da programaçao . eu faço os meus com mikroc mais nao estou conserguindo ler o ntc, email luciano_amorim29@yahoo.com.br

      Excluir
  2. Olá... Meu Nome é Talita estou desenvolvendo um projeto com um sensor UV, gostaria de saber como foi feita a programação. Se vc puder, envie para o meu e-mail: talitaars@hotmail.com

    ResponderExcluir
  3. Respostas
    1. Boa noite!

      Daniel poderia me enviar os arquivos ao fazer download esta faltando os mesmos divinotoledo@hotmail.com

      Excluir
  4. ola estou tentando montar um tem co mo vc me enviar o codigo fonte dele

    ResponderExcluir
  5. Este comentário foi removido pelo autor.

    ResponderExcluir
  6. Daniel,
    Tudo Bem meu xará? ,poderia me enviar o projeto com o código fonte em .c, vou construir este projeto, achei muito interessante gostei muito, parabéns !!
    daniel.oliveira33@fatec.sp.gov.br
    Abraço!!

    ResponderExcluir
  7. Boa tarde Daniel, poderia enviar o projeto e o codigo fonte para: siltechs2013@gmail.com
    VLW !!!

    ResponderExcluir
  8. Boa noite! Por favor me envie o código fonte, estou começando a programar e gostaria de montar um conta giros com indicação por barra de leds, acho que este teu projeto me ajudará a ter uma ideia de como começar. Att. Marcio. mrossi007@gmail.com . Obrigado.

    ResponderExcluir
    Respostas
    1. Boa tarde, arquivo enviado. No caso de um conta-giros, você vai precisar gerar uma base de tempo, em geral um cristal de 32768 Hz, ligado ao incremento externo do Timer1. Gerando uma interrupção por segundo, onde será calculado a quantidade de pulsos recebidos e a extrapolação para a marcação em RPM. Além disso a aquisição dos pulsos pode ser feita de forma digital (eu recomendo usar a interrupção externa do RB0), não sendo mais necessário a utilização do modulo comparador analógico. Do ponto de vista técnico são dois projetos bem distintos, em comum apenas o bar-graph.

      Excluir
  9. Boa Tarde. Seria possível enviar o código fonte deste projeto, estou me batendo para extrair a temperatura através deste pic, pois ele não tem o módulo analógico.
    Att. Daniel. schrsistemas@gmail.com

    ResponderExcluir
  10. Boa tarde. Para medir temperatura com precisão eu recomendo utilizar algum PIC que tenha conversor Analógico Digital (16F877A por exemplo). Como mostrado o pic 16F628A possui apenas o módulo de Comparador analógico, onde você vai conseguir apenas trabalhar por faixas de temperatura e não mostrar valores exatos. Estou enviando os arquivos por e-mail.

    ResponderExcluir
  11. Oi Daniel! Estou fazendo alguns testes com o LM35. Voce pode enviar o seu codigo fonte para mim fazer alguns testes? Se vc tiver o projeto no isis ajudaria bastante tambem.
    Obrigado. robson@oficinadomicropg.com.br

    ResponderExcluir
    Respostas
    1. Boa tarde Robson, estou tentando enviar os arquivos porém, seu servidor de domínio está negando o arquivo por conta do anexo.

      Excluir