InicioCiencia EducacionSensor de temperatura con LM35 y PIC16F873A
Hola a todos!!! En mi web agregue una foto del proyecto funcionando en un protoboard http://www.otrapc.com.ar/?p=48 Este es mi primer post y voy a publicar algo que a varios de ustedes les va a servir. Cuando hice este trabajo no encontre mucha info al respecto, asique voy a dejar todo, esquema electrico y el código 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 16x2 (16 caracteres, 2 lineas) Usa una tensión 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. Dejo primero el circuito eléctrico. Esta img me la pasó un profesor, muestra como conectar la alimentación del 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: Diagrama de pines del 16f873a Programación del PIC: (Utilizar PIC C Compiler - CCS) #include #define LCD_ENABLE_PIN PIN_B2 #define LCD_RS_PIN PIN_B0 #define LCD_RW_PIN PIN_B1 #include #byte portc = 07 void main() { lcd_init(); // Iniciar el display set_tris_b(0x00); // Tris B seteado en 0 (Todo el puerto B como salida) set_tris_c(0x00); // Tris C seteado en 0 (Todo el puerto C como salida) portc = 0b00000000; // Todas las salidas del puerto B con valor lógico 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); 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"); // Función para escribir en el disp. delay_ms(250); // Retardo de 250 milisegundos. lcd_putc("f"); // Borrar todos los caracteres 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"); 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); // Ir al caracter 9 de la segunda linea. lcd_putc("oC"); lcd_gotoxy(1,2); do{ for(i=3;i==6;i++) { lcd_gotoxy(i,2); lcd_putc(" "); } lcd_gotoxy(3,2); set_adc_channel(0); // Seleccionar el Pin de lectura (RA0) delay_us(50); // Retardo de 50 microsegundos value=read_adc(); // Guardar el resultado de la lectura analógica en "value" 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 } Aca les dejo un poco de informacion del LM35 de la página uControl: dijo:Sus características más relevantes son: Precisión de ~1,5ºC (peor caso), 0.5ºC garantizados a 25ºC. No linealidad de ~0,5ºC (peor caso). Baja corriente de alimentación (60uA). Amplio rango de funcionamiento (desde -55º a + 150ºC). Bajo costo. Baja impedancia de salida. Su tensión de salida es proporcional ala temperatura, en la escala Celsius. No necesita calibración externa y es de bajo costo. Funciona en el rango de alimentación comprendido entre 4 y 30 voltios. Como ventaja adicional, el LM35 no requiere de circuitos adicionales para su calibración externa cuando se desea obtener una precisión 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 calibración inherente hace posible una fácil instalación en un circuito de control. Debido a su baja corriente de alimentación (60uA), se produce un efecto de autocalentamiento reducido, menos de 0.1 ºC en situación de aire estacionario. El LM35 tiene un rango de 10mV/°C o sea que para 1°C voy a tener 10mV, para 2°C 20mV y así hasta 1V (100°C). Por lo tanto nuestro valor máximo 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. Es una aplicación sencilla de pocos materiales y tambien pueden modificarla para tener un reloj que cada tanto muestre la temperatura u otras cosas. Cualquier duda dejen un comentario o manden un MP, no tengo problema en ayudarlos. Saludos! (Cuando encuentre la foto de la plaqueta andando la subo)
Datos archivados del Taringa! original
220puntos
27,522visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
3visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

w
wGD5🇦🇷
Usuario
Puntos0
Posts5
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.