Universidad Nacional de Ingeniería Facultad de Electrotecnia y Computación Sistemas de Medición Elaborado por: Levi Dan Sandoval Leiva Carnet: 2009-30216 Profesor: Ing. Álvaro Gaitán Tema: Medidor de temperatura con pic16f877a y sensor lm35 con visualización en 7 segmentos y conexión RS232 II-Resumen del Proyecto La medición de temperatura del ambiente por lo general es un asunto de los termómetros de mercurio, ya sea hospitales u/o afines, el problema con este método es su visualización, por ejemplo si quisiéramos ver la temperatura ambiente en un termómetro de mercurio en nuestro hogar hay que ir hasta donde el esta y observar detalladamente para lograr distinguir la temperatura medida. En este trabajo diseñaremos un termómetro digital el cual sea más fácil de visualizar en pantallas de LED de 7 segmentos. En el resto del documento vamos a describir el proceso de diseño de dicho termómetro, sus elementos y su forma de funcionamiento. Antecedentes En principio es importante mencionar que aquí en la UNI ha habido proyectos de curso que básicamente son el mismo, es decir la construcción de un termómetro digital, pero a diferencia de nuestro termómetro, estos fueron realizados con pantallas LCD LM016, donde el costo de estas pantallas es elevado y además su visualización en entornos muy iluminados es dificultosa. Justificación La principal razón por la cual hemos escogido la elaboración de un termómetro digital ha sido la manera en la que el costo de este puede disminuir implementando una manera de visualización de la temperatura mejor y más barata. Objetivo General Diseñar un termómetro digital, usando un sensor de temperatura LM35, un PIC16877A y pantallas LED de 7 segmentos para la visualización. Objetivos Específicos Realizar la programación necesaria en el PIC para su correcto funcionamiento y correlación con las variables de entrada y salida. Realizar el esquema de diseño del circuito en PROTEUS y realizar las simulaciones necesarias para comprobar su correcto funcionamiento. Crear un PCB del circuito para su futura implementación. Plan de Trabajo Actividad #1 Hacer la programación para el microcontrolador y simular su funcionamiento en PROTEUS. Hacer la correcta programación del microcontrolador es fundamental para la realización de las demás actividades, usaremos el lenguaje de alto nivel CCS y el programa PICC como compilador, para comprobar su funcionalidad usaremos el programa PROTEUS en el cual simularemos como el PIC trabaja con los demás componentes del circuito electrónico. Actividad #2 Una vez realizada la actividad #1 sin inconvenientes y con los resultados esperados procederemos a: a) Programar el PIC 16f877A. b) Montar el circuito completo en una tabla de nodos, igualmente como está el diseño en las simulaciones realizadas anteriormente. Actividad #3 Al haber comprobado su correcto funcionamiento procederemos a hacer la tarjeta PCB para montar los componentes y finalizar el termómetro digital. En esta etapa, ya con todos los componentes conseguidos y necesarios para el termómetro, haremos la tarjeta del circuito, usando el software PCB WIZARD para el diseño de las pistas, filminas para la impresión de las pistas sobre la tarjeta de cobre y acido nítrico para la eliminar las partes de la tarjeta que no sean las pistas donde irán fijados todos los componentes. Introducción La temperatura es una variable física de muchísima importancia en todas las partes del mundo, cada país, cada ciudad e incluso cada hogar debería en términos básicos y prácticos saber la temperatura del ambiente. Esta practicidad adquiere mayor relevancia cuando hablamos de actividades especificas ligadas al manejo intencionado de la temperatura en ambientes cerrados, por ejemplo oficinas de trabajo, hoteles, centros de entretenimiento, cines, etc. con aires acondicionados a determinada temperatura, se hace indispensable conocer la temperatura ambiente para garantizar que haya un ambiente cómodo y agradable para las personas dentro del lugar, o en otro caso podría servir para monitorear la temperatura a la que se almacenan productos en una bodega y asegurar su buen estado e integridad, etc. Desarrollo Para entrar de lleno al diseño del termómetro definiremos las características de este y los elementos y/o componentes (valga la redundancia) necesarios para la realización del mismo. Características del termómetro digital Rango de temperatura medible (-55 a 100) grados Celsius. Entrada de voltaje de 115-125 voltios a 60 herz. Voltaje DC de trabajo del circuito 5 Voltios. Conexión RS232 serie para pc. El sensor: Este elemento tiene la función de convertir la variable física en una variable eléctrica como voltaje o corriente. En nuestro caso la variable física que mediremos será temperatura, para ello usaremos el sensor lm35. Acondicionador: En este caso el acondicionamiento de la señal el sensor es simplemente para lograr obtener una medición de temperatura bajo cero ya que la salida máxima del sensor es de 5 voltios los cuales son totalmente manejables por el microcontrolador. Procesador de variable: Tiene la función de estimar las medidas finales adquiridas a través de la variable acondicionada mediante cálculos matemáticos, etc. y obtener una magnitud acertada de la variable física. Estos suelen ser circuitos o sistemas más complejos, que en la mayoría de los casos necesitan ser programados para tal función. En nuestro caso el procesador de variable será el microcontrolador, el cual calculara mediante ecuaciones previamente programadas el valor real de temperatura y también tendrá la función de brindar las señales necesarias para las pantallas de siete segmentos y es el que servirá para la conexión RS232 con la PC. La programación del microcontrolador fue hecha en lenguaje CCS de alto nivel, a continuación el mismo: #include "16f877A.h" #DEVICE adc=10 // Convertidor-analógico digital del microcontrolador #include "MATH.H" #fuses XT,NOPROTECT,NOWDT // Directivas generales del pic #use delay (clock=4M) // Reloj a 4MHz #use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, parity=N) // Conexion RS232 #use fast_io(A) #use fast_io(B) #use fast_io(C) #use fast_io(D) int32 vtemp, vd; int8 a, b, c; float temp; void prom(){ int8 prom; vd=0; vtemp=0; for(prom=0;prom<100;prom++){ set_adc_channel(1); delay_us(25); vd+=read_adc(); delay_us(25); set_adc_channel(0); //setear AN0 entrada delay_us(25); vtemp+=read_adc(); delay_us(25); } vd=vd/100; vtemp=vtemp/100; } void main(){ set_tris_b(0x00); // Todo el puerto B como salida set_tris_c(0x80); // Todo el puerto C como salida set_tris_d(0x00); // Todo el puerto D como salida set_tris_a(0XFF); // entrada en el puerto A setup_adc_ports( ANALOG_RA3_REF ); // Todas las entradas análogas activadas setup_adc(adc_clock_internal); output_b(0); output_c(0); output_d(0); // Reloj interno del conversor A/D delay_ms(100); while(true) { prom(); if(vtemp<vd){ vtemp=vd-vtemp; output_high(pin_b0); } else{ vtemp=vtemp-vd; output_low(pin_b0); } temp=((vtemp*1000.0*2.5)/(10.0*1023.0))-0.0; //2.5 es Vref+ ajustar en el circuito final //0.0 es corrección de offset, ajustar al ultimo vtemp=floor(temp*10.0); a=vtemp/100; b=vtemp/10-a*10; c=vtemp-a*100-b*10; output_c(a); c=c<<4; c=b+c; output_d(c); delay_ms(200); printf("Temperatura= %fC\r", temp); } } Esquema total del circuito RXD TXD RTS C4 X1 33pF U2 1 C5 CTS 33pF CRYSTAL U1 13 14 51.0 VOUT R1 2 2 3 4 5 6 7 1k 3 LM35 C2 R2 100nF 1k D1 8 9 10 1 1N4148 D2 R3 C1 1N4148 10k 100nF OSC1/CLKIN OSC2/CLKOUT RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+ RA4/T0CKI/C1OUT RA5/AN4/SS/C2OUT RC0/T1OSO/T1CKI RE0/AN5/RD RC1/T1OSI/CCP2 RE1/AN6/WR RC2/CCP1 RE2/AN7/CS RC3/SCK/SCL RC4/SDI/SDA MCLR/Vpp/THV RC5/SDO RC6/TX/CK RC7/RX/DT RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 33 34 35 36 37 38 39 40 R7 D3 100 15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30 R8 LED-BLUE 100 U3 7 1 2 6 4 5 3 A B C D BI/RBO RBI LT QA QB QC QD QE QF QG U4 74LS48 7 A 1 B 2 C 6 D 4 BI/RBO 5 RBI 3 LT QA QB QC QD QE QF QG 13 12 11 10 9 15 14 13 12 11 10 9 15 14 R9 100 74LS48 PIC16F877A U5 R4 R6 10k 1k 7 1 2 6 4 5 3 A B C D BI/RBO RBI LT QA QB QC QD QE QF QG 13 12 11 10 9 15 14 74LS48 R5 C3 10k 100nF R10 100 El circuito se alimenta en su totalidad por 5 voltios DC, cuando se enciende el LED indica que la temperatura medida está bajo 0 grados Celsius. Listado de componentes: 1 LM 35 1 MIROCONTROLADOR 16F877A 1 CRISTAL OSCILADOR DE 4MHZ 2 CAPACITORES CERAMICOS DE 33 PF 1 FUENTE DC DE 5V 3 DISPLAY DE 7 SEGMENTOS DE CÁTODO COMÚN 3 TTL 74LS48 (CODIFICADOR BCD A 7 SEGMENTOS) 2 DIODO 1N4148 3 RESISTENCIAS DE 10 K 3 RESISTENCIAS DE 1K 4 RESISTENCIAS DE 220 1 LED ROJO O AZUL 1 BOTÓN N/A (NORMALMENTE ABIERTO) 1 CABLE COM PARA LA CONEXIÓN SERIE Detalle de los componentes LM35 El LM35 es un sensor de temperatura con una precisión calibrada de 1ºC. Su rango de medición abarca desde -55°C hasta 150°C. La salida es lineal y cada grado centígrado equivale a 10mV, por lo tanto: 150ºC = 1500mV -55ºC = -550mV1 Sus características más relevantes son: Está calibrado directamente en grados Celsius. La tensión de salida es proporcional a la temperatura. Tiene una precisión garantizada de 0.5°C a 25°C. Opera entre 4 y 30 voltios de alimentación. Baja impedancia de salida. Baja corriente de alimentación (60uA). Bajo coste. El microcontrolador Los PIC16F87X forman una subfamilia de microcontroladores PIC (Peripheral Interface Controller) de gama media de 8 bits, fabricados por Microchip Technology Inc.. Cuentan con memoria de programa de tipo EEPROM Flash mejorada, lo que permite programarlos fácilmente usando un dispositivo programador de PIC. Esta característica facilita sustancialmente el diseño de proyectos, minimizando el tiempo empleado en programar los microcontroladores (µC). Para nuestro proyecto usaremos el modelo 16F877A 74LS48 Este es un circuito integrado basado en tecnología TTL, este es un convertidoror de código BCD a 7 segmentos, y es necesario en nuestro caso para el uso de las pantallas led. Pantallas LED de 7 segmentos cátodo común Son pantallas a base de led las cuales muestran los números del 0 al 9 dependiendo de las señales de entrada, usaremos tres de estas una para decimales, una para la unidad y una para la decena. Bibliografía http://www.ozeros.com/foro/topic/854-guia-termometro-con-lm35/ http://es.wikipedia.org/wiki/LM35 Dataheet PIC16F877a, lm335, 74ls48. Compilador CCS y simulador proteus para Microcontroladores PIC- Eduardo García Breijo