fr

fr
Labansoft

martes, 26 de noviembre de 2013

temperatura



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