CONTROL DE TEMPERATURA CON PIC Y LM35
El siguiente programa esta diseñado para controlar la temperatura de un panel a travez de 2 ventiladores y un sensor de temperatura el IC LM35.
El funcionamiento del circuito es el siguiente:
El corazon del circuito es el microcontroladro PIC16F819, decidi usar este porque tiene conversores
analogicos - digital, y el sensor de temperarura LM35 porque ya lo tenia a la mano, la idea es que cuando la temperatura aumenta se encienda un ventilador que ayude a bajar la temperatura y cuando la temperatura es baja este se apague. Adicionalmente a esto me pregunte y que pasa si el ventilador se averia y la temperatura sigue aumentando. Bueno decidi agregar otro ventilador mas, seteado a una temperatura mayor que el primer ventilador, pero al aumentar la temperatura mas alla del seteo del 1er ventiladorencienda una alarma y envie un aviso en el lcd. no soy bueno para dar explicaciones, mejor vean el funcionamiento en el video
DESCARGAS
Control de Temperatura.Zip El programa esta en pbp y la simulacion en Proteus7.8
Data Sheet PIC16f819 descargado de datasheetcatalog.com
MANUAL PICBASIC EN ESPAÑOL manual descargado de frino.com.ar
Hay un inconveniente en el circuito debido a que el LM35 tiene incrementos de 10 mV por grado al leer el dato con el conversor AD del pic, este dato lo he multiplicado x 2 para tener una lectura aproximada , lo malo es que solo muestra en LCD valores pares.
Es mi primera publicacion si algun lector tiene una mejora comentela y la posteare.
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2013 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 26/11/2013 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
osccon=%1100100 ;DEFINE EL OSCILADOR INTERNO A 4MHZ;
DEFINE LCD_DREG PORTB ;DEFINE EL PUERTO B PARA CONTROL DE LCD;
DEFINE LCD_DBIT 0 ;SE USAN LOS PINES MENOS SIGNIFICATIVOS DEL PUERTOB
DEFINE LCD_RSREG PORTB ;REGISTRO LCD
DEFINE LCD_RSBIT 5 ;REGISTRO DE LCD EN PORTB.5 (PIN RS )
DEFINE LCD_EREG PORTB ;BIT HABILITAR LCD
DEFINE LCD_EBIT 4 ;PUERTOB.4 HABILITAR LCD
DEFINE ADC_BITS10 ;FIJA NUMEROS DE BITS DEL RESULTADO(5,8,10)
DEFINE ADC_CLOCK3 ;FIJA EL RELOJ
DEFINE ADC_SAMPLEUS50 ;VELOCIDAD DE MUESTREO;
G CON 223 ;CONSTANTE G
;223 EN ASCII ES EL SIMBOLO DE GRADOS
TRISA = 001 ;PUERTO A.0 COMO ENTRADA, EL RESTO COMO SALIDA;
TRISB=000000 ;PUERTO B COMO SALIDAS;
ADCON1=001110 ;PUERTO A.0 ES CONVERSOR, EL RESTO DIGITALES;
X VAR BYTE ;VARIABLE PARA LA INSTRUCCION FOR NEXT;
Y VAR BYTE ;VARIABLE PARA LA INSTRUCCION FOR NEXT
Z VAR BYTE ;VARIABLE PARA LA INSTRUCCION FOR NEXT
ABC VAR BYTE ;VARIABLE PARA LA INSTRUCCION LOOKUP
DATOS VAR BYTE ;VARIABLE PARA ALMACENAR LOS DATOS LEIDOS
VENTILADOR1 VAR PORTA.1 ;VARIABLE USADA COMO SALIDA VENTILADOR1
VENTILADOR2 VAR PORTB.6 ;VARIABLE USADA COMO SALIDA VENTILADOR1
LED VAR PORTA.2 ;VARIABLE USADA COMO SALIDA VENTILADOR2
PORTB.7=0 ;LIMPIAR PORTB.7 (ENVIAR UN "0" LOGICO)
LED=0 ;LIMPIAR LED (ENVIAR UN "0" LOGICO)
VENTILADOR1=0 ;LIMPIAR VENTILADOR1 (ENVIAR UN "0" LOGICO)
VENTILADOR2=0 ;LIMPIAR VENTILADOR2 (ENVIAR UN "0" LOGICO)
PAUSE 200
ARRANQUE: ;ETIQUETA PREVIA A INICIO DE PROGRAMA
FOR Z=0 TO 2 ;REPETIR 2 VECES
LCDOUT $FE,1 ;LIMPIAR LCD
FOR Y=0 TO 9 ;REPETIR 9 VECES
LOOKUP Y,[" INICIANDO"],ABC ;TOMAR LETRA POR LETRA Y GUARDAR EN "ABC";
LCDOUT,ABC
PAUSE 50 ;ESPERAR 50 ms
NEXT ;SIGUIENTE REPETICION
NEXT ;SIGUIENTE REPETICION
GOTO INICIO ;IR A INICIO
INICIO: ;ETIQUETA INICIO
ADCIN 0,DATOS ;LEER CANAL "0" Y GUARDAR EN "DATOS"
DATOS = DATOS*2 ;MULTIPLICAR POR 2 EL VALOR "DATOS"
IF DATOS > 40 THEN PELIGRO ;SI DATOS >"40" IR A "PELIGRO"
IF DATOS >= 15 THEN ENFRIANDO ;SI DATOS >"15" IR A "ENFRIANDO
LOW VENTILADOR1 : LOW VENTILADOR2 ;"0" LOGICO LOS VENTILADORES 1Y2
LCDOUT $FE,1," TEMPERATURA:" ;PALABRA "TEMPERATURA" EN EL LCD
LCDOUT $FE,$C6, DEC DATOS,G,"C" ; VALOR DECIMAL DE DATOS Y GRADOS
PAUSE 200 ;ESPERAR 200 ms
GOTO INICIO ;IR A "INICIO"
ENFRIANDO: ;ETIQUETA ENFRIANDO;
HIGH VENTILADOR1 ;ENCENDER VENTILADOR1 (PONER "1" LOGICO);
LOW VENTILADOR2 ;ENCENDER VENTILADOR1 (PONER "1" LOGICO)
HIGH LED ;ENCENDER LED(PONER "1" LOGICO)
PAUSE 200
LOW LED
PAUSE 200
ADCIN 0,DATOS
DATOS = DATOS*2-1
LCDOUT $FE,1," ENFRIANDO" ;SACAR LA PALABRA "ENFRIANDO" EN EL LCD
LCDOUT $FE,$C6, DEC DATOS,G,"C" ;SACAR EL VALOR DECIMAL DE "DATOS" Y
;EL SIMBOLO GRADOS
GOTO INICIO ;IR A INICIO
PELIGRO:
ADCIN 0,DATOS
DATOS = DATOS*2-1
LCDOUT $FE,1," PELIGRO "
LCDOUT $FE,$C6, DEC DATOS,G,"C"
LOW VENTILADOR1
HIGH VENTILADOR2
SOUND PORTB.7,[10000,200] ;INSTRUCCION PARA ENVIAR PITIDO
;POR EL PUERTO B.7
LOW PORTB.7
GOTO INICIO
END
No hay comentarios:
Publicar un comentario