Arduino Nano - Sensor de movimiento
¿Alguna vez te has preguntado: “¿Cómo puede hacerlo?” cuando te encuentras con lugares con puertas automáticas, luces y escaleras mecánicas? Si es así, este tutorial no solo responderá a tu pregunta, sino que también te mostrará cómo hacer que eso ocurra utilizando Arduino Nano y un sensor de movimiento. ¡Comencemos!
Este tutorial explica cómo usar Arduino Nano con un sensor de movimiento. En detalle, aprenderemos:
- Cómo funciona el sensor de movimiento HC-SR501
- Cómo conectar el sensor de movimiento HC-SR501 a Arduino Nano
- Cómo programar Arduino Nano para leer el estado del sensor de movimiento HC-SR501
- Cómo usar Arduino Nano y HC-SR501 para detectar la presencia humana y actuar en consecuencia
Hardware Requerido
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Acerca del Sensor de Movimiento HC-SR501

El sensor PIR HC-SR501 es capaz de detectar el movimiento de personas (o animales). Se utiliza comúnmente en varias aplicaciones, como encender o apagar automáticamente una bombilla, abrir y cerrar una puerta, activar o desactivar una escalera mecánica y detectar a un intruso.
Pinout del sensor de movimiento
El sensor de movimiento HC-SR501 tiene 3 pines:
- Pin GND: Debe conectarse a GND (0V)
- Pin VCC: Debe conectarse a VCC (5V)
- Pin OUTPUT: Este es un pin de salida y estará en nivel bajo cuando no se detecte movimiento, y en nivel alto cuando se detecte movimiento. Este pin debe conectarse al pin de entrada del Arduino.
El HC-SR501 tiene un jumper y dos potenciómetros que se utilizan para ajustar la configuración del sensor.

Cómo funciona
El sensor HC-SR501 es capaz de detectar el movimiento basándose en los cambios de la radiación infrarroja emitida por un objeto en movimiento. Para que el sensor HC-SR501 detecte el objeto, deben cumplirse dos criterios:
- El objeto debe estar en movimiento o temblando
- El objeto debe emitir radiación infrarroja
En consecuencia:
- Si un objeto se está moviendo pero no emite rayos infrarrojos (p. ej., un robot o un coche de juguete), no será detectado por el sensor.
- Si un objeto está emitiendo rayos infrarrojos pero no se está moviendo (p. ej., una persona que está de pie), no será detectado por el sensor.
Los humanos y los animales son fuentes de radiación infrarroja. En consecuencia, el sensor puede detectar sus movimientos.
Estado del pin de salida:
- Cuando no hay ninguna persona (o animal) presente en el rango detectado del sensor, el pin de salida del sensor está en un nivel bajo.
- Si una persona (o animal) entra en el rango detectado del sensor, el pin de salida pasará de nivel bajo a nivel alto, indicando que se ha detectado movimiento.
- Cuando la persona (o animal) sale del rango detectado del sensor, el pin de salida pasará de nivel alto a nivel bajo, señalando que el movimiento ha terminado.
El video de arriba demuestra el funcionamiento básico de un sensor de movimiento. En la realidad, el sensor de movimiento puede operar de manera diferente dependiendo de la configuración (la cual se describe en la sección Usos Avanzados).
Detectar la presencia humana
El propio sensor no reconoce la presencia de humanos. Solo detecta el movimiento. Usamos un Arduino Nano para inferir la presencia de humanos a partir del movimiento detectado por el sensor, siguiendo esta regla:
- Si se detecta movimiento, entonces hay personas presentes.
- Si no se detecta movimiento, entonces no hay personas presentes.
Esta regla funciona de forma imperfecta en una situación práctica: cuando las personas están dentro del alcance del sensor pero no se mueven, no se detectará el movimiento. En consecuencia, el Arduino Nano concluirá que no hay personas presentes.
Por ejemplo, el sensor de movimiento de tu sala de reuniones está configurado para activar las luces cuando hay personas presentes. Cuando la reunión está en curso y nadie se está moviendo, el movimiento no se detecta y, por lo tanto, la presencia humana no se reconoce, lo que provoca que las luces se apaguen. Para volver a encenderlas, alguien necesita moverse.
Sin embargo, este problema no es grave y el sensor es económico. Por lo tanto, se utiliza ampliamente para detectar personas en muchas aplicaciones.
Arduino Nano - Sensor de Movimiento HC-SR501
Conecta el pin de entrada digital de un Arduino al pin de salida del sensor HC-SR501. Usando el código de Arduino Nano, podemos comprobar el valor del pin de salida para detectar movimiento.
Diagrama de Cableado

This image is created using Fritzing. Click to enlarge image
Ver La mejor forma de alimentar Arduino Nano y otros componentes.
Configuración inicial
| Time Delay Adjuster | Screw it in anti-clockwise direction fully. |
| Detection Range Adjuster | Screw it in clockwise direction fully. |
| Repeat Trigger Selector | Put jumper as shown on the image. |

Cómo programar para un sensor de movimiento
- Configura un pin de Arduino como una entrada digital utilizando la función pinMode().
- Verifica el estado del pin OUTPUT del sensor con la función digitalRead().
- Identificar cuándo comienza el movimiento (el estado del pin cambia de LOW a HIGH).
- Identificar cuándo el estado del pin ha cambiado de ALTO a BAJO, indicando que el movimiento se ha detenido.
Código de Arduino Nano
Pasos R\u00e1pidos
- Copia el código anterior y ábrelo en el IDE de Arduino.
- Haz clic en el botón Subir en el IDE de Arduino para compilar y subir el código al Arduino Nano.
- Abre el Monitor Serial.
- Mueve tu mano dentro del rango del sensor.
- Comprueba la salida en el Monitor Serial.
Video Tutorial
Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.
Usos Avanzados
Como se indicó previamente, podemos modificar la configuración del sensor utilizando un jumper y dos potenciómetros.
Ajustador del rango de detección
Este potenciómetro puede cambiar la distancia a la que se puede detectar algo (aproximadamente entre 3 y 7 metros).
- Girar completamente hacia la derecha hace que detecte cosas a una distancia de hasta 3 metros.
- Girar completamente hacia la izquierda hace que detecte cosas a una distancia de hasta 7 metros.

Podemos usar el potenciómetro para establecer un rango de valores entre 3 m y 7 m.
Ajustador de retardo de tiempo
Este potenciómetro se utiliza para modificar el retardo de tiempo:
- Cuando se gira completamente en sentido horario, el retraso es aproximadamente 5 minutos.
- Cuando se gira completamente en sentido antihorario, el retraso es aproximadamente 3 segundos.
La sección siguiente proporciona una explicación del concepto de retardo temporal en conjunto con Repeat Trigger.

Selector de disparadores de repetición
Existe un puente que se utiliza para elegir entre modos de disparo: disparo único o disparo repetible.

Tomemos como referencia la configuración de retardo de tiempo, que se establece mediante el Ajustador de Retardo de Tiempo, como time_delay. Si te desplazas dentro del rango del sensor durante un periodo de tiempo prolongado (conocido como motion_time) que es varias veces más largo que time_delay:
- En modo de disparo único: el estado del pin de salida se alternará entre LOW y HIGH varias veces. La duración HIGH será igual a time_delay mientras que la duración LOW está fija en 3 segundos.

- Modo de disparo repetible: El estado del pin de salida permanecerá en ALTO durante un período de (motion_time + time_delay).

Pruebas
- Modo de disparo único:
- Coloca el puente para seleccionar el modo de disparo único
- Mueve tu mano frente al sensor durante unos 10 segundos.
- Aleja tu mano del área del sensor
- Espera 3 segundos; deberías observar la salida en el monitor serie como se muestra a continuación:
- Coloca el jumper para seleccionar el modo de disparo repetible
- Mueve la mano frente al sensor durante unos 10 segundos
- Aleja la mano del alcance del sensor
- Espera 3 segundos; la salida será visible en el monitor serie como éste:
- Encendemos o activamos dispositivos o máquinas tan pronto como hay una persona presente.
- NO apagamos o desactivamos dispositivos o máquinas inmediatamente después de que ya no haya una persona presente. Apagamos o desactivamos dispositivos o máquinas después de que haya pasado cierta cantidad de tiempo.
Modo de disparo repetible:
Podemos observar que cuando está en el modo de disparo único, el sensor se activará dos o tres veces. En cambio, cuando está en el modo de disparo repetible, el sensor solo se disparará una vez.
※ Nota:
Durante el tiempo LOW (3 segundos, un valor fijo e inajustable), el sensor no puede detectar ningún movimiento. Esto no provoca ningún problema en la práctica.
Se recomienda utilizar el modo de disparo repetible.
En muchos escenarios reales:
Cómo usar el retardo de tiempo
Si no se detecta ninguna persona, el sistema de automatización esperará un periodo de tiempo antes de tomar medidas.
El sensor de movimiento tiene un ajustador de retardo de tiempo que puede usarse para establecer el retardo en un mínimo de 3 segundos y un máximo de 5 minutos. Además, el código de Arduino Nano se puede usar para establecer cualquier valor para el retardo.
Si no especificamos un tiempo de espera en el código del Arduino Nano, el tiempo de espera será equivalente al retardo establecido en el sensor.
Si se establece un tiempo de espera en el código del Arduino Nano, será la suma del retardo en la configuración del sensor y del retardo en el código del Arduino Nano.
Establecer el retardo de tiempo en el código de Arduino Nano
Si se habilita el modo de disparo repetible, entonces el retardo en el código será de 30 segundos más time_delay, que se establece en la configuración del sensor a través del Ajustador de Retardo de Tiempo.
Rétate a ti mismo
Utilice el sensor de movimiento para realizar uno de estos proyectos:
- Enciende la luz al entrar en tu habitación y apágala después de 30 segundos de haber salido. Tip: Consulta Arduino Nano - Relay.
- Activa una alarma cuando alguien se aproxime a tus bienes más preciados. Tip: Consulta Arduino Nano - Piezo Buzzer.