Anda di halaman 1dari 7

Sensor de temperatura con LM35 y PIC16F873A

Hola! Como les va? El ao pasado, como trabajo prctico hice un sensor de temperatura con un LM35 y un PIC 16F873A. Quizas el cdigo y las imagenes ya las vieron porque las publiqu en Taringa! Si bien al proyecto le quedan cosas por agregarle, est bastante completo. Cuando hice este trabajo no encontre mucha info al respecto, asique voy a dejar todo, esquema electrico y el cdigo fuente del pic. Es un sensor de temperatura simple hecho con un LM35 y un PIC16F873A que expresar la temperatura medida en un display lcd de 162 (16 caracteres, 2 lineas) Usa una tensin de referencia (Vref) interna que es de 5 Volts. y el conversor es de 10 bits. El cristal que uso en este caso es de 10 MHz.

La siguiente imagen me la pas un profesor, muestra como alimentar el display. Yo en mi caso en vez de poner una resistencia de 4,7K puse un potenciometro de 5K para poder regular el contraste de los caracteres del display.

Foto del LM35:

Pines del PIC16F873:

Y ahora con lo importante! La programacin del PIC.

//IMPORTANTE!!! LA RESOLUCIN DEL CONVERSOR //ES DE 10 BITS, NO 8. //CONTROLAR YA QUE CON 8 LA CONVERSIN SERA ERRONEA.

1 #include <TermLM35-LCD.h>

2 3 #define LCD_ENABLE_PIN PIN_B2 4 #define LCD_RS_PIN PIN_B0 5 6 7 8


#byte portc = 07 #include <lcd.c> #define LCD_RW_PIN PIN_B1

9 10
void main()

11
{

12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

lcd_init();

// Iniciar el display

set_tris_b(0x00); set_tris_c(0x00); portc = 0b00000000;

// Tris B seteado en 0 (Todo el puerto B como salid

// Tris C seteado en 0 (Todo el puerto C como salid

// Todas las salidas del puerto B con valor lgico bajo

// Variables para uso posterior en programa int i; long value; float temper;

setup_adc_ports(ALL_ANALOG); setup_adc(ADC_CLOCK_INTERNAL); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED);

27 28 29 30 31 32

setup_timer_2(T2_DISABLED,0,1); setup_ccp1(CCP_OFF); setup_comparator(NC_NC_NC_NC);

// Las siguientes lineas muestran un mensaje de inicio lcd_putc("Iniciando"); delay_ms(250); // Funcin para escribir en el disp. // Retardo de 250 milisegundos. // Borrar todos los caracteres

33 34 35 36 37 38 39 40 41

lcd_putc("f"); lcd_putc("Iniciando."); delay_ms(250); lcd_putc("f"); lcd_putc("Iniciando.."); delay_ms(250); lcd_putc("f"); lcd_putc("Iniciando..."); delay_ms(250); lcd_putc("f");

42 43 44 45 46 47 48 49 50 51

lcd_putc("Termometron"); lcd_putc("Digital"); delay_ms(1500); lcd_putc("f");

// Este mensaje ya queda fijo lcd_putc("Temp. actual:"); lcd_gotoxy(9,2); lcd_putc("oC"); lcd_gotoxy(1,2); // Ir al caracter 9 de la segunda linea.

52 53 54 55 56 57
lcd_putc(" "); do { for(i=3;i==6;i++) { lcd_gotoxy(i,2);

58 59 60 61 62 63 64 65 66 67 68
}

lcd_gotoxy(3,2); set_adc_channel(0); delay_us(50); value=read_adc(); // Seleccionar el Pin de lectura (RA0) // Retardo de 50 microsegundos

// Guardar el resultado de la lectura analgica en "

temper=(0.488758*(float)value); // Pasar el valor en binario a C

printf(lcd_putc,"%02.1f", temper); // Mostrar la temperatura en pantalla delay_ms(500); }WHILE(TRUE); // Bucle infinito

69 70 71 72 73 74
Aca les dejo un poco de informacion del LM35 de la pgina uControl: Sus caractersticas ms relevantes son:

Precisin de ~1,5C (peor caso), 0.5C garantizados a 25C. No linealidad de ~0,5C (peor caso). Baja corriente de alimentacin (60uA). Amplio rango de funcionamiento (desde -55 a + 150C). Bajo costo. Baja impedancia de salida. Su tensin de salida es proporcional ala temperatura, en la escala Celsius. No necesita calibracin externa y es de bajo costo. Funciona en el rango de alimentacin comprendido entre 4 y 30 voltios. Como ventaja adicional, el LM35 no requiere de circuitos adicionales para su calibracin externa cuando se desea obtener una precisin del orden de 0.25 C a temperatura ambiente, y 0.75 C en un rango de temperatura desde 55 a 150 C. La baja impedancia de salida, su salida lineal y su precisa calibracin inherente hace posible una fcil instalacin en un circuito de control. Debido a su baja corriente de alimentacin (60uA), se produce un efecto de autocalentamiento reducido, menos de 0.1 C en situacin de aire estacionario. [/quote] El LM35 tiene un rango de 10mV/C o sea que para 1C voy a tener 10mV, para 2C 20mV y as hasta 1V (100C). Por lo tanto nuestro valor mximo que va a leer nuestro pic va a ser 1V, lo cual usando un Vref interno de 5V nos estarian sobrando 4V por asi decirlo y hace menos precisa la lectura (+/- 0.3 C) pero podriamos reducir este error usando una tension de referencia externa de 2.5V en el pin 5 del pic, pero para ello habria que indicar en el programa que se usara un Vref externo. FOTO DEL PROYECTO FUNCIONANDO:

Anda mungkin juga menyukai