domingo, 16 de janeiro de 2011

Termômetro PIC.

Salve salve galera, hoje venho com um simples projeto, existem vários desses projetos na internet já, porem eu optei por desenvolver a versão mais simples possível, para que todos tenha aceso as componentes e todos consigam montar com extrema facilidade.
neste projeto eu desenvolvi um termômetro capas de dizer a temperatura ambiente através de um display de LCD, para isso utilizo como sensor um LM35, e como uC PIC 16F877A, mito comum nos projetos e de extrema facilidade para o manuseio.


O microcontrolador.

Como microcontrolador eu utilizei um PIC 16F877A da Microchip  por ser muito completo, com 40pinos, sendo 33 pinos de I/O. Destes 33 pinos, 8 são do conversor Analógico Digital de 10-bit que podem ser usados para ler tensões de sensores de temperatura, umidade, etc.

Este microcontrolador ainda tem recursos como Timer0 com 8-bit para o timer e 8-bit para o prescaler, Timer1 com 16-bit para o timer/prescaler e pode ser incrementado durante o Sleep por um clock extreno, Timer2 com 8-bit para o timer-prescaler, 2 módulos de PWM(10-bit) com captura(16-bit) e comparação(16-bit), entre outros. Mas para este projeto não usarei estes recursos.






O sensor.

O LM35 é um sensor de precisão fabricado pela National Semiconductor, que apresenta uma saída de tensão linear relativa à temperatura em que ele se encontrar no momento em que for alimentado por uma tensão de 4-20Vdc e GND, tendo em sua saída um sinal de 10mV para cada Grau Celsius de temperatura.
O LM35 não necessita de calibração externa ou “trimming” para fornecer com exatidão, valores temperatura com variações de ¼ºC ou até mesmo ¾ºC dentro da faixa de temperatura de –55ºC à 150ºC.
Este sensor tem saída com baixa impedância, tensão linear e calibração inerente precisa, fazendo com que o interfaceamento de leitura seja especificamente simples, barateando todo o sistema em função disto.
Este sensor poderá ser alimentado com alimentação simples ou simétrica, dependendo do que se desejar como sinal de saída, mas independentemente disso, a saída continuará sendo de 10mV/ºC.
Ele drena apenas 60μA para estas alimentações, sendo assim seu auto-aquecimento é de aproximadamente 0.1ºC ao ar livre.
O sensor é apresentado com vários tipos de encapsulamentos, sendo o mais comum o TO-92, que mais se parece com um transistor, e oferece ótima relação custo benefício, por ser o mais barato dos modelos e propiciar a mesma precisão dos demais.
A grande diversidade de encapsulamentos se dá devido à alta gama de aplicações deste integrado.




Bom em seguida coloco uma foto de como ficou o projeto montado, simulado no PROTEUS, tambem vou disponibilizar um arquivo para dawnload com a simulação, o programa em .C, a biblioteca do LCD , tudo prontinho e super fácil de se montar em casa, em seguida apresento o diagrama elétrico:



Bom galera é isso por hoje, para obter todos os arquivos para a sua montagem >>>>CLICK AQUI.<<<<









2 comentários:

  1. amigo estou começando a estuda programaçao na net mesmo, ja faço algumas coisas, resolvi tentar fazer um projeto para teste de conhecimento, com o pic 18f452 que fucione assim 2 teclas para incrementar e a outra decrementar uma variavel e mostar no lcd com ponto decilmai ate tudo certo, ai resolvi ir mais longe salva esta variavel na eeprom e quando desligar o circuito ficar salva,e quando volta a ligar apareçer no lcd o ultimo ajuste,ja vi vrios ex: na net , ja olhei o help do mikroc e nada a 15 dias que estou nessa casso possa me da uma ajuda agradeço segue o codigo

    / LCDsbit LCD_RS at RE2_bit;
    sbit LCD_RS at RE2_bit; //'RS ligado no RE2
    sbit LCD_EN at RE0_bit; //'RW ligado no RE0
    sbit LCD_D4 at RD4_bit; //'D4 ligado no D4
    sbit LCD_D5 at RD5_bit; //'D5 ligado no D5
    sbit LCD_D6 at RD6_bit; //'D6 ligado no D6
    sbit LCD_D7 at RD7_bit; //'D7 ligado no D7

    sbit LCD_RS_Direction at TRISE2_bit;
    sbit LCD_EN_Direction at TRISE1_bit;
    sbit LCD_D4_Direction at TRISD4_bit;
    sbit LCD_D5_Direction at TRISD5_bit;
    sbit LCD_D6_Direction at TRISD6_bit;
    sbit LCD_D7_Direction at TRISD7_bit;
    //


    char valor[5] = "00.0";
    long teste ;


    void main() {
    INTCON2.RBPU = 0; //Habilita resistores Pull-Up internos
    TRISD = 3; //configura todos os pinos do portd como saída
    TRISE = 0; //configura todos os pinos do porte como saída
    ADCON1 =0b00000110 ;// todos os pinos digital
    Lcd_Init();


    Lcd_Cmd(_LCD_CLEAR);
    Lcd_Cmd(_LCD_CURSOR_OFF);
    Lcd_Out(1,1,"teste");

    EEPROM_Write(0,teste) ;

    delay_ms(20);

    teste = (EEPROM_Read(0));



    while(1){

    if (Button(&PORTa, 1, 100 ,0)){ //verifica tecla1.
    if (teste <=999)

    teste++;
    Delay_ms(100);
    }

    if (Button(&PORTa, 2, 100, 0)){ //verifica se a tecla2.
    if (teste>=1)

    teste--;
    Delay_ms(100);
    }

    valor[0] = (teste%1000)/100 + 48;
    valor[1] = (((teste%1000)%100)/10) + 48;
    valor[2] = '.';
    valor[3] = (((teste%1000)%100)%10) + 48;

    Lcd_out(1,13, valor);



    }
    }

    ResponderExcluir
  2. Boa tarde, é possivel introduzir um buzzer no circuito da maneira que o dispare para avisar sobre o aumento excessivo de temperatura?

    ResponderExcluir