Alarma 3G por teléfono móvil Índice A.Descripción...................................................................................................................................... 3 B.El esquema.......................................................................................................................................4 C.La placa............................................................................................................................................7 D.El programa..................................................................................................................................... 8 E.Conclusiones finales...................................................................................................................... 13 Francisco Aguilar Segura Alarma 3G A. Descripción Este proyecto trata sobre cómo hacer una alarma ,que sea capaz de detectar al menos 4 alertas diferentes y enviar un mensaje (SMS) diferente para cada una ,informando de la situación de la misma. Se han usados materiales reciclados de mi laboratorio,por lo que no necesariamente ,los materiales usados aquí,son los mejores,se pueden cambiar por los que mas se ajusten a tus necesidades. Vemos por ejemplo que se ha usado un teléfono móvil C55,pero realmente se puede usar cualquier teléfono móvil con 3G que sea capaz de comunicarse a través del puerto UART por comandos AT. Se ha usado También un 16F84 como microprocesador,pero cualquier otro de microchip podría valer,haciendo las modificaciones necesarias en los registros de configuración del pic. Si algo podría ser necesario en un micro diferente seria: mas memoria disponible para mensajes y que posea UART integrado, aunque esto ultimo se soluciona con dos simples resistencias (R5,R6). Los mensajes enviados por el sistemas son: • Alarma humo • Alarma Intruso • Alarma Humedad • Alarma Batería baja Ademas de estas alarmas el sistema responderá a la llamada de un teléfono determinado devolviendo el estatus actual del sistema ,con un mensaje de estatus ok o devolviendo la alarma pertinente,como confirmación de un disparo fortuito de la alarma. 2 B. El esquema 3 Alarma 3G C. La placa Esta es una representación de como queda la placa. Imagen de las pistas y distribución de componentes a tamaño real. 4 D. El programa INCLUDE "modedefs.bas" '...................INICIO DEREGISTROS........................................ 'DEFINE NO_CLRWDT TRISB=%11111001 INTCON =%10011000 'registro de interrupciones OPTION_REG =%00001111 ' habilito las resistencias de pul-up IMPORTANTE y flanco descendente para la int en RB0,preescaler al watchdog ypreescaler:128 TRISA=%00010 'puerta A 3 salidas 2 entradas PORTA=%01010 'TRISB=%11110001 'puerto B 4 ent 4 sal 'PORTB=%11110000 'indicamos el estado salidas que queremos en el inicio '....................DECLARACION VARIABLES ................................... B0 VAR WORD CONTADOR VAR BYTE las salidas apagadas RBIF VAR INTCON.0 'bandera de interrupcion del port b INTF VAR INTCON.1 'bandera de interrupcon general GIE VAR INTCON.7 'habilita las interrupciones general INTE VAR INTCON.4 lED VAR PORTA 'variable que controla el led Rojo CON %01000 'variable que controla el led bicolor en rojo Verde CON %00100 ''variable que controla el led bicolor en rojo Rx VAR PORTB.0 por donde se reciben los datos hacia el telefono Tx VAR PORTB.1 por donde se tranmiten los datos hacia el telefono Humo VAR PORTB.5 que controla la entrada del detector de humos Mov VAR PORTB.6 que controla la alarma del detector de movimientos Tension VAR PORTB.4 que controla que se mantiene la tension de alimentacion o no. Temp VAR PORTB.7 que controla la si hay un exceso de temperatura HayHumo VAR BIT 'variable a la que se le asigna el estado del pin humo HayMov VAR BIT 'variable a la que se le asigna el estado del pin mov Tens_Baja VAR BIT 5 'todas ' 'pin 'pin 'pin 'pin 'pin 'pin Alarma 3G 'variable a la que se le asigna el estado del pin tension Temp_Alta VAR BIT 'variable a la que se le asigna el estado del pin temp HayLLamada VAR BIT 'variable a la que se le asigna el estado las llamadas var1 VAR BYTE Velo VAR BYTE 'variable que determina la velocidad del parpadeo de lucecita Activaint VAR PORTB.2 'variable que habilita o no el transistor de entrada a las interrupciones. ' '....................INICIO DE VARIABLES ....................................... CONTADOR=0 HayHumo=0 HayMov=0 Tens_Baja=0 Temp_Alta=0 HayLLamada=0 var1=0 Velo=0 Activaint=1 '....................INICIO DE PROGRAMA......................................... 'INTCON =%10011000 'registro de interrupciones 'OPTION_REG =%00001111 ' habilito las resistencias de pul-up IMPORTANTE y flanco descendente para la int en RB0,preescaler al watchdog ypreescaler:128 ON INTERRUPT GOTO INTERRUPCION1 GOTO INICIOPGM DISABLE 'Deshabilito las int para que no se produzca otra mientras_ INTERRUPCION1: IF INTF=1 THEN ha producido int en RB0 'if humo=1 and mov=1 then HayLLamada=1 INTF=0 'endif 'Vuelve a la direccion del pgm donde lo dejó RESUME ENDIF 'si se '.....................interrupciones en la puerta b............................. IF RBIF=1 THEN ha producido int en RB0 PAUSE 200 'antirrebote 'si se '...........HUMO.................................... IF Humo=0 THEN 'interrupcion en rb5 hay humo 6 HayHumo=1 ENDIF '...........MOVIMIENTO.............................. IF Mov=0 THEN 'interrupcion en rb6 alarma de movimiento HayMov=1 ENDIF '...........TENSION................................. IF Tension=0 THEN 'interrupcion en rb4 alarma de movimiento Tens_Baja=1 ENDIF '...........TEMPERATURA............................. IF Temp=0 THEN 'interrupcion en rb7 alarma de movimiento Temp_Alta=1 ENDIF RBIF=0 borro la bandera de int del puerto rb RESUME 'RESUME ES MUY IMPORTANTE ubicarlo bien debe estar a la salida ENDIF 'Vuelve a la direccion del pgm donde lo dejó ' ENABLE 'Vuelvo a habilitar las interruociones '.............................Programa Principal................................'programa principal: iniciopgm: 'a dormir SLEEP 1 'se ha despertado despues de 2,3 segundos y testea todas las variables por si hay alguna activada 'aunque si se activara alguna ya sale ,me da mejor resultado al tener mas espacio el la pila 'el no saturar de instruccines la rutina de interrupccion. 'si la bandera de humo se ha levantado entra IF HayHumo=1 THEN 'desactiva las int en rb0/int por medio del transistor T1 asi cuando contesta el telefono OK Activaint=0 'no se provoca otro disparo no deseado Velo=200 'velo marca la velocidad con la que el unico led parpadea de rojo a verde GOSUB lUCECITAS 'lucecitas parpadea de rojo a verde con la velocidad velo 7 Alarma 3G GOSUB MENSAJES el mensaje ALARMA HUMO GOSUB espera 'vuelve a activar las int en rb0/int Activaint=1 la bandera de humo HayHumo=0 ENDIF IF Tens_Baja=1 THEN Activaint=0 Velo=150 GOSUB lUCECITAS GOSUB MENSAJES GOSUB espera Activaint=1 HayMov=0 ENDIF IF HayMov=1 THEN Activaint=0 Velo=100 GOSUB lUCECITAS GOSUB MENSAJES GOSUB espera Activaint=1 HayMov=0 ENDIF IF HayLLamada=1 THEN 'envia 'borra Activaint=0 Velo=50 GOSUB lUCECITAS GOSUB MENSAJES GOSUB espera HayLLamada=0 Activaint=1 ENDIF lED=Rojo cambia el color del led SLEEP 1 lED=Verde GOTO iniciopgm 'y '.........................subrutinas-------------------------------------------lUCECITAS:'..................................................................... FOR CONTADOR=0 TO 10 lED=Rojo PAUSE Velo lED=Verde PAUSE Velo NEXT RETURN 8 ESPERA:'........................................................................ PAUSE 5000 RETURN MENSAJES:'...................................................................... IF HayLLamada=1 THEN SEROUT Tx,T9600,["ATH0",13] PAUSE 500 ENDIF SEROUT Tx,T9600,["AT+CMGS=23",13] '24 'comando para enviar mensje en modo PDU 24=48 CAR EN TOTAL/2 menos los dos ceros del principiop PAUSE 500 ' SEROUT tx,T9600,["0011000B914316098167F80000AA0B"] 'PARTE COMUN DEL MSJ +---alarmas IF HayHumo=1 OR Humo=0 THEN ha quedado cerrado el contacto de la alarma or humo nosSEROUT tx,T9600,["416650DA0C8290D5E613",26] 'mensaje ALARMA HUMO -respondera con un mensaje a la llamada RETURN ENDIF IF HayMov=1 OR mov=0 THEN SEROUT tx,T9600,["416650DA0C829A4F6B12",26] 'mensaje ALARMA MOVI RETURN ENDIF IF Temp_Alta=1 OR temp=0 THEN SEROUT tx,T9600,["416650DA0C82A8C52614",26] 'mesaje ALARMA TEMP RETURN ENDIF IF Tens_Baja=1 OR tension=0 THEN SEROUT tx,T9600,["416650DA0C82A8C5E614",26] 'mesaje ALARMA TENS RETURN ENDIF IF HayLLamada=1 AND HayHumo=0 AND HayMov=0 AND Tens_Baja=0 AND Temp_Alta=0 THEN SEROUT tx,T9600,["416650DA0C4E41CF2508",26] 'ALARMAS OK RETURN ENDIF RETURN END 9 'si se Alarma 3G E. Conclusiones finales El prototipo ha funcionado a la perfección ,sin ningún problema . Para un futuro se puede contemplar un cargador solar para hacer completamente autónomo el sistema y no tener conectada la tensión. Este escenario sería el de un chalé o casa aislada de vacaciones o vivienda no habitual F.Aguilar . 10