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
Amount | Part Type | Properties |
1 | Arduino Uno (Rev3) | Tipo Arduino UNO (Rev3) |
1 | Piezo Speaker | |
1 | Membrane Matrix Keypad | |
1 | Red (633nm) LED | Color Red (633nm); leg yes; paquete 5 mm [THT] |
1 | 10kΩ Resistor | tolerancia ±5%; bands 4; paquete THT; Resistencia 10kΩ; espacio entre pines 400 mil |
1 | Photocell (LDR) | resistance@ luminance 16 kOhms@ 10 lux; resistance@ dark 300 kOhms@ 10 seconds; paquete THT |
1 | 220Ω Resistor | tolerancia ±5%; bands 4; paquete THT; Resistencia 220Ω; espacio entre pines 400 mil |
1 | Tilt Switch | tilt mechanism Mechanical Ball; paquete THT |
1 | SWITCH-MOMENTARY-2 | paquete 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
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
Me gustaLe gusta a 1 persona
Hola Ángel, como pongo en la solución, aquí tienes el código y el hardware usado: https://github.com/jecrespo/Aprendiendo-Arduino-Proyectos/tree/master/Proyecto_05-Arduino_Alarm_System. El código está en el fichero con extension .ino
Para obtener la lista de componentes abre el fichero con extensión .fzz con frizting http://fritzing.org/home/ y exporta la lista de materiales.
Me gustaMe gusta
Increible, muchas gracias, me sera de mucha utilidad, muy buen proyecto, muy completo
Me gustaLe gusta a 1 persona
Por que me marca error compilando para la tarjeta arduino uno????
Me gustaLe gusta a 1 persona
Dime que error te da. Puedes mandármelo a aprendiendoarduino@gmail.com
Me gustaMe gusta
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
Me gustaLe gusta a 1 persona
Te respondo por correo Iván.
Me gustaMe gusta
Me pueden decir todos los materiales que necesito por favor!
Me gustaLe gusta a 1 persona
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 gustaMe gusta
Una consulta yo quiero hacer funcionar dos sensores pir y dos switchs magneticos con acceso de teclado y pantalla lcd. cuando se active q suene un modulo buzzer activo como seria?
Me gustaLe gusta a 1 persona
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 gustaMe gusta
De que valor sería la resistencia para usar los switches magneticos?
Saludos
Me gustaLe gusta a 1 persona
No hace falta resistencia, son contactos libres de tensión y con la propia resistencia de pull up de Arduino es suficiente
Me gustaMe gusta
muchas gracias entonces debo utilizar el mismo esquema de programa que los sensores pir para funcionar los magneticos? dependiendo en q pin lo conecto claro?
Me gustaLe gusta a 1 persona
Sí, el esquema es similar usando un pin digital como input y detectando el cambio de estado de los sensores magnéticos
Me gustaMe gusta
¿cómo incluyo la librería Timer.h
Me gustaLe gusta a 1 persona
Descarga la librería de https://github.com/JChristensen/Timer y la documentación la puedes ver en http://www.doctormonk.com/2012/01/arduino-timer-library.html
Me gustaMe gusta
¿Sólo los dos últimos le tenemos que cambiar en está línea?
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xYY}; //Sustituir YY por el numero de MAC correcto
Me gustaLe gusta a 1 persona
¿ Cómo obtengo el código de la API y el teléfono?
Me gustaLe gusta a 1 persona
La API para mandar SMS uso un Arduino con un módulo de GSM, pero no esta activo actualmente y solo es para uso privado. Puedes montartelo tu siguiendo este código: https://github.com/jecrespo/aprendiendoarduino-servicios tengo pendiente hacer el tutorial.
Me gustaMe gusta
Puedes poner la MAC que quieras, con que cambies YY por un valor válido entre 00 y FF es suficiente.
Me gustaMe gusta
Gracias. No hay una versión del código sin que envíe mensajes, que solo suene el buzzer y con las mismas condiciones
Me gustaLe gusta a 1 persona
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 gustaMe gusta
Pingback: Arduino… intro. – Robotica ARDUINO
hola
estoy haciendolo en tinkercad pero algunos materiales no estan en donde mas puedo hacerlo?
Me gustaLe gusta a 1 persona
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 gustaMe gusta
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!!
Me gustaLe gusta a 1 persona
Hola,
#if DEBUG es una directiva al compilador http://www.it.uc3m.es/pbasanta/asng/course_notes/pre_processor_ifdef_es.html que uso con DEBUG a 1 para el desarrollo pero luego al poner DEBUG a 0 ya no se compila (como si no existiera) y hace que el programa se ejecute más rápido.
La segunda es un operador ternario, que hace lo mismo que un if: https://picandocodigo.net/2009/operador-ternario-operador-condicional/
Me gustaMe gusta
Aclarado! Mil gracias de nuevo!
Me gustaLe gusta a 1 persona
Hola, disculpa puedo cambiar el tilt switch por un módulo de movimiento?
Me gustaLe gusta a 1 persona
Sí, pero dependiendo del sensor puede que el programa haya que modificarlo.
Me gustaMe gusta
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
Me gustaLe gusta a 1 persona
Puedes programarlo como quieras, en mi caso lo he programado así, pero sino es añadir el bloque de leer teclado en lugar de botón.
Me gustaMe gusta
NO FUNCIONA EL CIRCUITO, NO HACE NINGUNA FUNCION…LO UNICO QUE SE DEBE MODIFICAR ES EL DE MAC??
Me gustaLe gusta a 1 persona
Debes conectar cada elemento y cambiar la MAC
Me gustaMe gusta
ya cambie la mac pero sigue sin hacer nada, no enciende nada….ni detecta nada!!
Me gustaLe gusta a 1 persona
no tengo conectado el sensor de movimiento, solo el LDR sera por eso??
Me gustaLe gusta a 1 persona
Sí, si no pones el LDR, la entrada analógica te medirá valores raros y no funcionará, pon A0 a masa y solo detectará el movimiento.
Me gustaMe gusta
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 gustaMe gusta
Pingback: Ejemplos de Proyectos con Arduino | Aprendiendo Arduino
Cuales son los códigos que se utilizan
Me gustaLe gusta a 1 persona
Este es el código: https://github.com/jecrespo/Aprendiendo-Arduino-Proyectos/blob/master/Proyecto_05-Arduino_Alarm_System/Proyecto_05-Arduino_Alarm_System.ino
Me gustaMe gusta
como puedo declarar t.update?
Me gustaMe gusta
Debes instalar la librería http://github.com/JChristensen/Timer y declarar el objeto t como Timer t; lo tienes en el código: https://github.com/jecrespo/Aprendiendo-Arduino-Proyectos/blob/master/Proyecto_05-Arduino_Alarm_System/Proyecto_05-Arduino_Alarm_System.ino
Me gustaMe gusta
Disculpa como puedo agregar la libreria timer ya que eso no me deja compilar desde tinkercad
Me gustaLe gusta a 1 persona
Hola, tienes que hacerlo desde el IDE de Arduino, desde tinkercad solo puedes simular y admite las librerías que tiene incluidas, pero no externas.
Me gustaMe gusta
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
Me gustaLe gusta a 1 persona
Es un warning, te va a funcionar bien, simplemente en una función void (no devuelve nada) pongo un return 0; (devuelve 0) para salir de la función y que no se ejecute el resto.
Pon return; en lugar de return 0; si no quieres que salga el warning.
Aquí tienes la explicación: https://www.arduino.cc/en/Reference.Return
Me gustaLe gusta a 1 persona
hola me podrías ayudar explicando el diagrama de flujo no entiendo sobre el LDR<900?
Me gustaMe gusta
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 gustaMe gusta
Buenas, por si acaso no tiene el diseño electrónico del proyecto, o donde podria encontrarlo
Me gustaLe gusta a 1 persona
Lo puedes sacar tu misma usando fritzing del fichero Proyecto_05-Alarm_System.fzz que puedes descargar de https://github.com/jecrespo/Aprendiendo-Arduino-Proyectos/tree/master/Proyecto_05-Arduino_Alarm_System
Me gustaMe gusta
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
Me gustaLe gusta a 1 persona
Hola te acabo de responder por correo, cualquier otra duda, puedes hacerlo por correo en aprendiendoarduino@gmail.com
Me gustaMe gusta
Hola cuales serian las etapas del design thinking?
Me gustaLe gusta a 1 persona
Hola me pueden decir por favor cual es el software o la programación para el arduino.
Me gustaMe gusta
Toda la programación y el código lo tienes en el repositorio de github: https://github.com/jecrespo/Aprendiendo-Arduino-Proyectos/tree/master/Proyecto_05-Arduino_Alarm_System
Me gustaMe gusta
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 gustaMe gusta
y como modifico la mac?
Me gustaMe gusta
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?
Me gustaLe gusta a 1 persona
Te respondo por correo
Me gustaMe gusta