Proyecto – Sistema de Alarma

Enunciado

Sistema de alarma basado en Arduino. Con dos sensores uno de movimiento y otro de luz se detecta la alarma. Después de detectar alarma, se entra en un estado de pre-alarma que si no se introduce la clave correcta en 10 segundos, paso a un estado de alarma.

Para entrar en estado de alarma hay dos condiciones:

  • Detectar un movimiento (activar el sensor tilt)
  • Detectar más de 5 segundos una iluminación superior a 900.

Para salir del estado de pre-alarma se debe introducir la clave correcta por teclado en los 10 segundos siguientes a la detección de alarma.

Para salir del estado de alarma no debe haber ninguna de las dos condiciones de alarma y se debe pulsar el botón.

En estado normal led apagado y zumbador apagado.

En estado de pre-alarma el led parpadea cada segundo y se oye un pitido cada segundo.

En estado alarma el led está en encendido y se oye un pitido continuo. Además se manda un SMS al número de teléfono configurado.

Información Adicional

El valor de resistencia eléctrica de un LDR es bajo cuando hay luz incidiendo en él (puede descender hasta 50 ohms) y muy alto cuando está a oscuras (varios megaohmios).

El LDR actúa como una resistencia variable. Para conocer la cantidad de luz que el sensor capta en cierto ambiente, necesitamos medir la tensión de salida del mismo. Para ello utilizaremos un divisor de tensión, colocando el punto de lectura para Vout entre ambas resistencias. De esta forma:

Dónde Vout es el voltaje leído por el PIN analógico del Arduino y será convertido a un valor digital, Vin es el voltaje de entrada (5v), R2 será el valor de la resistencia fija colocada (10k ohm generalmente) y R1 es el valor resistivo del sensor LDR. A medida que el valor del sensor LDR varía, obtendremos una fracción mayor o menor del voltaje de entrada Vin.

NOTA: ajustar el valor del umbral para que detecte la alarma según iluminación recinto

Lista de Materiales

AmountPart TypeProperties
1Arduino Uno (Rev3)Tipo Arduino UNO (Rev3)
1Piezo Speaker
1Membrane Matrix Keypad
1Red (633nm) LEDColor Red (633nm); leg yes; paquete 5 mm [THT]
110kΩ Resistortolerancia ±5%; bands 4; paquete THT; Resistencia 10kΩ; espacio entre pines 400 mil
1Photocell (LDR)resistance@ luminance 16 kOhms@ 10 lux; resistance@ dark 300 kOhms@ 10 seconds; paquete THT
1220Ω Resistortolerancia ±5%; bands 4; paquete THT; Resistencia 220Ω; espacio entre pines 400 mil
1Tilt Switchtilt mechanism Mechanical Ball; paquete THT
1SWITCH-MOMENTARY-2paquete tactile_switch_tall

Esquema de Conexión

Diagrama de Estados

Diagrama de Flujo

Solución

En el código hay que configurar los parámetros:

  • Últimas cifras de la MAC
  • Umbral_LDR en función de la iluminación donde nos encontremos
  • Teléfono al que manda las alertas por SMS
  • PIN de acceso a la API

Los mensaje enviados a la API pueden verse en http://www.aprendiendoarduino.com/servicios/SMS/index.html

Código: https://github.com/jecrespo/Aprendiendo-Arduino-Proyectos/tree/master/Proyecto_05-Arduino_Alarm_System

62 comentarios en “Proyecto – Sistema de Alarma

  1. Angel Cruz

    Que tal, es un gran proyecto y me gustaria implementarlo, me podria proporcionar la lista de materialrequerido para este proyecto por favor? y si es posible el codigo necesario para el microcontrolador arduino, se lo agradeceria infinitamente pues no tengo conocimientos con el manejo de la placa arduino ni las protoboard

    Le gusta a 1 persona

    Responder
      1. Ivan Reynoso

        ya lo pude corregir gracias, pero tengo un problema lo que quiero es sustituir el sensor tilt por uno ultrasonico HC-SR04 como lo podria hacer??
        se lo agradeceria mucho si me pudiera ayudar

        Le gusta a 1 persona

    1. jecrespom Autor

      La lista de materiales está en el fichero de fritzing que puedes descargar de https://github.com/jecrespo/Aprendiendo-Arduino-Proyectos/blob/master/Proyecto_05-Arduino_Alarm_System/Proyecto_05-Alarm_System.fzz y abrirlo con fritzing

      Te los pongo aquí:
      1x Arduino Uno (Rev3)
      1x Piezo Speaker
      1x Membrane Matrix Keypad
      1x Red (633nm) LED
      1x 10kΩ Resistor
      1x Photocell (LDR)
      1x 220Ω Resistor
      1x Tilt Switch
      1x SWITCH-MOMENTARY-2

      De todas formas, actualizaré el post con la lista de materiales

      Me gusta

      Responder
    1. jecrespom Autor

      Hola Lionel,

      No habría mucha diferencia con este ejemplo, los PIR para Arduino van conectados a una entrada digital y los switches magnéticos también van a una entrada digital pero a través de una resistencia.

      Luego la pantalla, teclado y un buzzer puedes ver un ejemplo de como usarlo aquí https://github.com/jecrespo/Aprendiendo-Arduino-Proyectos/blob/master/Proyecto_x08-Juego_Desactiva_Bomba/Desactiva_Bomba/Desactiva_Bomba.ino

      Un saludo.

      Me gusta

      Responder
  2. jecrespom Autor

    No hay, pero simplemente elimina la función boolean envia_SMS(String telefono, String mensaje) y la línea donde la llamas cuando hay una alarma que es envia_SMS(TELEFONO, «ALARMA_DE_INTRUSION»); en la 225.

    Quitando eso funciona sin SMS pero suena el buzzer.

    Me gusta

    Responder
  3. Pingback: Arduino… intro. – Robotica ARDUINO

    1. jecrespom Autor

      Hola la lista de materiales está en https://github.com/jecrespo/Aprendiendo-Arduino-Proyectos/blob/master/Proyecto_05-Arduino_Alarm_System/Proyecto_05-Alarm_System_bom.html que es un fichero HTML y puedes verlo en un navegador, sino en el fichero de fritzing Proyecto_05-Alarm_System.fzz de https://github.com/jecrespo/Aprendiendo-Arduino-Proyectos/tree/master/Proyecto_05-Arduino_Alarm_System con Fritzing puedes verlo y editar los elementos.
      Puedes hacerlo en Frizting pero no es un simulador y luego hacerlo con material real que es lo que hice.

      Puedes mandarme un correo a aprendiendoarduino@gmail.com con lo que no encuentras en tinkercad y se puede buscar una alternativa.

      Me gusta

      Responder
  4. Jorge

    Gracias por el aporte es muy interesante y estoy intentado implementarlo. No estoy muy ducho en programación y hay un par de expresiones en el código que no entiendo:
    1. A lo largo del código utilizas en varias líneas la expresión «if DEBUG ….» ¿Por qué se utiliza esto? Si no me equivoco DEBUG = 1 y por tanto siempre se cumplirá… ¿no se puede eliminar?

    2. La otra expresión que no entiendo es esta:

    output ? Serial.println(«beep») : Serial.println(«no beep»);

    ¿Qué es lo que hace realmente esto?

    Muchas gracias!!

    Le gusta a 1 persona

    Responder
  5. Jorge

    Hola de nuevo… me surge otra duda…

    En caso de que el sistema se encuentre en modo «ALARMA», después de los 10 sg. de PRE_ALARMA, para desactivar este estado de ALARMA basta con pulsar el botón y que los sensores estén OK… ¿no debería también introducir la clave a través del teclado para desactivarla?

    Gracias por el aporte

    Le gusta a 1 persona

    Responder
  6. Susana

    Tengo un error «expected constructor destructor or type conversion before ‘(‘ token» en la linea comprueba_ldr(NORMAL);
    Alguien me puede decir por qué? y que debo colocar para arreglarlo?

    Me gusta

    Responder
  7. Pingback: Ejemplos de Proyectos con Arduino | Aprendiendo Arduino

      1. pool de leon

        Disculpa al compilar el codigo me tira este error:

        C:\: In function ‘void lee_teclado()’:

        C:\:166:11: warning: return-statement with a value, in function returning ‘void’ [-fpermissive]

        return 0;
        Justo en esa parte del codigo en return 0; me tira error

        Le gusta a 1 persona

    1. jecrespom Autor

      Hola LDR es el valor que devuelve la entrada analógica el LDR. Este valor va entre 0 y 1023 dependiendo de la iluminación. El valor de 900, es un valor de referencia, se trata de detectar un valor de iluminación de la sala para disparar la alarma, pero se debe ajustar este valor.

      Me gusta

      Responder
  8. abc

    Hola, con la versión 1.0.6 (la más antigua que he podido descargar) y la librería timer instalada, me da estos errores:
    In function ‘void actualiza_alarma(int)’:
    codigo_alarma:214: error: no matching function for call to ‘Timer::stop(int&)’
    C:\Users\amand\OneDrive\Escritorio\programas\Arduino\libraries\Timer/timer.h:41: note: candidates are: void Timer::stop()
    codigo_alarma:221: error: ‘class Timer’ has no member named ‘every’
    codigo_alarma:225: error: no matching function for call to ‘Timer::stop(int&)’
    C:\Users\amand\OneDrive\Escritorio\programas\Arduino\libraries\Timer/timer.h:41: note: candidates are: void Timer::stop()

    Creo que es porque no funciona esta librería en esta versión, pero no encuentro ninguna anterior. Agradecería mucho su ayuda

    Le gusta a 1 persona

    Responder
  9. Leonel Meza

    hola amigo me podrias explicar como funciona el envio de mensajes al telefono, tengo que colocar mi codigo del pais de donde soy y en lugar del tilt switch que otro sensor podria utilizar

    Me gusta

    Responder
  10. Leonel Meza

    Hola Tengo varias dudas respecto a la alarma
    como modifico la mac?
    en lugar del tilt swicth que otro sensor de movimiento podria utilizar
    como funciona los mensajes al celular? en el codigo tendria que colocar el codigo de numero de mi pais o solo mi numero de celular?

    Le gusta a 1 persona

    Responder

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.