▷ Sistema de climatizacíon automático programable con pic16f877a y lm35

Aprende a diseñar un sistema de climatización automático utilizando el microcontrolador PIC16F877A y el sensor de temperatura LM35. Este proyecto te permitirá controlar dispositivos de calefacción o ventilación de manera automática en función de la temperatura ambiente. A través de la programación del PIC, podrás establecer umbrales de temperatura y ajustar el comportamiento del sistema en consecuencia. Ideal para aplicaciones en hogares inteligentes y sistemas de control ambiental eficientes.

MATERIALES:

  • 1 PIC16F877A
  • 1 LCD 2 x 16
  • 1 sensor de temperatura LM35
  • 2 resistencias de 220Ω
  • 4 resistencias de 1,0 K Ω
  • 1 potenciómetro de 10 K Ω
  • 2 led
  • 1 cristal oscilador de 4 MHZ
  • 2 condensadores cerámicos de 22pF

DIAGRAMA DE CONEXIONES:

➤➤CIRCUITO PARA ETAPAS DE POTENCIA

EXPLICACION DEL FUNCIONAMIENTO DEL PROYECTO:

El objetivo de este proyecto es encender un calefactor o un ventilador dependiendo de la temperatura ambiente, es decir si hace demasiado frio o demasiado calor, dependiendo cual sea el caso se encenderá automáticamente un calefactor o un ventilador (En este caso simulamos el calefactor y el ventilador solo utilizando leds. Para poder conectar el calefactor y el Ventilador tendremos que añadir una etapa de potencia), los valores de temperatura mínima y máxima son modificables y se guardan en la memoria EEPROM del micro-controlador EN EL VIDEO PUEDEN VER DETALLADAMENTE COMO FUNCIONA EL SISTEMA. Al iniciar el sistema nos aparecerá en el lcd lo siguiente:

Aquí podemos observar la temperatura mínima, la temperatura actual y la temperatura máxima, para configurar los valores de temperatura mínima y temperatura máxima presionamos el boton (selec).

Una vez presionado el botón select, nos aparece en el LCD lo siguiente.

Con el pulsador (+) aumentamos el valor de la temperatura y con el pulsador (-) lo disminuimos, al presionar nuevamente el pulsador (selec), guardamos el valor de la temperatura mínima en la memoria EEPROM y nos vamos al menú de configuración de la temperatura máxima.

Con el pulsador (+) aumentamos el valor y con el pulsador (-) lo disminuimos, al presionar nuevamente el pulsador (selec), guardamos el valor de la temperatura maxima en la memoria EEPROM y regresamos al menú principal.

CODIGO EXPLICADO:

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : Esteban Carrillo - www.edeptec.com                *
'*  Notice  : Copyright (c) 2022                                *
'*          : All Rights Reserved                               *
'*  Date    : 02/02/2021                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

;*---- Pines donde ira conectado el LCD ---*

DEFINE LCD_DREG PORTB 
DEFINE LCD_DBIT 0 
DEFINE LCD_RSREG PORTB 
DEFINE LCD_RSBIT 4 
DEFINE LCD_EREG PORTB 
DEFINE LCD_EBIT 5
;*------------------------------------------*

;-----------Parametros conversor Analogico/Digital--------------*
DEFINE ADC_BITS 10 ;Fijar número de BITS del resultado (5,8,10)
DEFINE ADC_CLOCK 3 ;Fijar EL CLOCK (rc = 3)
DEFINE ADC_SAMPLEUS 50 ;Fijar el tiempo de muestreo en Us
;ADC_SAMPLEUS es el número de microsegundos que el programa espera
;entre fijar el canal y comenzar la conversión analogica/digital.
;*--------------------------------------------------------------*
TRISA =%1 ;el puerto A.0 es de entrada
ADCON1 = %00001110 ;el puerto A.0 es conversor los demás son Digitales  
TRISD = %11100000

dato VAR WORD ;crear variable dato para guardar el valor de la temperatura actual
tempMin VAR BYTE; Variable para almacenar la temperatura minima programada
tempMax VAR BYTE; Variable para almacenar la temperatura maxima programada
x VAR BYTE; Variable para hacer una pausa con un ciclo for
g CON 223 ;g constante 223. Este es el ASCII de grados
calf VAR portD.3 ;nombres para los pines
vent VAR portD.4
enter VAR portD.5
botonBajar VAR portD.6
botonSubir VAR portD.7

EEPROM 0,[18,25] ;contenido inicial de la EEPROM. Temperatura inicial que se muestra en el LCD

inicio:
READ 0,tempMIN ;lee direccion 0 de la memoria EEPROM y lo guarda en tempMin
READ 1,tempMAX ;lee direccion 1 de la memoria EEPROM y lo guarda en tempMax

sensar:
    
    ADCIN 0, dato ;leer el canal 0 (A0) y guarde en dato
    LCDOUT $fe, 1,$fe, 2, "T.MIN T.ACT T.MAX" ;limpiar LCD y sacar texto
    dato = dato /128 ; el dato dividir para 128= C/AD de 9 bits
    LCDOUT $fe,$c6,DEC dato,g,"C" ;Display el decimal de dato(Temp Actual)
    LCDOUT $fe,$c0,DEC tempMin,g,"C" ;Display el decimal de tempMin
    LCDOUT $fe,$cc,DEC tempMax,g,"C" ;Display el decimal de tempMax

    FOR X = 0 TO 100 ;Pausa: Esta pausa es para evitar cambios bruscos de la Temp Actual
        IF enter =1 THEN grabar1a
            PAUSE 15
    NEXT


    IF dato < tempmin THEN calentar ;si dato es<tempMin ir a calentar
    IF dato > tempMAX THEN enfriar ;si dato es>tempMax ir a enfiriar
    
    LOW calf : LOW vent ;apagamos calefactor y ventilador

GOTO sensar ;continuar sensando

calentar:
    HIGH calf : LOW vent; Encendemos el calefactor
GOTO sensar

enfriar:
    HIGH vent : LOW calf; Encendemos el ventilador
GOTO sensar

grabar1a:

GOSUB soltar; ;programa antirrebote de tecla

grabar1:

; Aqui vamos a programar la temperatura Minima

    LCDOUT $fe, 1, $fe, 2, "PROGRAMAR TEMP:"
    LCDOUT $fe,$c0,"Minima = ",DEC tempMIN ,g,"C"
    PAUSE 100
    
        IF bOTONbajar=1 THEN restar1; Si presionamos el pulsador (-) nos vamos a restar
        IF bOTONsubir=1 THEN sumar1; Si presionamos el pulsador (+) nos vamos a sumar
        IF enter=1 THEN grabarA
    
GOTO grabar1

restar1:

    GOSUB soltar ;programa antirrebote de tecla
    IF tempMIN < 9 THEN grabar1 ; Limite minimo para la temperatura minima
    tempMIN= tempMIN -1 ; Restamos el valor de temMin
    
    GOTO grabar1
     
sumar1:

    GOSUB soltar
    IF tempMIN > 18 THEN grabar1 ; Limite maximo para la temperatura minima
    tempMIN= tempMIN + 1 ; Sumamos el valor de temMin
    
GOTO grabar1

grabarA:

    GOSUB soltar
    ; Grabamos el valor de la temperatura minima programada en la memoria EEPROM
    WRITE 0,tempMIN ;escribir en la dirección 0 de la EEPROM

grabar2: 

; Aqui vamos a programar la temperatura Minima

    LCDOUT $fe, 1, $fe, 2, "PROGRAMAR TEMP:"
    LCDOUT $fe,$c0,"Maxima = ",dec tempMAX ,g,"C"
    PAUSE 100
    
        IF bOTONbajar=1 THEN restar2
        IF bOTONsubir=1 THEN sumar2
        IF enter=1 THEN grabarB
        
GOTO grabar2

restar2:

    GOSUB soltar
    IF tempMAX < 24 THEN grabar2 ; Limite minimo para la temperatura maxima
    tempMAX= tempMAX -1
    
GOTO grabar2

sumar2:

    GOSUB soltar
    IF tempMAX > 40 THEN grabar2 ; Limite maximo para la temperatura maxima
    tempMAX= tempMAX + 1
    
GOTO grabar2

grabarB:

    GOSUB soltar
    ; Grabamos el valor de la temperatura minima programada en la memoria EEPROM
    WRITE 1,tempMAX;escribir en la dirección 1 de la EEPROM
    
GOTO inicio

soltar: ;programa antirrebote de tecla

soltar2:

    IF bOTONbajar=1 THEN soltar2
    IF bOTONsubir=1 THEN soltar2
    IF enter=1THEN soltar2
    PAUSE 100
    
RETURN

DESCARGA EL CÓDIGO Y LA SIMULACIÓN AQUÍ:

0/Post a Comment/Comments