Alarma con sensores PIR de calor los detecta por medio de interrupciones, que filtran falsos disparos del sensor, da orden de grabar video con tres cámaras, acciona una sirena

Dependencies:   mbed

Fork of INTERUPCIONES by Gustavo Ramirez

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /*
00002 Este programa se escribe para un sistema de alarmas de una Finca.
00003 dispone de tres sensores PIR instalados en tres partes de la finca: adelante, atras
00004 y vigilan un plato de directTV.
00005 se instalaron tres camaras para gravar video 
00006 la alarma tiene sirena de potencia
00007 con la deteccion de cualquier PIR se acciona su camara respectiva de su zona y 
00008 la sirena por un minuto
00009 Los sensores se captan en modo interupcion
00010 el sensor normalmente tiene una resistencia baja en la salida (10-50 ohmios)
00011 cuando hay señal o objeto detectado la resistencia es muy alta casi infinita
00012 ese valor se conserva durante tres segundos y vuelve a ser baja.
00013 el programa espera que la señal sea estable en un periodo de 600mS
00014 si el pulso es mas corto ignora la alarma para evitar falsos disparos
00015 mas adelante le incorporaremos enviar mensajes por modem GSM
00016 la prueba se hace al pulso bajo
00017 para pulso alto cambiar a "rise" la configuracion de la interupcion
00018 y las lineas parecidas a estas de abajo
00019 asi: if(!PIR_PORTON){ para los de caida  (con fall)
00020 asi: if(PIR_PORTON){  para los de subida (con rise)
00021 
00022 */
00023 
00024 #include "mbed.h"
00025 int porton,trasera,plato;
00026 int espera=600;
00027 
00028 
00029 //interupcion de sensores pir instalados
00030 InterruptIn PIR_PORTON(PTA12); //piroelectrico de entrada principal
00031 InterruptIn PIR_TRASERO(PTA13);//piroeelectrico de ventana de atras 
00032 InterruptIn PIR_PLATO(PTA17);//piroelectrico del plato DIRECtv
00033 InterruptIn button(PTD4);
00034 
00035 //Salidas para activar Camaras
00036 DigitalOut Camara_porton(PTB1);
00037 DigitalOut Camara_trasera(PTB2);
00038 DigitalOut Camara_plato(PTB3);
00039 
00040 //salidas para el parlante;
00041 DigitalOut sirena(PTB4);
00042 DigitalOut led1(LED1);
00043 DigitalOut led2(LED2);
00044 DigitalOut led3(LED3);
00045 DigitalOut flash(LED3);
00046 
00047 //las interupciones se disparan por flanco de caida de los sensores pir
00048 //para filtrar falsos disparos se determina si la señal del pir alcanza el tiempo minimo 
00049 //llamado "espera"  en ms.
00050 //se usan las banderas: porton, plato, trasera para determinar que alarma se activa
00051 
00052 //interupcion por deteccion PIR del porton 
00053 void Pir_Del(){
00054     wait_ms(espera);
00055     if(!PIR_PORTON){
00056     porton=1;
00057     return;
00058     }
00059 }
00060 
00061 //interupcion por deteccion PIR trasero 
00062 void Pir_Tras() {
00063     wait_ms(espera);
00064     if(!PIR_TRASERO){
00065     trasera=1;
00066     return;
00067     }    
00068 }
00069 
00070 //interupcion por deteccion PIR plato 
00071 void Pir_Plato() {
00072     wait_ms(espera);
00073     if(!PIR_PLATO){
00074     plato=1;
00075     return;
00076     }    
00077 }
00078 
00079 //ciclo principal;
00080  
00081 int main(){
00082       led1=1;
00083       led2=1;
00084       led3=1;
00085       led1=0;
00086       wait(2);
00087       led1=1;
00088     //declaracion de las tres interupciones  
00089     PIR_PORTON.fall(&Pir_Del);    
00090     PIR_TRASERO.fall(&Pir_Tras);  
00091     PIR_PLATO.fall(&Pir_Plato);  
00092     
00093     while(1) {           
00094         if(porton){
00095         Camara_porton=1;
00096         sirena=1;
00097         led1=0;
00098         wait(60);
00099         Camara_porton=0;
00100         sirena=0;
00101         led1=1;
00102         porton=0;
00103         }
00104         
00105         
00106         if(trasera){
00107         Camara_trasera=1;
00108         sirena=1;
00109         led2=0;
00110         wait(60);
00111         Camara_trasera=0;
00112         sirena=0;
00113         led2=1;
00114         trasera=0; 
00115         }
00116         
00117         if(plato){
00118         Camara_plato=1;
00119         sirena=1;
00120         led3=0;
00121         wait(60);
00122         Camara_plato=0;
00123         sirena=0;
00124         led3=1;
00125         plato=0;   
00126         }
00127         
00128    }//while
00129 
00130 
00131 
00132 //****************************************************    
00133 }//main