INSTRUMENTACION
REPORTE DE COMUNICACIÓN SERIAL SENSOR DE TEMPERATURA PC
Roberto Carlos Cortes Hernández Miguel Ríos
Iván Octavio García Hinojosa Ernesto Jhotan Chávez Estrada
INSTITUTO TECNOLOGICO DE COLIMA Departamento de Ingeniería Mecatrónica
Av. Tecnológico No. 1. , C.P.28976, Villa de Álvarez, Col.
Tel / Fax (01 312) 3129920, 3140933. , www.itcolima.edu.mx
I. RESUMEN
En este trabajo se describe la comunicación serial entre un sensor de temperatura y la computadora, en el que la computadora enviara información al PIC de sensor. Información que nosotros podremos ingresar por medio de una interfaz que crearemos mas adelante y dicha información se visualizara en el LCD del sensor.
II. INTRODUCCION
Los sensores de temperatura son dispositivos que transforman los cambios de temperatura en cambios en señales eléctricas que son procesados por equipo electrico o electrónico.
El sensor de temperatura, típicamente suele estar formado por el elemento sensor, de cualquier tipo, la vaina que lo
envuelve y que está rellena de un material muy conductor de la temperatura, para que los cambios se transmitan rápidamente al elemento sensor y del cable al que se conectarán el equipo electrónico.
III. PLANTEAMIENTO DEL PROBLEMA
Se requiere realizar un circuito que sea capaz de censar los cambios de temperatura que mida el sensor LM35 y comunicarlo a una computadora por medio de la comunicación serial. La comunicación se realizara en forma única de PC a PIC, para que podamos ingresar información desde la computadora hasta donde se encuentre el sensor.
IV. MARCO TEORICO
Microcontrolador PIC 16F877A
Un microcontrolador es un circuito programable, capaz de ejecutar las órdenes grabadas en su memoria. Está compuesto de varios bloques funcionales, los cuales cumplen una tarea específica, un microcontrolador incluye en su interior las tres principales unidades funcionales de una computadora: unidad central de procesamiento, memoria y periféricos de entrada/salida.
El PIC16F877 es un microcontrolador con memoria de programa tipo FLASH, lo que representa gran facilidad en el desarrollo de prototipos y en su aprendizaje ya que no se requiere borrarlo con luz ultravioleta como las versiones EPROM, sino que permite reprogramarlo nuevamente sin ser borrado con anterioridad.
El PIC16F877 es un microcontrolador de Microchip Technology fabricado en tecnología CMOS, su consumo de potencia es muy bajo y además es completamente estático, esto quiere decir que el reloj puede detenerse y los datos de la memoria no se pierden.
El encapsulado más común para este microcontrolador es el DIP (Dual In-line Pin) de 40 pines, propio para usarlo en experimentación.
Figura 1. Microcontrolador PIC 16F877A.
Sensor de temperatura 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
Empaquetado through-hole TO-92.
Características:
Calibrado en grados °Celsius
Opera desde 4 V hasta 30V
Menos de 1Ω impedencia dinámica
Amplio rango de temperaturas de operación.
LCD 2x16
Las pantallas de cristal líquido (LCD) se han popularizado mucho en los últimos
años, debido a su gran versatilidad para presentar mensajes de texto (fijos y en movimiento), valores numéricos y símbolos especiales, su precio reducido, su bajo consumo de potencia, el requerimiento de solo 6 pines del PIC para su conexión y su facilidad de programación en lenguajes de alto nivel (por ejemplo, lenguaje C). Desde todo punto de vista el empleo del display LCD 16x2 (LCD 2x16) debería considerarse como la primera opción a la hora de decidir por un dispositivo de presentación alfanumérica, excepto cuando las condiciones de iluminación ambiental no sean las más favorables. En este último caso se debería pensar en el empleo de displays de 7 segmentos, que aunque no tienen la misma versatilidad tienen la ventaja innegable de sus mejores características de visibilidad aún en los ambientes más desfavorables. En la actualidad existen diversos modelos de display LCD, aunque los más comunes son los LCD 16x2 (16 caracteres x 2 filas) o LCD 2x16, gobernados por el controlador Hitachi HD44780, que se ha convertido en el estándar de facto para las aplicaciones con microcontroladores PIC. Específicamente se hará referencia al display LM016L, que tiene las características mencionadas, aunque cualquier otro display LCD con el controlador HD44780 o compatible se puede utilizar. Existen LCD 16x2 con diferentes combinaciones de colores de fondo y texto.
V. Desarrollo
1. Se comenzó por realizar la interfaz en con el programa Visual Studio esta interfaz servirá para que nosotros podamos interactuar con el sensor y asi podamos ingresarle la información por medio de los botones que colocaremos en la interfaz (se recomienda ver los video-tutoriales acerca de cómo crear la interfaz)
2. Enseguida se realizó la programación necesaria para que la interfaz realice lo que se necesita y muestre lo que se
requiere en este caso la comunicación será unicamente de PC a PIC, como el sensor que se va a comunicar es uno de temperatura, la interfaz nos permitirá ingresar un dato como referencia.
3.
4. Se realiza la simulación en Proteus para para poder probar la comunicación virtual.)
5. Con el programa Virtual Serial Port Driver se crean los puertos virtuales que permitirán la comunicación entre la PC y el sensor. Dicho programa viene anexado en la serie de tutoriales proporcionado por el profesor.
6. Se procede a conectar el bluetooth al circuito en físico junto con el sensor, se conectan las salidas del bluetooth del RX a
la pata 25 del PIC y la pata 26 al TX.
7. Se realiza la configuración del bluetooth la cual se realiza conectando el emisor a la computadora y se configura el puerto solo, posteriormente se 8. parea creando la conexión
(introduciendo el código de activación del bluetooth) el cual dejara de parpadear cuando este conectado).
9. se realizara la visualización de los valores que el sensor LM35 presenta los cuales son variables mediante el tiempo en que se le aplica calor al sensor y estos se imprimirán en la pantalla de comunicación y en el LCD y en la pantalla de la PC por medio de la interfaz
10. Por último se verifico la comunicación y se pudo constatar que la comunicación PC-PIC funcionara correctamente ingresándole datos como referencia por medio de los botones de la interfaz, dichos botones se programaron para que el verde agregara un aumento de 1 en 1 a la
referencia, el amarillo restara de 1 en 1 y el azul un aumento de 10 en 10 las unidades en °C.
VI. CONCLUSIONES
Con esta práctica se continua con la comunicación serial de un solo sentido y nos permitió interactuar con el sensor de temperatura e ingresarle datos por medio de la computadora, posteriormente se realizara la práctica de comunicación dual entre PIC-PC y PC- PIC, podemos concluir que es de gran utilidad dicha comunicación debido a que es mucho más cómodo ingresar los datos desde una computadora.
ANEXO: PROGRAMA CARGADO AL PIC
#include <16F877A.h>
#device ADC=10
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4M)
#use rs232 (baud=9600, xmit=pin_c6, rcv=pin_c7, parity=N, stop=1, bits=8)
#include <lcd.c>
//************VARIABLES*******************
float lectura, temperatura, voltaje;
char recibidor;
int referencia=0, xref=0;
//*********INT.SERIAL********************
#int_rda void serial() {
recibidor=getc();
switch(recibidor) {
case 'a':
referencia=referencia+1;
xref=0;
break;
case 'b':
referencia=referencia-1;
xref=0;
break;
case 'c':
referencia=referencia+10;
xref=0;
break;
case 'd':
referencia=0;
xref=0;
break;
case 'e':
xref=1;
break;
default:
disable_interrupts(INT_RDA);
break;
};
}
//**************INICIA MAIN*********************
void main() {
enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA);
port_b_pullups(TRUE);
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
while(1) {
lcd_init();
//***************lectura de ADC*************
set_adc_channel(0);
lectura = read_adc();
voltaje =(lectura*5)/1023;
temperatura = voltaje * 100;
lcd_gotoxy(1,1);
printf(lcd_putc, "\f Temperatura=%.0f ", temperatura);
delay_ms(200);
lcd_gotoxy(1,2);
printf(lcd_putc,"Referencia = %u ",referencia);
delay_ms(900);
if(xref==1){
if(temperatura>referencia){
output_high(pin_B4);
} else {
output_low(pin_B4);
} }
} }