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

Files at this revision

API Documentation at this revision

Comitter:
tony63
Date:
Tue Dec 12 08:22:49 2017 +0000
Parent:
0:38bcc53b1324
Commit message:
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

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 38bcc53b1324 -r d8dfdd1c3f6b main.cpp
--- a/main.cpp	Wed Apr 20 20:08:14 2016 +0000
+++ b/main.cpp	Tue Dec 12 08:22:49 2017 +0000
@@ -1,50 +1,133 @@
 /*
-ESTE PROGRAMA ES PARA PROBAR INTERUPCIONES POR CAMBIO EN ENTRADA DIGITAL
-ESTAN PROHIBIDOS PARA SIGUIENTES ENTRADAS
-PRB0
-PTB1
-PTB2
-PTB3
-PTC2
-PTC1
-PTE0
-PTE1
-PTC8
-PTC9
-EL RESTO PUEDEN CON INTERUPCION
-SI SE IGNORA ESTO LA FRDMKL25Z SE BLOQUEA Y NO PERMITE CARGAR NINGUN PROGRAMA
-SI FUERON COMPROBADOS:
-PTD2
-PTA13
-PTD5
-PTD0
-PTD1--NO FUNCIONA
-PTD3
-PTA2--NO FUNCIONA
-PTA12
-PTA5
-PTA4
-PTD4
-PTA2--NO FUNCIONA..SE CONFUNCE CON EL PUERTO PTA1  SI SE PROGRAMA PTA2 Y EL CAMBIO ES EN PTA1 SI FUNCIONA
-PUERTO C NO FUNCIONA
-PTA17
+Este programa se escribe para un sistema de alarmas de una Finca.
+dispone de tres sensores PIR instalados en tres partes de la finca: adelante, atras
+y vigilan un plato de directTV.
+se instalaron tres camaras para gravar video 
+la alarma tiene sirena de potencia
+con la deteccion de cualquier PIR se acciona su camara respectiva de su zona y 
+la sirena por un minuto
+Los sensores se captan en modo interupcion
+el sensor normalmente tiene una resistencia baja en la salida (10-50 ohmios)
+cuando hay señal o objeto detectado la resistencia es muy alta casi infinita
+ese valor se conserva durante tres segundos y vuelve a ser baja.
+el programa espera que la señal sea estable en un periodo de 600mS
+si el pulso es mas corto ignora la alarma para evitar falsos disparos
+mas adelante le incorporaremos enviar mensajes por modem GSM
+la prueba se hace al pulso bajo
+para pulso alto cambiar a "rise" la configuracion de la interupcion
+y las lineas parecidas a estas de abajo
+asi: if(!PIR_PORTON){ para los de caida  (con fall)
+asi: if(PIR_PORTON){  para los de subida (con rise)
 
 */
 
 #include "mbed.h"
- 
-InterruptIn button(PTA17);
-DigitalOut led(LED1);
+int porton,trasera,plato;
+int espera=600;
+
+
+//interupcion de sensores pir instalados
+InterruptIn PIR_PORTON(PTA12); //piroelectrico de entrada principal
+InterruptIn PIR_TRASERO(PTA13);//piroeelectrico de ventana de atras 
+InterruptIn PIR_PLATO(PTA17);//piroelectrico del plato DIRECtv
+InterruptIn button(PTD4);
+
+//Salidas para activar Camaras
+DigitalOut Camara_porton(PTB1);
+DigitalOut Camara_trasera(PTB2);
+DigitalOut Camara_plato(PTB3);
+
+//salidas para el parlante;
+DigitalOut sirena(PTB4);
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
 DigitalOut flash(LED3);
- 
-void flip() {
-    led = !led;
-}
- 
-int main() {
-    button.rise(&flip);  // attach the address of the flip function to the rising edge
-    while(1) {           // wait around, interrupts will interrupt this!
-        flash = !flash;
-        wait(0.25);
+
+//las interupciones se disparan por flanco de caida de los sensores pir
+//para filtrar falsos disparos se determina si la señal del pir alcanza el tiempo minimo 
+//llamado "espera"  en ms.
+//se usan las banderas: porton, plato, trasera para determinar que alarma se activa
+
+//interupcion por deteccion PIR del porton 
+void Pir_Del(){
+    wait_ms(espera);
+    if(!PIR_PORTON){
+    porton=1;
+    return;
     }
 }
+
+//interupcion por deteccion PIR trasero 
+void Pir_Tras() {
+    wait_ms(espera);
+    if(!PIR_TRASERO){
+    trasera=1;
+    return;
+    }    
+}
+
+//interupcion por deteccion PIR plato 
+void Pir_Plato() {
+    wait_ms(espera);
+    if(!PIR_PLATO){
+    plato=1;
+    return;
+    }    
+}
+
+//ciclo principal;
+ 
+int main(){
+      led1=1;
+      led2=1;
+      led3=1;
+      led1=0;
+      wait(2);
+      led1=1;
+    //declaracion de las tres interupciones  
+    PIR_PORTON.fall(&Pir_Del);    
+    PIR_TRASERO.fall(&Pir_Tras);  
+    PIR_PLATO.fall(&Pir_Plato);  
+    
+    while(1) {           
+        if(porton){
+        Camara_porton=1;
+        sirena=1;
+        led1=0;
+        wait(60);
+        Camara_porton=0;
+        sirena=0;
+        led1=1;
+        porton=0;
+        }
+        
+        
+        if(trasera){
+        Camara_trasera=1;
+        sirena=1;
+        led2=0;
+        wait(60);
+        Camara_trasera=0;
+        sirena=0;
+        led2=1;
+        trasera=0; 
+        }
+        
+        if(plato){
+        Camara_plato=1;
+        sirena=1;
+        led3=0;
+        wait(60);
+        Camara_plato=0;
+        sirena=0;
+        led3=1;
+        plato=0;   
+        }
+        
+   }//while
+
+
+
+//****************************************************    
+}//main