Luz por detector de movimiento y crepuscular Senpir

17,027 views

Published on

Interruptor crepuscular y de movimiento microcontrolado documentado paso a paso.

Este documento te enseña a crear un dispositivo electrónico con un circuito capaz de encender la luz al caer la noche y de apagarla al salir el sol.

Es un proyecto pensado para cualquier tipo de uso, ya sea el poder tener luz de un lado al otro de una casa sin necesidad de tocar el interruptor, hasta el activado de una alarma en caso de detección de intrusos.

Published in: Education, Technology, Business
8 Comments
4 Likes
Statistics
Notes
No Downloads
Views
Total views
17,027
On SlideShare
0
From Embeds
0
Number of Embeds
5,386
Actions
Shares
0
Downloads
571
Comments
8
Likes
4
Embeds 0
No embeds

No notes for slide

Luz por detector de movimiento y crepuscular Senpir

  1. 1. Luz por detector de movimiento y crepuscular “Senpir” Por Ángel Acaymo M. G. – Tenerife, España metaconta@gmail.com INTRODUCCIÓN Alguna vez, en la entrada principal de una casa terrena o chalet, después de pasar por el jardín y antes de llegar a la puerta principal de la vivienda, por la noche podría ser molesto al intentar abrir la puerta en ausencia o insuficiente luz. A veces, es buena idea instalar un pequeño aparato electrónico hecho por uno mismo, un circuito capaz de realizar ciertas tareas y estar más cómodo en ciertas situaciones como ésta. Al caer la noche sería una buena idea que el circuito electrónico encienda la luz y se apague cuando empieza a llegar el Sol en las primeras horas de la mañana, por lo que se conoce como interruptor crepuscular. En caso de que no quiera consumir luz durante toda la noche o bien, utiliza las lámparas compactas también conocidas como lámparas de bajo consumo o otra posibilidad que sólo se encienda la lámpara al detectar la presencia de una persona al acercarse a la puerta principal, eso si, al entrar a la vivienda la lámpara se quedará un tiempo encendida seleccionado por la persona, por ejemplo, unos cinco minutos, después se apaga. Ambos modos lo puedes seleccionar en el propio circuito electrónico por el cual lo llamo y llamaré a partir de ahora, “Senpir”. Si lo deseas, puedes hacer el efecto contrario gracias al relé que ya tiene un conmutador e incluso en el propio sensor de movimiento. Este pequeño proyecto está pensado para éste tipo de aplicaciones o cualquier otra tarea como al encender la lámpara mientras vas a la barbacoa que tienes en el otro lado del jardín sin tocar el interruptor, al ser detectado por el sensor de movimiento (PIR), activa una alarma desde el jardín si entra un intruso, etc. Sabiendo que Senpir está controlado por un microcontrolador PIC, podría servir un pequeño proyecto de fin de curso para estudiantes de la rama electricidad- electrónica e incluso cualquier aficionado con un mínimo de conocimiento de electrónica básica. Senpir tiene dos circuitos impreso independiente, una de control y la otra de fuente de alimentación conectada entre sí con un conector y dentro de la misma caja. El motivo de diseñar dos placas diferentes en el mismo circuito electrónico de tipo módulos, es por si cualquier causa falla la placa de la fuente de alimentación, hay corte de la corriente eléctrica desde la red de la casa o por otros motivos, puedes sustituirla por otra placa o conectarla a una batería a parte e incluso en placas solares fotovoltaicas.
  2. 2. Las características técnicas del Senpir son muy sencillas y entre ella destaca dos placas independientes: - Fuente de alimentación con un transformador necesario para lograr una tensión fija y estabilizada mediante un regulador. - Un Relé con un conmutador para la lámpara u otra aplicación. - Un microcontrolador PIC que controla el circuito. - Un sensor de Luz o LDR que detecta la presencia de la luz. - Un sensor infrarrojo de movimiento o PIR. Fig 1. Fotografía del Senpir.
  3. 3. Fig 2. Componentes del circuito. DISEÑO DEL CIRCUITO El control central del circuito es un microcontrolador que controla no sólo el funcionamiento de de las señales de los sensores, de luz y movimiento sino los temporizadores para el relé y diodos led de aviso. Los microcontroladores incluyen microprocesador, memoria del programa, memoria de datos, puertos de entradas y salidas y otras características todo en el mismo encapsulado, ahí está claro la ventaja su reducido tamaño. El proyecto se ha elegido el popular microcontrolador PIC 16F84A del fabricante Microchip Thecnology Inc. Es muy conocido, donde hay más información, ejemplos, proyectos para aprendizaje y fácil uso. El microcontrolador está desarrollado con un programa bajo el entorno de desarrollo llamado MPLAB que puedes descargar y usar gratuitamente en la Web del fabricante Microchip así como las hojas de datos de todos los dispositivos PIC entre otros periféricos, http://www.microchip.com
  4. 4. DESCRIPCIÓN Y FUNCIONAMIENTO DEL HARDWARE - Sensor de luz El sensor LDR viene de la expresión inglesa Light Dependent Resistor. Son componentes pasivos cuya resistencia o su valor óhmico varía en función de la luz recibida. Con él puedes detectar la presencia de luz y oscuridad para activar o desactivar el relé de la lámpara. Al recibir más luz, baja su valor óhmico hasta que el microcontrolador lo detecte y ejecuta su tarea determinada. - Sensor PIR El sensor PIR “Passive Infra Red” es un dispositivo piroeléctrico que mide los cambios de niveles de radiación infrarroja emitida por los objetos de su entorno alrededor de seis metros. Cambia su estado lógico en una patilla conectado al microcontrolador. Este sensor es de muy bajo costo y pequeño, se suele utilizar en sistemas de alarmas, iluminación controlada por movimiento y aplicaciones de robótica.
  5. 5. Fig 3. Detector de movimiento PIR. Sus características técnicas son: - Voltaje de alimentación: 5VDC. - Visión máxima 6 metros. - Estado en su salida TTL. - Polaridad de salida seleccionable. - Poco tiempo de calibración. El sensor PIR sólo usa tres terminales, dos de alimentación y uno de datos que se conecta al microcontrolador. Fig 4. Conexión del PIR al microcontrolador. El circuito electrónico se instala dentro de la vivienda con los sensores al exterior. El sensor de luz se instala lejos de la lámpara o que no le dé luz sobre ella excepto la luz ambiente. El sensor de movimiento se instala bajo la lámpara sin que llegue el calor y luz directa ya que puede dar un funcionamiento no esperado. La fuente de alimentación que tiene 5 voltios desde de la tensión continua de 12 voltios y al menos 1 amperio. En este circuito se encuentra un regulador de tensión 7805. En su entrada dispone de un puente de diodos rectificador de onda completa de 12 voltios con su condensador que hace de filtrado para obtener 12 voltios en continua. El regulador 7805 se encarga de estabilizar los 5 voltios de alimentación del otro circuito principal más los 12 voltios para alimentar el relé. Al final se encuentra un diodo Led de encendido.
  6. 6. Fig 5. Esquema fuente de alimentación. • Fig 6. Esquema eléctrico del circuito principal. El circuito principal está controlado con un µC PIC 16F84A donde se comunican dos sensores como entrada, un relé como salida y un micro interruptor para controlar el tipo de configuración deseada y tiempos de encendido. En las entradas del µC PIC 16F84A, está conectado un micro interruptor, sensor de luz y sensor de movimiento. El sensor de luz o LDR conectado al puerto RB3 (pin 9) como entrada, detecta el día y la noche con la finalidad de hacer un interruptor crepuscular, es decir, que sólo se enciende la lámpara o al caer la noche. Tiene un tiempo de veinte segundos para asegurarse que realmente es de noche o de día. El sensor de movimiento o PIR, conectado al puerto RB1 (pin 7) como entrada. Tienen elementos fabricados de un material cristalino que genera una carga eléctrica cuando se expone a una radiación infrarroja. Los cambios de la
  7. 7. cantidad de radiación producen cambios de voltaje los cuales son medidos por un amplificador. El sensor PIR contiene unos filtros especiales llamados lentes de Fresnel que enfocan las señales infrarrojas sobre el elemento sensor. Cuando las señales infrarrojas del ambiente donde se encuentra el sensor cambian rápidamente, el amplificador activa la salida para indicar movimiento. Esta salida se queda activa unos segundos permitiendo al micro controlador saber si hubo movimiento. Funciona a 5VDC, gracias a que tiene un patillaje o pin que se conecta al micro controlador directamente, el sensor PIR funciona como un interruptor a la vez puedes cambiar mediante un jumper el estado lógico de la salida si deseas el efecto contrario. En la salida RA3 (pin 2) del micro controlador dispone un relé de 12VDC para activar una lámpara o lámpara de la red (220VAC). En la base del transistor T1, pasa a conducción y activa el relé. Este circuito también aísla eléctricamente la carga del micro controlador. El valor de la potencia a controlar depende de los contactos del relé y varía mucho según el modelo, en este caso soporta 10 Amperios. El diodo paralelo al relé se incluye de protección de los transistores por la fuerza contraelectromotriz. Microinterruptor Pin Puerto B ON OFF 4 RB4 (Pin 10) PIR LDR 3 RB5 (Pin 11) 5 m. 0 2 RB6 (Pin 12) 30 m. 0 1 RB7 (Pin 10) 1 h. 0 Tabla 1. Micro interruptor. A su salida del puerto A, se visualiza los Led de avisos. Led verde visualiza que se ha elegido la opción interruptor crepuscular y el rojo visualiza que se ha elegido la opción del sensor de movimiento que puedes seleccionar en el microinterruptor Int_RB4 (pin 10). Le Led azul indica que está activado o desactivado el relé en el momento de conmutar así sabrás sin salir de casa su estado actual mirando el circuito o la caja donde lo tienes instalado, en cambio, el Led ambar o amarillo significa el encendido de la fuente de alimentación. Led Amarillo Fuente alimentación Verde LDR Rojo PIR Azul Relé Tabla 2. Indicadores de los Led.
  8. 8. PROGRAMA DEL MICROCONTROLADOR 16F84A El programa del PIC16F84A está escrito con el lenguaje ensamblador. Mediante el diagrama de flujo, es más fácil ver a simple vista un esquema completo sobre su funcionamiento paso por paso. Inicio PORTA = Salida PORTB = Entrada En principio Bombilla apagada Principal No LED Rojo = OFF ¿Int_RB4 LED Verde = ON activado? Si No Retardo 20 ¿LDR en LED Verde = OFF segundos oscuridad? LED Rojo = ON Si No Si Si ¿PIR ¿LDR ilum. por ¿LDR en Bombilla y LED detectada el Sol? oscuridad? Azul encendido presencia? Retardo 20 Si segundos No No Si Bombilla y LED ¿RB5 Retardo 5 Azul apagado activado? minutos No No Si ¿LDR aún en Bombilla y LED Bombilla y LED ¿RB6 Retardo 30 oscuridad? Azul apagado Azul apagado activado? minutos Si No Si Bombilla y LED ¿RB7 Retardo 1 Azul encendido activado? hora No FIN Diagrama de flujo. Fig 7. Diagrama de flujo.
  9. 9. Fig 8. Cara componentes. Fig 9. Cara pistas esquema.
  10. 10. Fig 10. Cara pistas.
  11. 11. Fig 11. Vista perspectiva.
  12. 12. Fig 12. Vista trasera.
  13. 13. Fig 13. Proyecto acabado.
  14. 14. VÍDEOS Vídeos del circuito Senpir funcionando con el PIC16F84A, también con código fuente para el PIC16F88. 1) Ver vídeo. 2) Ver vídeo.
  15. 15. LISTA DE MATERIALES Resistencias: R1, R2, R3, R4, R11 = 10 KΩ R5, R6, R7, R9 = 330 Ω R10 = 100 Ω R12 = 33 KΩ Condensadores: C1, C2 = 22 pF Diodos: D1 = Led 5 mm bicolor verde rojo D2 = Led 5 mm Azul D3 = 1N4148 Transistor: T1 = 2N2222 Varios: R = LDR X1 = 4MHZ (Cristal de cuarzo) DSW1 = 4 interruptores P1 = 4K7 Ω Potenciómetro RL1 = 12VDC, 10Amp, 1 Conmutador S1 = Botón reset J1, J2, J4 = 2 bornes J3 = 3 bornes J5 = 4 bornes IC1 = PIC16F84A-04 (También compatible con PIC16F88)
  16. 16. CÓDIGO FUENTE PIC16F84A ;¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬Senpir.asm¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ ; ; PROGRAMA: "Senpir". Luz por detector de movimiento y crepuscular. ; AUTOR: Ángel Acaymo M. G. ; E-MAIL; metaconta@gmail.com ; PROCESADOR: PIC16F84A ; FRECUENCIA: 4 MHz ; VERSIÓN: 1.00 ; DESCRIPCIÓN: ; ; Programa de un interruptor con sensor movimiento y de luz solar: Si es de noche, ; mientras el sensor de movimiento (PIR) detecta la presencia de alguien ; entorno a 6 metros, activa o se pone a 1 la entrada RA3 y la lámpara ; se enciende. En caso de que sea de día detectado por la LDR, nunca se enciende ; la lámpara. En la otra opción, cuando la LDR detecta la noche o falta de Sol, ; la lámpara se enciende, cuando sea de día, la lámpara se apaga. ; En los microinterruptores puedes activar el tiempo que tarda en apagarse la ; lámpara después de ser detectado por el sensor Pir y de noche de un máximo ; una hora y treinta y cinco minutos. ; ; ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ ; DATOS ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ LIST P=16F84A INCLUDE <P16F84A.INC> __CONFIG 3FF1 __idlocs 0001 ; ID, versión del programa. CBLOCK 0x0C ENDC #DEFINE Led_verde PORTA,0 ; Led verde indica opción LDR seleccionada. #DEFINE Led_rojo PORTA,1 ; Led rojo indica opción PIR seleccionada. #DEFINE Led_azul PORTA,2 ; Led azul indica que el Relé está activado. #DEFINE lámpara PORTA,3 ; lámpara. #DEFINE PIR PORTB,1 ; Sensor PIR. #DEFINE LDR PORTB,3 ; Sensor LDR. #DEFINE Int_RB4 PORTB,4 ; Interruptor RB4. #DEFINE Int_RB5 PORTB,5 ; Interruptor RB5. #DEFINE Int_RB6 PORTB,6 ; Interruptor RB6. #DEFINE Int_RB7 PORTB,7 ; Interruptor RB7.
  17. 17. ; EEPROM ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ ORG 0x2100 ; Comienza en la dirección 0 de la memoria EERPOM. ; Datos nombre del archivo, versión del programa ; y dirección del correo electrónico. DE "Senpir.asm. v1.0. 25-03-2009. metaconta@gmail.com", 0x00 ; CÓDIGOS ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ ORG 0 Inicio bsf STATUS,RP0 ; Accede al Banco 1. clrf PORTA ; Puerto A como salidas. movlw b'11111111' ; Las 8 líneas del puerto B se configura como entradas. movwf PORTB bcf STATUS,RP0 ; Accede al Banco 0. clrf PORTA ; Supuestamente la lámpara y Led apagadas. Opcion_principal btfss Int_RB4 ; ¿Bit 4 del PORTB es "1"? ¿Int_RB4 activado? goto Opcion_LDR ; No, activa modo LDR. goto Opcion_PIR ; Sí, activa modo PIR. ; INTERRUPTOR CREPUSCULAR LDR ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ Opcion_LDR bcf Led_rojo ; Se apaga el Led rojo. bsf Led_verde ; Enciende Led verde indicando modo LDR activado. btfss LDR ; ¿La entrada LDR es igual a 1?, ¿LDR en oscuridad? goto Apaga_la_lámpara ; No, la LDR está iluminada por el Sol. La lámpara se apaga. Enciende_la_lámpara call Retardo_20_seg ; Espera 20 segundos para confirmar la oscuridad. btfss LDR ; ¿Entrada es igual a 1?, ¿LDR aún en oscuridad? goto Opcion_principal ; No, sale fuera. bsf lámpara ; Sí, enciende la lámpara. bsf Led_azul ; Led_azul activo. goto Opcion_principal Apaga_la_lámpara call Retardo_20_seg ; Espera 20 segundos para confirmar la oscuridad. btfsc LDR ; ¿Entrada es = 0?, ¿LDR sigue iluminada por luz del sol? goto Opcion_principal ; No, sale fuera. bcf lámpara ; Sí, apaga lámpara. bcf Led_azul ; Led_azul indica que la lámpara está apagada. goto Opcion_principal
  18. 18. ; DETECTOR DE MOVIMIENTO ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ Opcion_PIR bcf Led_verde ; Apaga el Led verde de aviso. bsf Led_rojo ; Enciende Led rojo avisando que está activado el modo PIR. btfss LDR ; ¿La entrada LDR es igual a 1?, ¿LDR en oscuridad? goto lámpara_OFF ; No. btfss PIR ; ¿La entrada PIR es igual a 1?, ¿PIR ha detectado presencia? goto lámpara_OFF ; No, no ha detectado presencia o movimiento. lámpara_ON bsf lámpara ; Sí, enciende la lámpara. bsf Led_azul ; Led_azul activo. btfss Int_RB5 ; ¿Bit 5 del PORTB es igual a 1?, ¿Activado el interruptor RB5? goto RB6 ; No, salta a la línea siguiente. call Retardo_5_min ; Tiempo lámpara encendida 5 minutos. RB6 btfss Int_RB6 ; ¿Bit 6 del PORTB es igual a 1?, ¿Activado el interruptor RB6? goto RB7 call Retardo_30_min ; Tiempo lámpara encendida 30 minutos. RB7 btfss Int_RB7 ; ¿Bit 7 del PORTB es igual a 1?, ¿Activado el interruptor RB7? goto Opcion_principal call Retardo_1_hora ; Tiempo lámpara encendida 1 hora. goto Opcion_principal lámpara_OFF bcf lámpara ; Apaga lámpara. bcf Led_azul ; Apaga Led_azul. goto Opcion_principal ; SUBRUTINAS ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ ; Retardo de 20 segundos ................................................................ cblock ret_00 ret_01 ret_02 Nulo endc Retardo_20_seg ;19999992 ciclos movlw 0xB5
  19. 19. movwf ret_00 movlw 0x99 movwf ret_01 movlw 0x2C movwf ret_02 Retardo_20_seg_0 decfsz ret_00, f goto $+2 decfsz ret_01, f goto $+2 decfsz ret_02, f goto Retardo_20_seg_0 ;4 ciclos goto $+1 goto $+1 ;4 ciclos (incluyendo call) return ; Retardo de 5 minutos .................................................................. cblock ret_05 ret_06 ret_07 ret_08 endc Retardo_5_min ;299999995 ciclos movlw 0x54 movwf ret_05 movlw 0xA1 movwf ret_06 movlw 0xFD movwf ret_07 movlw 0x02 movwf ret_08 Retardo_5_min_0 decfsz ret_05, f goto $+2 decfsz ret_06, f goto $+2 decfsz ret_07, f goto $+2 decfsz ret_08, f goto Retardo_5_min_0
  20. 20. ;1 ciclo nop ;4 ciclos (incluyendo call) return ; Retardo de 30 minutos ................................................................. cblock ret_09 ret_10 ret_11 ret_12 endc Retardo_30_min ;1799999989 ciclos movlw 0xFE movwf ret_09 movlw 0xC2 movwf ret_10 movlw 0xEC movwf ret_11 movlw 0x0C movwf ret_12 Retardo_30_min_0 decfsz ret_09, f goto $+2 decfsz ret_10, f goto $+2 decfsz ret_11, f goto $+2 decfsz ret_12, f goto Retardo_30_min_0 ;7 ciclos goto $+1 goto $+1 goto $+1 nop ;4 ciclos (incluyendo call) return ; Retardo de 1 hora ..................................................................... cblock ret_13 ret_14 ret_15
  21. 21. ret_16 endc Retardo_1_hora ;3599999989 ciclos movlw 0xFE movwf ret_13 movlw 0x84 movwf ret_14 movlw 0xD8 movwf ret_15 movlw 0x18 movwf ret_16 Retardo_1_hora_0 decfsz ret_13, f goto $+2 decfsz ret_14, f goto $+2 decfsz ret_15, f goto $+2 decfsz ret_16, f goto Retardo_1_hora_0 ;7 ciclos goto $+1 goto $+1 goto $+1 nop ;4 ciclos (incluyendo call) return END
  22. 22. CÓDIGO FUENTE PIC16F88 ;¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬Senpir.asm¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ ; ; PROGRAMA: "Senpir". Luz por detector de movimiento y crepuscular. ; AUTOR: Ángel Acaymo M. G. ; E-MAIL; metaconta@gmail.com ; PROCESADOR: PIC16F88 ; FRECUENCIA: 4 MHz ; VERSIÓN: 1.0 ; DESCRIPCIÓN: ; ; Programa de un interruptor con sensor movimiento y de luz solar: ; Si es de noche, ; mientras el sensor de movimiento (PIR) detecta la presencia de alguien ; entorno a 6 metros, activa o se pone a 1 la entrada RA3 y la lámpara ; se enciende. En caso de que sea de día detectado por la LDR, nunca se ; enciende ; la lámpara. En la otra opción, cuando la LDR detecta la noche o falta de ; Sol, la lámpara se enciende, cuando sea de día, la lámpara se apaga. ; En los microinterruptores puedes activar el tiempo que tarda en apagarse ; la lámpara después de ser detectado por el sensor Pir ; y de noche de un máximo una hora y treinta y cinco minutos. ; ;¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ ; __CONFIG ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ ; ; _CP_OFF: Protección de código DESACTIVADO. ; _DEBUG_OFF: Debug en circuito DESACTIVADO. ; _WRT_PROTECT_OFF: Protección a escritura en memoria de programa DESACTIVADO. ; _CPD_OFF: Protección de código de datos DESACTIVADO. ; _LVP_OFF: Programación en baja tensión DESACTIVADO. ; _BODEN_OFF: Reset por Brown-out DESACTIVADO. ; _MCLRE_ON: Reset por pin externo ACTIVADO. ; _PWRTE_ON: Retraso al reset ACTIVADO. ; _WDT_OFF: Watchdog DESACTIVADO. ; _XT_OSC: Oscilador externo del tipo XT. ;--------------------------------------------------------------------------- ; _IESO_OFF: Modo de intercambio de externo a interno DESACTIVADO. ; _FCMEN_OFF: Monitor de CLK DESACTIVADO. ; DATOS ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ LIST P=16F88 INCLUDE <P16F88.INC> __CONFIG _CONFIG1, _CP_OFF & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF __idlocs 0001 ; ID, versión del programa. CBLOCK 0x20 ENDC #DEFINE Led_verde PORTA,0 ; Led verde indica opción LDR seleccionada.
  23. 23. #DEFINE Led_rojo PORTA,1 ; Led rojo indica opción PIR seleccionada. #DEFINE Led_azul PORTA,2 ; Led azul indica que el Relé está activado. #DEFINE lámpara PORTA,3 ; lámpara. #DEFINE PIR PORTB,1 ; Sensor PIR. #DEFINE LDR PORTB,3 ; Sensor LDR. #DEFINE Int_RB4 PORTB,4 ; Interruptor RB4. #DEFINE Int_RB5 PORTB,5 ; Interruptor RB5. #DEFINE Int_RB6 PORTB,6 ; Interruptor RB6. #DEFINE Int_RB7 PORTB,7 ; Interruptor RB7. ; EEPROM ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ ORG 0x2100 ; Comienza en la dirección 0 de la memoria EERPOM. ; Datos nombre del archivo, versión del programa ; y dirección del correo electrónico. DE "Senpir_16F88.asm. v1.0. 02-01-2010. metaconta@gmail.com", 0x00 ; CÓDIGOS ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ ORG 0 Inicio BANKSEL CMCON ; Cambio al banco 1. movlw b'00000111' ; .7 movwf CMCON ; Comparadores apagados. clrf ANSEL ; Pines digitales. clrf TRISA ; PORTA como salida. movlw b'11111111' movwf TRISB ; PORTB como entrada. BANKSEL PORTA ; Cambio al banco 0. clrf PORTA ; Supuestamente la lámpara y Led apagadas. Opcion_principal btfss Int_RB4 ; ¿Bit 4 del PORTB es "1"? ¿Int_RB4 activado? goto Opcion_LDR ; No, activa modo LDR. goto Opcion_PIR ; Sí, activa modo PIR. ; INTERRUPTOR CREPUSCULAR LDR ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ Opcion_LDR bcf Led_rojo ; Se apaga el Led rojo. bsf Led_verde ; Enciende Led verde indicando modo LDR activado. btfss LDR ; ¿La entrada LDR es igual a 1?, ¿LDR en oscuridad? goto Apaga_la_lámpara ; No, la LDR está iluminada por el Sol. La lámpara se apaga. Enciende_la_lámpara call Retardo_20_seg ; Espera 20 segundos para confirmar la oscuridad. btfss LDR ; ¿Entrada es igual a 1?, ¿LDR aún en oscuridad? goto Opcion_principal ; No, sale fuera. bsf lámpara ; Sí, enciende la lámpara. bsf Led_azul ; Led_azul activo. goto Opcion_principal Apaga_la_lámpara call Retardo_20_seg ; Espera 20 segundos para confirmar la oscuridad. btfsc LDR ; ¿Entrada es = 0?, ¿LDR sigue iluminada por luz del sol? goto Opcion_principal ; No, sale fuera. bcf lámpara ; Sí, apaga lámpara.
  24. 24. bcf Led_azul ; Led_azul indica que la lámpara está apagada. goto Opcion_principal ; DETECTOR DE MOVIMIENTO ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ Opcion_PIR bcf Led_verde ; Apaga el Led verde de aviso. bsf Led_rojo ; Enciende Led rojo avisando que está activado el modo PIR. btfss LDR ; ¿La entrada LDR es igual a 1?, ¿LDR en oscuridad? goto lámpara_OFF ; No. btfss PIR ; ¿La entrada PIR es igual a 1?, ¿PIR ha detectado presencia? goto lámpara_OFF ; No, no ha detectado presencia o movimiento. lámpara_ON bsf lámpara ; Sí, enciende la lámpara. bsf Led_azul ; Led_azul activo. btfss Int_RB5 ; ¿Bit 5 del PORTB es igual a 1?, ¿Activado el interruptor RB5? goto RB6 ; No, salta a la línea siguiente. call Retardo_5_min ; Tiempo lámpara encendida 5 minutos. RB6 btfss Int_RB6 ; ¿Bit 6 del PORTB es igual a 1?, ¿Activado el interruptor RB6? goto RB7 call Retardo_30_min ; Tiempo lámpara encendida 30 minutos. RB7 btfss Int_RB7 ; ¿Bit 7 del PORTB es igual a 1?, ¿Activado el interruptor RB7? goto Opcion_principal call Retardo_1_hora ; Tiempo lámpara encendida 1 hora. goto Opcion_principal lámpara_OFF bcf lámpara ; Apaga lámpara. bcf Led_azul ; Apaga Led_azul. goto Opcion_principal ; SUBRUTINAS ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ ; Retardo de 20 segundos ................................................ cblock ret_00 ret_01 ret_02 Nulo endc Retardo_20_seg ;19999992 ciclos movlw 0xB5 movwf ret_00 movlw 0x99 movwf ret_01 movlw 0x2C movwf ret_02 Retardo_20_seg_0 decfsz ret_00, f goto $+2 decfsz ret_01, f goto $+2 decfsz ret_02, f goto Retardo_20_seg_0
  25. 25. ;4 ciclos goto $+1 goto $+1 ;4 ciclos (incluyendo call) return ; Retardo de 5 minutos ............................................... cblock ret_05 ret_06 ret_07 ret_08 endc Retardo_5_min ;299999995 ciclos movlw 0x54 movwf ret_05 movlw 0xA1 movwf ret_06 movlw 0xFD movwf ret_07 movlw 0x02 movwf ret_08 Retardo_5_min_0 decfsz ret_05, f goto $+2 decfsz ret_06, f goto $+2 decfsz ret_07, f goto $+2 decfsz ret_08, f goto Retardo_5_min_0 ;1 ciclo nop ;4 ciclos (incluyendo call) return ; Retardo de 30 minutos ........................................................ cblock ret_09 ret_10 ret_11 ret_12 endc Retardo_30_min ;1799999989 ciclos movlw 0xFE movwf ret_09 movlw 0xC2 movwf ret_10 movlw 0xEC movwf ret_11 movlw 0x0C
  26. 26. movwf ret_12 Retardo_30_min_0 decfsz ret_09, f goto $+2 decfsz ret_10, f goto $+2 decfsz ret_11, f goto $+2 decfsz ret_12, f goto Retardo_30_min_0 ;7 ciclos goto $+1 goto $+1 goto $+1 nop ;4 ciclos (incluyendo call) return ; Retardo de 1 hora ........................................................... cblock ret_13 ret_14 ret_15 ret_16 endc Retardo_1_hora ;3599999989 ciclos movlw 0xFE movwf ret_13 movlw 0x84 movwf ret_14 movlw 0xD8 movwf ret_15 movlw 0x18 movwf ret_16 Retardo_1_hora_0 decfsz ret_13, f goto $+2 decfsz ret_14, f goto $+2 decfsz ret_15, f goto $+2 decfsz ret_16, f goto Retardo_1_hora_0 ;7 ciclos goto $+1 goto $+1 goto $+1 nop ;4 ciclos (incluyendo call) return END
  27. 27. Autor: Ángel Acaymo M. G. Versión: 2.00 Publicado por primera vez: 16-11-2009 Última actualización: 02-01-2010 www.electronica-pic.blogspot.com www.abcdatos.com/tutoriales/tutorial/v875.html www.pic16f84a.org

×