Descargar

Sistema de control de temperatura

Enviado por Josele


Partes: 1, 2

    edu.red

    SISTEMA DE CONTROL DE TEMPERATURA DE UN CLIMATIZADOR:

    Para esta aplicación se utilizan 2 microinterruptores de 8 bits, una placa con el sensor de temperatura LM35, un display LCD 16×2 y una placa con diodos led.

    Los microinterruptores los conectaremos al PORTC y al PORTD. El bus de datos del LCD al PORTB y los bits de control E W S a los pines RE0 RE1 RE2 respectivamente. El LM35 a la patilla RA0 y dos de los leds de la placa de diodos a las patillas RA1 y RA2.

    FUNCIONAMIENTO DEL SISTEMA:

    El usuario introduce la temperatura máxima y mínima deseadas mediante los microinterruptores conectados al PORTD y PORTC respectivamente.

    Si el sistema supera la temperatura máxima del rango, se activara una alarma visual con el texto “FRIO” en el LCD y se apagara* el led conectado a la patilla RA2.

    ACTUAL:28 FRIO MAX:27 MIN:24 Cuando el sistema no alcance la temperatura mínima del rango, se activará la alarma visual “CALOR” en el LCD y se producirá un cambio de nivel de tensión en la patilla RA1 apagándose* el led conectado a esta.

    ACTUAL:23 CALOR MAX:27 MIN:24 *Los leds se apagaran debido a que por defecto estarán encendidos al alimentar la placa de leds utilizada. De esta forma podremos visualizar mejor los cambios de nivel.

    Si por algún casual, el usuario introduce un valor de temperatura mínima mayor que el valor de temperatura máxima, se activará una alarma visual con el texto “ERROR”, y por supuesto no se producirá ningún cambio de nivel en RA1 ni en RA2.

    ACTUAL:28 ERROR MAX:22 MIN:24 Siempre que el usuario introduzca correctamente las temperaturas máxima y mínima y la temperatura ambiente permanezca dentro del intervalo impuesto, visualizaremos únicamente en el LCD la temperatura actual y la mínima y máxima elegidas.

    ACTUAL:26 MAX:27 MIN:24 En las líneas 2 y 3 de la página 6 podemos activar la función prueba2( ) y desactivar rango( ), de esta manera veríamos en la segunda línea del LCD la temperatura máxima y mínima alcanzadas por el sensor.

    1

    edu.red

    ESQUEMA DEL CIRCUITO: 2

    edu.red

    PROGRAMA EN C:

    //PROGRAMA DE UN SISTEMA Q MIDE LA TEMPERATURA ACTUAL, //ADEMÁS MIDE LA MAXIMA Y MINIMA (O LIMITA LA TEMPERATURA A //UN RANGO IMPUESTO POR EL USUARIO). // SI EL SISTEMA SUPERA LA TEMPERATURA MAXIMA DEL RANGO, SE //ACTIVARA LA ALARMA "FRIO" Y SE APAGARA EL LED CONECTADO A LA //PATILLA RA2. //SI POR EL CONTRARIO, EL SISTEMA NO SUPERA LA TEMPERATURA //MINIMA DEL RANGO, SE ACTIVARA LA ALARMA "CALOR" Y SE //APAGARA EL LED CONECTADO A LA PATILLA RA1. //LOS LEDS SE APAGARAN DEBIDO A QUE POR DEFECTO LOS LEDS //ESTARAN ENCENDIDOS AL ALIMENTAR LA PLACA DE LEDS

    //EN PORTC SE INDICARA LA TEMPERATURA MINIMA DEL RANGO //MEDIANTE MICROINTERRUPTORES. //EN PORTD SE INDICARA LA TEMPERATURA MAXIMA DEL RANGO //MEDIANTE MICROINTERRUPTORES. //SI PORTC>PORTD VISUALIZAREMOS LA ALARMA "ERROR".

    //********************************************************************* //**CABECERA Y DECLARACION DE VARIABLES Y FUNCIONES***********

    #include unsigned char x=1; unsigned int temp,tempmin,tempmax,t; //para el switch (inicializa y actualiza max y min) //variables en hexadec y t (retardo conversor). unsigned int templcd,tempminlcd,tempmaxlcd; //variables en decimal para enviar al lcd. unsigned int rangmin,rangmax;

    unsigned char hexadec (unsigned char hex); void iniciar_lcd(void); void lcd_control(unsigned int valor); void prueba(void); void prueba2(void); void rango(void); void prueba3(void); void prueba4(void); void error(void); void lcd_dato(unsigned int dato);

    unsigned int i; //variables en Hexadecimal para enviar al lcd. //de los interruptores.

    //Pasa a decimal. //Inicia el LCD. //Control del LCD (Instrucciones). //Texto y datos a enviar al LCD. //Texto y datos a enviar al LCD. //Texto y datos a enviar al LCD. //Texto y datos a enviar al LCD. //Texto y datos a enviar al LCD. //Texto y datos a enviar al LCD. //Envia al LCD.

    //para el retardo de las funciones. 3

    edu.red

    //********************************************************************* //****************************MAIN************************************

    void main(void){ TRISB=0x00; TRISE=0x00;

    TRISC=0xFF; TRISD=0xFF; TRISA=0x01;

    PORTA=0x00; PORTC=0x00; PORTD=0x00;

    PORTE=0x00; PORTB=0x00;

    OPTION=0x80; INTCON=0xC0; ADCON1=0x8E; ADCON0=0x81;

    templcd=tempminlcd=tempmaxlcd=37; //SALIDA //SALIDA

    //ENTRADA DIGITAL //ENTRADA DIGITAL //salida digital. RA0 IN ANALOG

    //PORTA SALIDAS DIGITALES A 0 //TEMP MINIMA DEL RANGO //TEMP MÁXIMA DEL RANGO

    //INICIALIZO A 0

    //justificado a derecha

    //37dec=25hex temperatura por defecto ADIE=1; ADGO=1; //HABILITO INTERRUPCION. //PONGO EN MARCHA LA CONVERSIÓN. while(1);

    }//MAIN

    //*************************FIN DEL MAIN******************************* //*********************************************************************

    4

    edu.red

    //***************INTERRUPCION CONVERSOR A/D***********************

    void interrupt convertir (void){ if(ADIF){ //SI HA TERMINADO LA CONVERSION ADIF=0; temp=(ADRESH1; templcd=hexadec(temp);

    rangmin=PORTC; rangmax=PORTD;

    iniciar_lcd(); lcd_control(0x80); prueba(); //divido entre 2 para buscar paridad de la escala. //PASO A DECIMAL.

    //temp mínima introducida interruptores. //temp mínima introducida interruptores.

    //fija mensaje en la primera fila. // envia al lcd. //Si queremos visualizar la temperatura minima y maxima q alcanza el termometro:

    //*****Inicializa y Actualiza la temperatura mínima y máxima********************

    //La idea es q si la primera vez q conectamos el sistema y:

    // 1)la temp actual(28 por ej) es mayor a la mi

    Partes: 1, 2
    Página siguiente