Introducción
En esta página te explicaremos cómo construir un proyecto pequeño pero llamativo: Crearemos una alarma con detector de movimiento utilizando nuestra tarjeta Arduino Uno R3.
Una de las aplicaciones del sensor de movimiento PIR son las alarmas residenciales y en esta página te vamos a enseñar a crear tu propia versión de este equipo en miniatura con componentes fáciles de adquirir y código sencillo y claramente explicado.
Esta práctica sirve como experiencia de aprendizaje para comprender mejor el funcionamiento de las entradas digitales en la tarjeta Arduino. También funciona como práctica para temas de programación básica y nos ayudará a desarrollar nuestras habilidades de codificación.
Materiales
- Arduino Uno Rev3
- Sensor de movimiento PIR HC-SR501
- Protoboard 830 puntos
- Zumbador o buzzer activo miniatura
- Botón o push button
Diagrama
Las conexiones a realizar son las siguientes:
| Pin | Función |
| 10 | Entrada – Botón para desactivar la alarma |
| 11 | Salida – Conexión de la señal de activación del zumbador (buzzer) |
| 12 | Entrada – Conexión del sensor PIR (HC-SR501) |
| 13 | Salida – LED que replica el estado en el pin 12 del sensor PIR |

Funcionamiento
El programa funciona de la siguiente manera:
- Al iniciar, configura las entradas y salidas de la placa Arduino y muestra un mensaje en el monitor serial.
En la función loop() realizamos lo siguiente de forma continua:
- El programa espera un cambio en el pin del sensor PIR, al detectar un estado alto en este pin se activa una bandera que hace sonar el buzzer. El LED conectado al pin 13 de nuestra placa Arduino muestra el mismo estado que reporta el sensor PIR: Si el sensor de movimiento reporta un estado alto, el LED se ilumina. De lo contrario el LED se apaga.
- Utilizando la función millis() generamos una señal intermitente en el pin donde hemos conectado el buzzer, se hace de esta manera para no bloquear la ejecución del programa con retardos (usando la función delay())
- Revisamos el estado del botón o pulsador (push button). Cuando lo oprimimos este desactiva la alarma una vez que esta se dispara. Es necesario que el sensor PIR NO detecte movimiento para poder desactivar la alarma.
Programa para la tarjeta Arduino
A continuación encontrarás el programa que debes cargar en tu tarjeta Arduino para realizar el proyecto de alarma con detector de movimiento.
Hemos comentado ampliamente el programa para que sea fácil de entender, pero si no te queda algo claro, No dudes en dejar un comentario al final de esta página.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | /** Geek Factory - "Dale vuelo a tus proyectos" www.geekfactory.mx PRACTICAS CON ARDUINO: ALARMA DE INTRUSOS CON SENSOR PIR DE MOVIMIENTO HC-SR501 CONSULTA EL ARCHIVO LICENCIA.TXT PARA CONOCER MÁS SOBRE LOS DERECHOS DE DISTRIBUCIÓN DE ESTE MATERIAL O LA SIGUIENTE URL: HTTPS://WWW.GEEKFACTORY.MX/LICENCIA-CONTENIDO. PUBLICADO BAJO LICENCIA ATTRIBUTION-NONCOMMERCIAL-SHAREALIKE 4.0 INTERNATIONAL (CC BY-NC-SA 4.0). GEEK FACTORY INVIERTE TIEMPO Y RECURSOS EN DESARROLLAR ESTOS EJEMPLOS Y TUTORIALES. SI ENCUENTRAS ÚTIL ESTE CÓDIGO, CONSIDERA REALIZAR UNA COMPRA CON NOSOTROS. Resumen: En este programa crearemos una alarma anti-intrusos con el sensor de movimiento HC-SR501 y un zumbador. La alarma se activa al detectar movimiento y para desactivarla debemos oprimir un botón. */ /** definición de pines */ const int ledpin = 13; const int pirpin = 12; const int buzzerpin = 11; const int buttonpin = 10; /** variable que almacena el ultimo estado del pin */ int ultimoestado = LOW; /** variable que indica si la alarma está activada o no */ bool alarm = false; /** variable usada para alternar el encendido / apagado del buzzer */ uint32_t tiempobuzzer = 0; /** Función setup: se ejecuta una vez cuando encendemos el arduino */ void setup() { // preparar la comunicación serial Serial.begin(115200); // mostrar mensaje inicial Serial.println(F("----------------------------------------------------")); Serial.println(F(" EJEMPLO SENSOR DE MOVIMIENTO PIR HC-SR501 ")); Serial.println(F(" https://www.geekfactory.mx ")); Serial.println(F("----------------------------------------------------")); // configurar los pines de entrada / salida pinMode(pirpin, INPUT); pinMode(ledpin, OUTPUT); pinMode(buzzerpin, OUTPUT); pinMode(buttonpin, INPUT_PULLUP); } /** Función loop: se ejecuta continuamente mientras el arduino permanece encendido */ void loop() { // leer el estado del pin donde está conectado el sensor PIR int estado = digitalRead(pirpin); /** detectamos cuando el pin cambió de estado, esto nos permite solamente enviar mensajes a la interfaz serie cuando cambia el estado del pin conectado al sensor */ if (estado != ultimoestado) { // actualizar la variable para detectar cambios ultimoestado = estado; if (estado == HIGH) { // al detectar un pulso en alto es que el sensor detectó movimiento Serial.println(F("Movimiento detectado")); digitalWrite(ledpin, HIGH); // activar el sonido de la alarma if (!alarm) { alarm = true; tiempobuzzer = millis(); Serial.println(F("ALARMA ACTIVADA")); } } else { // el estado bajo en el pin del sensor significa que no hay detección Serial.println(F("Sensor en reposo...")); digitalWrite(ledpin, LOW); } } /** Si la alarma esta activada generamos una señal alternante en el pin donde se encuentra conectado el buzzer, usamos la función millis() para evitar el uso de retardos (delay). */ if (alarm) { uint32_t ahora = millis(); if (ahora - tiempobuzzer >= 500) { // alternar el estado del pin digitalWrite(buzzerpin, !digitalRead(buzzerpin)); tiempobuzzer = ahora; } } /** Revisar el estado del botón para desactivación de la alarma, si se oprime el botón apagamos el sonido y nos aseguramos que el zumbador quede desactivado. */ if (LOW == digitalRead(buttonpin)) { // retardo para rebotes y ruido delay(20); // revisar nuevamente el estado del pin if (LOW == digitalRead(buttonpin)) { // solo imprimir mensaje si la alarma esta activada if (alarm) Serial.println(F("ALARMA DESACTIVADA")); // desactivar rutina del sonido alarm = false; // y asegurarnos que se apague el buzzer digitalWrite(buzzerpin, LOW); } } } |
Lecturas recomendadas
- Tutorial de salidas digitales
- Página del producto sensor de movimiento HC-SR501
- Tutorial externo sobre el sensor HC-SR501
- Documentación de la función millis()
Conclusión
- Con este sencillo proyecto exploramos el funcionamiento de los sensores PIR como el HC-SR501 y pudimos validar que su integración es bastante sencilla, ya que solamente nos entregan un pulso cuando hay una detección.
- Aprendimos a detectar cambios en los pines de entrada mediante software y a realizar una acción en consecuencia.
- Repasamos el funcionamiento de los botones y pulsadores con Arduino.
- Aplicamos el conocimiento para manejo de tiempos sin bloquear la ejecución de un programa mediante la función millis()













