Você está na página 1de 6

SEL629 Aplicaes de Microprocessadores I

Prof. Responsvel: Marcelo Andrade da Costa Vieira 05/06/2013

PRTICA 4 Termmetro Digital


Beatriz Midena Capelli Jlio Cesar Simes Mathias no. 7243230 no. 6445481

Introduo
Essa prtica tem como objetivo a implementao de um termmetro digital com os perifricos display de LCD, resistor de potncia (ligado entre VCC e GND para gerar aquecimento) e sensor de temperatura LM35 do Kit PIC Genios. O sensor de temperatura LM35 est ligado no canal analgico 2 (RA2), e gera um valor de 10 bits (0 a 1023) nesse pino, correspondente temperatura que est medindo. Nesse caso, a temperatura do resistor de potncia. A ideia imprimir o valor de 10 bits no LCD e utilizar um termmetro externo para medir o valor em C correspondente feito isso para um nmero suficiente de pontos, traada uma reta que mapeia o valor de 10 bits em um valor em C. Encontrada a funo que descreve a reta, basta adicionar no cdigo esse clculo dentro de um loop infinito. Dessa forma, a cada lao, o valor gerado pelo sensor lido e a temperatura calculada e impressa no LCD.

Esquemtico
O esquemtico foi feito na ferramenta Eagle e pode ser visto na figura 1.

Figura 1 - Esquemtico do circuito utilizado

Clculos
Para determinar o valor da temperatura em C, tivemos que fazer vrias medies da temperatura utilizando um multmetro com funo de termmetro enquanto o valor gerado pelo LM35 (de 10 bits) era impresso no LCD. Com isso, geramos as relaes descritas na tabela 2.
Tabela 1 - Relaes entre valores de 10 bits e valores em C

VALOR DE 10 BITS 50 52 55 57 60 63 68 72 76 80 86 90 97

VALOR EM C 20 25 30 35 40 45 50 55 60 65 70 75 80

Com esses valores e a ferramenta Microsoft Excel, geramos um grfico de pontos, e com o Mtodo dos Mnimos Quadrados aproximamos esses pontos para uma reta. O resultado (pontos e reta) pode ser vistos na figura 2.

Figura 2 - Grfico dos pontos e reta aproximada

A funo gerada pelo Excel ao aplicar o mtodo a seguinte:

Resultados
O resultado foi perto do esperado, e 3 configuraes do LCD so mostradas na figura 3.

Figura 3 - Configuraes do LCD

Percebemos, porm, ao olhar para o grfico da figura 2, que os pontos encontrados se aproximavam mais de uma funo logartmica do que de uma reta (apesar de o esperado ser uma funo linear). Geramos, ento, o grfico da figura 4.

Figura 4 - Pontos e funo logartmica aproximada

A funo gerada pelo Excel a partir desse segundo grfico a seguinte:

Essa segunda funo se adapta melhor aos valores encontrados, porm, como era esperado que encontrssemos uma reta, a primeira funo (figura 2) foi mantida na verso final do cdigo.

Concluses
Conclumos que a prtica no muito precisa, pois existem vrios fatores que podem influenciar nas medidas, como a temperatura ambiente, posio do termmetro, sensibilidade diferente do termmetro externo e do sensor LM35, entre outros. Para reduzir os erros, seria necessrio realizar vrias medidas em diversas condies, para calcular uma mdia dos valores e chegar em um resultado melhor.

Apndice Codificao
sbit sbit sbit sbit sbit sbit sbit sbit sbit LCD_RS LCD_EN LCD_D0 LCD_D1 LCD_D2 LCD_D3 LCD_D4 LCD_D5 LCD_D6 at at at at at at at at at LATE2_bit; LATE1_bit; LATD0_bit; LATD1_bit; LATD2_bit; LATD3_bit; LATD4_bit; LATD5_bit; LATD6_bit;

sbit LCD_D7 at LATD7_bit; sbit sbit sbit sbit sbit sbit sbit sbit sbit sbit LCD_RS_Direction LCD_EN_Direction LCD_D0_Direction LCD_D1_Direction LCD_D2_Direction LCD_D3_Direction LCD_D4_Direction LCD_D5_Direction LCD_D6_Direction LCD_D7_Direction at at at at at at at at at at TRISE2_bit; TRISE1_bit; TRISD0_bit; TRISD1_bit; TRISD2_bit; TRISD3_bit; TRISD4_bit; TRISD5_bit; TRISD6_bit; TRISD7_bit;

char txt[] = "T = "; int leitura; char value[15]; float aux; void main() //an2 trisa trisd //rb3 trisb trisc { como entrada = 0b00000100; = 0; como entrada = 0b00001000; = 0;

//deslliga resistncia portc.rc5 = 0; //apaga leds portb portb.rb0 = 0; portb.rb1 = 0; portb.rb2 = 0; portb.rb4 = 0; portb.rb5 = 0; portb.rb6 = 0; portb.rb7 = 0; ADC_Init(); Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); //Iniciando LCD Lcd_Out(1,1,txt); Lcd_Out(1,11,"oC"); while(1) { //Aperto boto RB3 p/ (des)ligar a resistncia e acender um Led if (Button(&PORTB, 3, 1, 0)) { portc.rc5 = ~portc.rc5; portb.RB0 = ~portb.rb0; } leitura = ADC_Read(2); //equao linear aux = 1.26 * leitura - 38.03; //equao logaritimica //aux = 89.49 * log(leitura) - 327.84; FloattoStr(aux, value); // Clear display // Cursor off

//limita casas decimais xx. value[4] = '\0'; //atualiza valor no LCD Lcd_Out(1,5,value); } }

Você também pode gostar