Arduino - Sensor de movimiento
Cuando te acercas a algunos lugares donde las puertas se abren y cierran automáticamente, las bombillas se encienden y apagan automáticamente o la escalera mecánica se activa automáticamente, ¿alguna vez te has preguntado: “¿Cómo puede hacerlo?”? Si es así, este tutorial no solo responde sino que también te dice cómo hacerlo. ¡Empecemos!
En este tutorial, vamos a aprender:
- Cómo funciona el sensor de movimiento HC-SR501
- Cómo conectar el sensor de movimiento HC-SR501 al Arduino
- Cómo programar Arduino para leer el estado del sensor de movimiento HC-SR501
- Cómo usar Arduino y HC-SR501 para detectar la presencia de una persona y tomar medidas en función de ello.
Hardware Requerido
Or you can buy the following kits:
| 1 | × | DIYables STEM V3 Starter Kit (Arduino included) | |
| 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 un sensor que puede detectar el movimiento de las personas (o de los animales). Se utiliza ampliamente para detectar la presencia de personas en muchas aplicaciones (encender/apagar automáticamente la bombilla, abrir/cerrar la puerta, activar/desactivar la escalera mecánica, detectar intrusos ...)
Disposición de pines
El sensor de movimiento HC-SR501 tiene 3 pines:
- Pin GND: debe conectarse a GND (0V)
- Pin VCC: debe conectarse a VCC (5V)
- Pin de salida: es un pin de salida: BAJO cuando no se detecta movimiento, ALTO cuando se detecta movimiento. Este pin debe conectarse al pin de entrada del Arduino.
El HC-SR501 también tiene un puente y dos potenciómetros, que se utilizan para ajustar la configuración del sensor. En primer lugar, mantenga la configuración predeterminada. El detalle se describe en la sección Usos Avanzados.

Cómo funciona
El sensor HC-SR501 detecta el movimiento basado en el cambio de la radiación infrarroja procedente del objeto en movimiento. Para ser detectado por el sensor HC-SR501, el objeto debe cumplir con dos condiciones:
- Se está moviendo o temblando
- Está emitiendo radiación infrarroja
Entonces:
- Si un objeto se está moviendo pero NO emite un rayo infrarrojo (p. ej., un robot o un coche de juguete), NO es detectado por el sensor.
- Si un objeto está emitiendo un rayo infrarrojo pero NO se está moviendo (p. ej., una persona permanece inmóvil), NO es detectado por el sensor.
Los seres humanos y los animales emiten infrarrojo de forma natural. Por lo tanto, el sensor puede detectar el movimiento de los seres humanos y de los animales.
Estado del pin de salida:
- Cuando no hay ninguna persona (o animal) moviéndose dentro del rango detectado del sensor, el pin de salida del sensor está en BAJO.
- Cuando hay una persona (o animal) moviéndose dentro del rango detectado del sensor, el pin de salida del sensor cambia de BAJO a ALTO (⇒ detección de movimiento).
- Cuando hay una persona (o animal) alejándose del rango detectado del sensor, el pin de salida del sensor cambia de ALTO a BAJO (⇒ fin del movimiento).
El video anterior ilustra, en principio, cómo funciona el sensor de movimiento. En la práctica, el sensor de movimiento funciona un poco diferente, dependiendo de la configuración del sensor (descrita en la sección Usos Avanzados).
Detectar la presencia humana
El sensor en sí no detecta la presencia de personas; el sensor solo detecta el movimiento. Usamos Arduino (o MCU) para deducir la presencia de personas basándonos en la detección de movimiento del sensor, de acuerdo con la siguiente regla:
- Si se detecta movimiento, los humanos están presentes
- Si no se detecta movimiento, los humanos no están presentes
Esta regla es incorrecta en un caso práctico: los humanos están dentro del alcance del sensor, pero NO se están moviendo. El movimiento NO se detecta. El Arduino (o MCU) deduce que el humano NO está presente.
Por ejemplo, la sala de reuniones utiliza el sensor de movimiento para encender y apagar la luz automáticamente; la luz se enciende automáticamente cuando las personas entran en la sala. Durante la reunión, si todos se quedan quietos sin moverse, no se detecta movimiento, por lo tanto no hay nadie presente, y la luz se apaga automáticamente. Para encender la luz, alguien debe moverse.
Sin embargo, este problema no es grave y el sensor es barato. Por lo tanto, el sensor se usa ampliamente para detectar a las personas en muchas aplicaciones.
Arduino - Sensor de Movimiento HC-SR501
Cuando un pin de Arduino esté configurado como entrada digital, puede leer el estado (LOW o HIGH) de cualquier cosa a la que esté conectado.
Al conectar el pin del Arduino al pin de salida del sensor HC-SR501, podemos usar el código de Arduino para leer el valor del pin de salida y detectar el movimiento.
Diagrama de Cableado

This image is created using Fritzing. Click to enlarge image
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
- Configurar el pin de un Arduino en modo de entrada digital utilizando la función pinMode().
- Lee el estado del pin de salida del sensor usando la función digitalRead().
- Detectar el inicio del movimiento (el cambio de estado del pin de BAJO a ALTO)
- Detectar la detención del movimiento (el cambio de estado del pin de ALTO a BAJO)
Código de Arduino
Pasos R\u00e1pidos
- Copia el código anterior y ábrelo con el IDE de Arduino
- Haz clic en el botón Subir en el IDE de Arduino para subir el código al Arduino
- Abre el Monitor serie
- Mueve tu mano frente al rango del sensor
- Mira la salida en el Monitor serie
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 mencionó anteriormente, podemos cambiar o ajustar la configuración del sensor mediante un puente y dos potenciómetros.
Ajuste del rango de detección
Este potenciómetro se utiliza para ajustar el rango de detección (aproximadamente de 3 a 7 metros).
- Si está atornillado completamente en sentido horario, el rango de detección es aproximadamente 3 metros.
- Si está atornillado completamente en sentido antihorario, el rango de detección es aproximadamente 7 metros.

Podemos ajustar el potenciómetro para obtener el rango deseado (un valor entre 3m y 7m)
Ajustador de retardo de tiempo
Este potenciómetro se utiliza para ajustar el retardo.
- Si está atornillado por completo en el sentido horario, el retraso es de aproximadamente 5 minutos.
- Si está atornillado por completo en el sentido antihorario, el retraso es de aproximadamente 3 segundos.
El significado del retardo temporal se explica junto con Repeat Trigger en la siguiente parte.

Selector de disparadores de repetición
Hay un puente que se utiliza para seleccionar los modos de disparo: disparo único o disparo repetible.

Llamemos a la configuración de retardo (que se establece mediante el Time Delay Adjuster) como time_delay. Suponga que continúa moviéndose dentro del rango del sensor durante un largo tiempo (llamado motion_time) (muchas veces más largo que time_delay).
- Modo de disparo único: el estado del pin de salida se alterna entre BAJO y ALTO varias veces. La duración de ALTO es igual a time_delay. La duración de BAJO se fija en 3 segundos.

- Modo de disparo repetible: el estado del pin de salida se mantiene en alto durante (motion_time + time_delay).

Pruebas
Para ver cómo funcionan los modos de disparo, hagamos una prueba. Coloca el ajustador de retardo completamente en sentido antihorario para fijar el retardo a 3 segundos.
- Modo de disparo único:
- Coloque un jumper para seleccionar el modo de disparo único
- Mantenga su mano frente al sensor durante unos 10 segundos.
- Retire su mano del alcance del sensor
- Espere 3 segundos, verá la salida en el monitor serie como se muestra a continuación:
- Modo de disparo repetible:
- Coloque el puente para seleccionar el modo de disparo repetible
- Mantenga su mano frente al sensor durante unos 10 segundos.
- Saque su mano del alcance del sensor
- Espere 3 segundos, verá la salida en el monitor serie como se muestra a continuación:
- Encendemos o activamos dispositivos/máquinas justo después de que una persona esté presente.
- No apagamos ni desactivamos dispositivos/máquinas inmediatamente después de que la persona NO esté presente. Los apagamos o desactivamos después de un tiempo de espera.
- En el sensor de movimiento: el mínimo es 3 segundos y el máximo es 5 minutos. Realizado mediante el Ajustador de Retardo de Tiempo
- En el código de Arduino: cualquier valor, realizado mediante programación
Como podemos ver, en un modo de disparo único, el sensor se dispara dos o tres veces. En el modo de disparo repetible, el sensor se dispara solo una vez.
※ Nota:
En ambos casos, durante el tiempo bajo (3 segundos) (el valor fijo e inajustable), el sensor no es capaz de detectar ningún movimiento. En otras palabras, el sensor está bloqueado en este período. En la práctica, no causa ningún problema.
Se recomienda utilizar el modo de disparo repetible.
En muchas aplicaciones reales:
Cómo usar el retardo de tiempo
Cuando se detecte que la persona NO está presente, el sistema de automatización tomará acción después de un retraso.
El retardo de tiempo se puede configurar en el sensor de movimiento y en el código de Arduino:
Si no establecemos un tiempo de espera en el código de Arduino, el tiempo de espera será igual al retardo de la configuración del sensor.
Si configuramos un tiempo de espera en el código de Arduino, el tiempo de espera es la suma del retardo en la configuración del sensor y del retardo en el código de Arduino.
Configurar el retardo de tiempo en el código de Arduino
Suponga que se ha configurado el modo de disparo repetible. El retardo en este código está establecido en 30 segundos. Esto significa que el tiempo de retardo es igual a 30 segundos más time_delay, que se configura en la configuración del sensor (a través del Ajustador de Retardo de Tiempo).
Desafíate a ti mismo
Utilice el sensor de movimiento para realizar alguno de los siguientes proyectos:
- Enciende automáticamente la luz al entrar en tu habitación y apágala 30 segundos después de salir. Consejo: Consulta Arduino - Relay.
- Configura automáticamente una alarma cuando alguien se acerque a tus objetos de valor. Consejo: Consulta Arduino - Piezo Buzzer.