Componentes · 6 min de lectura

Sensor de movimiento PIR (HC-SR501): detección de movimiento con Arduino, ESP32 y Pico

¿Cómo funciona un sensor de movimiento PIR? Conexión del HC-SR501, ajuste de sensibilidad y tiempo, modos H/L, código para Arduino, ESP32 y Pico, luz con sensor de movimiento y cómo evitar falsas detecciones.

Un sensor PIR (Passive InfraRed, infrarrojo pasivo) es un sensor barato y de muy bajo consumo que detecta cuando una persona o un animal se mueve en su campo de visión. Las luces de escalera que se encienden solas, las alarmas y los timbres automáticos suelen funcionar con un PIR. La palabra «pasivo» significa que el sensor no emite nada: solo «escucha» la radiación infrarroja que desprenden los cuerpos calientes de su alrededor. El modelo más usado en proyectos con Arduino es el HC-SR501.

Sensor de movimiento PIR HC-SR501
Sensor PIR HC-SR501: la cúpula blanca es una lente de Fresnel; la placa de debajo tiene dos potenciómetros de ajuste y un puente de disparo.

¿Cómo funciona un sensor PIR?

Todo cuerpo con una temperatura por encima del cero absoluto emite radiación infrarroja, y el cuerpo humano emite sobre todo en una longitud de onda de 9–10 micrómetros. En el corazón del sensor hay un elemento piroeléctrico que reacciona a esa radiación y que está dividido en dos mitades. Cuando nada se mueve, ambas mitades reciben la misma radiación, sus señales se anulan y la salida permanece tranquila. Cuando alguien cruza el campo de visión, primero una mitad y luego la otra reciben más radiación; el circuito del módulo detecta esa diferencia y el pin OUT pasa a HIGH.

La cúpula blanca de arriba es una lente de Fresnel. Divide el campo de visión en decenas de pequeñas zonas y concentra la radiación de cada una sobre el elemento. Al pasar una persona de una zona a otra, la señal cambia; por eso un sensor PIR detecta muy bien el movimiento pero no a alguien que está completamente quieto.

Características técnicas del HC-SR501

CaracterísticaValor
Tensión de alimentación4,5–20 V (se recomiendan 5 V)
Corriente en reposoUnos 50 µA
SalidaDigital: 3,3 V con movimiento, 0 V sin él
Alcance de detección3–7 m (ajustable)
Ángulo de detecciónUnos 110°
Tiempo de salidaUnos 3 segundos – 5 minutos (ajustable)
Tiempo de bloqueoUnos 2,5 segundos después de apagarse la salida
Tiempo de calentamiento30–60 segundos al encenderlo

Ajustes del módulo

  • Potenciómetro Sx (sensibilidad): ajusta el alcance. Girándolo en sentido horario pasa de unos 3 a 7 metros.
  • Potenciómetro Tx (tiempo): ajusta cuánto tiempo se mantiene la salida en HIGH tras detectar movimiento. En sentido horario el tiempo aumenta.
  • Puente de disparo H (repetible): mientras siga habiendo movimiento, el tiempo vuelve a empezar cada vez; ideal para controlar luces.
  • Puente de disparo L (único): al terminar el tiempo la salida pasa a LOW aunque siga habiendo movimiento; después hace falta un nuevo disparo.
  • Tiempo de bloqueo: durante unos 2,5 segundos después de que la salida pase a LOW no se detecta movimiento nuevo; no se puede ajustar.
Al empezar a experimentar, gira los dos potenciómetros del todo en sentido antihorario (tiempo mínimo, sensibilidad mínima) y pon el puente en H. Así no tendrás que esperar minutos después de cada prueba; además, ajustar el tiempo luego en el código es mucho más flexible.

Pines y conexión del HC-SR501

PinFunciónArduino UnoESP32Raspberry Pi Pico
VCCAlimentación5VVIN (5V)VBUS (5V)
OUTSalida digital (3,3 V)D2GPIO 27GP16
GNDTierraGNDGNDGND
En la mayoría de los módulos los nombres de los pines están impresos en la cara superior de la placa, bajo la cúpula blanca. Puedes tirar suavemente de la cúpula para leer las etiquetas y volver a colocarla después.

Detectar movimiento con Arduino

El código siguiente espera a que el sensor se caliente y luego escribe en el Monitor Serie un mensaje cuando empieza el movimiento y otro cuando termina, encendiendo y apagando el LED integrado del Arduino. Vigilar solo los cambios de estado, en lugar de imprimir la salida una y otra vez, es también lo que harás en proyectos reales.

Arduino (C++)
1const int PIR_PIN = 2;
2const int LED_PIN = 13;        // dahili LED / built-in LED
3
4bool motion = false;
5
6void setup() {
7  pinMode(PIR_PIN, INPUT);
8  pinMode(LED_PIN, OUTPUT);
9  Serial.begin(9600);
10  Serial.println("Sensör ısınıyor / warming up...");
11  delay(30000);                  // ilk 30 sn kararsız / unstable for ~30 s
12  Serial.println("Hazır / ready");
13}
14
15void loop() {
16  bool now = digitalRead(PIR_PIN);
17  if (now && !motion) {
18    Serial.println("Hareket algılandı / motion detected");
19    digitalWrite(LED_PIN, HIGH);
20    motion = true;
21  } else if (!now && motion) {
22    Serial.println("Hareket bitti / motion ended");
23    digitalWrite(LED_PIN, LOW);
24    motion = false;
25  }
26}
Al encenderse por primera vez, el sensor pasa 30–60 segundos «aprendiendo» el entorno y puede dispararse solo durante ese tiempo. Esperar ese tiempo en el código, o ignorar los primeros disparos, evita falsas alarmas cada vez que se enciende el sistema.

Luz con sensor de movimiento: controlar el tiempo con millis()

Guardar el tiempo de encendido en el código, en lugar de en el potenciómetro Tx, es mucho más flexible. El código siguiente apunta la hora cada vez que detecta movimiento y apaga la luz 20 segundos después del último movimiento, así que la luz sigue encendida mientras alguien se mueva por la habitación. En LIGHT_PIN puedes conectar un LED o un módulo relé para una lámpara de 230 V; si usas un relé activo en LOW, intercambia HIGH y LOW en la última línea. La conexión del relé se explica en ¿Qué es un módulo relé?

Arduino (C++)
1const int PIR_PIN = 2;
2const int LIGHT_PIN = 7;               // LED ya da röle / LED or relay
3const unsigned long ON_TIME = 20000;   // son hareketten sonra 20 sn / 20 s after last motion
4
5unsigned long lastMotion = 0;
6
7void setup() {
8  pinMode(PIR_PIN, INPUT);
9  pinMode(LIGHT_PIN, OUTPUT);
10}
11
12void loop() {
13  if (digitalRead(PIR_PIN) == HIGH) {
14    lastMotion = millis();             // her harekette süreyi yenile / refresh on every motion
15  }
16  bool on = (lastMotion != 0) && (millis() - lastMotion < ON_TIME);
17  digitalWrite(LIGHT_PIN, on ? HIGH : LOW);
18}

PIR con el ESP32 y la Raspberry Pi Pico

La salida del HC-SR501 ya es de 3,3 V, así que puede ir directamente al ESP32 y a la Pico sin divisor de tensión. Eso sí, alimenta el módulo con 5 V, porque su regulador es inestable por debajo de 4,5 V. En el ESP32 funciona el mismo código de Arduino; en proyectos con batería, poner el ESP32 en sueño profundo y despertarlo con la salida del PIR (ext0 wakeup) alarga la autonomía semanas. En la Pico con MicroPython puedes usar una interrupción para no perder ningún movimiento:

MicroPython
1from machine import Pin
2import time
3
4pir = Pin(16, Pin.IN)            # GP16
5led = Pin(25, Pin.OUT)           # dahili LED; Pico W'de Pin("LED") / onboard LED; Pin("LED") on Pico W
6
7def on_motion(pin):
8    led.value(pin.value())       # hareket varken yanar / on while there is motion
9    print("Hareket / motion" if pin.value() else "Bitti / ended")
10
11pir.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=on_motion)
12
13while True:
14    time.sleep(1)

Cómo evitar falsas detecciones

  • No lo apuntes a fuentes de calor: radiadores, salidas de aire acondicionado, ventanas con sol y lámparas calientes lo disparan con cambios bruscos de temperatura.
  • Aléjalo de objetos que se mueven: cortinas, plantas o ramas que se balancean con el viento y se han calentado al sol parecen movimiento.
  • Limpia la alimentación: los relés y los módulos Wi-Fi meten ruido; pon un condensador de 100 µF entre VCC y GND del sensor.
  • Sepáralo un poco del ESP32: un HC-SR501 pegado a la antena Wi-Fi puede dispararse solo de vez en cuando; unos centímetros de distancia y un cable corto suelen bastar.
  • Si hay mascotas: baja la sensibilidad y monta el sensor en alto, ligeramente inclinado hacia abajo.
  • No lo pongas detrás de un cristal: el vidrio normal bloquea la radiación infrarroja, así que un sensor detrás de una ventana no ve el movimiento de fuera.

¿PIR, radar de microondas o ultrasonidos?

CaracterísticaPIR (HC-SR501)Radar de microondas (RCWL-0516)Ultrasonidos (HC-SR04)
Qué detectaCuerpos calientes en movimientoCualquier movimientoLa distancia al objeto de delante
A través de una pared fina o una cajaNoSíNo
Persona completamente quietaNoNoLa mide como distancia
ConsumoMuy bajo (~50 µA)Bajo (~3 mA)Medio (~15 mA)
Uso típicoLuces, alarmasSensores ocultos, abrepuertasDetección de obstáculos, medida de nivel

Si quieres saber si alguien se mueve, y no si hay alguien en la habitación, el PIR es la solución más económica. Si necesitas medir a qué distancia está un objeto, echa un vistazo a Sensor de distancia HC-SR04.

Ideas de proyectos con el sensor PIR

  • Luz automática de pasillo: enciende una lámpara con un relé al detectar movimiento y apágala tras 30 segundos sin movimiento.
  • Alarma antirrobo: haz sonar un zumbador si detecta movimiento en modo noche; para la parte del sonido, mira ¿Qué es un zumbador?
  • Luz nocturna inteligente: combina el PIR con un sensor de luz LDR para una lámpara que solo se encienda cuando esté oscuro y haya movimiento.
  • Avisos en el móvil: envía un mensaje de Telegram desde un ESP32 cuando detecte movimiento.
  • Pantalla que ahorra energía: enciende la retroiluminación de una LCD cuando alguien se acerque y apágala cuando se vaya.
  • Contador de visitas: cuenta cada movimiento por una puerta y muéstralo en una pantalla.

Errores comunes y cómo solucionarlos

  • La salida se queda siempre en HIGH: el tiempo Tx es demasiado largo o en modo H hay movimiento constante; baja el potenciómetro y comprueba que el sensor no apunte a una fuente de calor.
  • Nunca se dispara: puede que VCC no tenga 5 V, que el sensor siga calentándose o que el cable OUT esté en un pin distinto del que pone el código.
  • Se dispara solo cada pocos segundos: la alimentación tiene ruido; añade un condensador y aléjalo de relés y módulos Wi-Fi.
  • No vuelve a detectar justo después de que acabe el movimiento: el tiempo de bloqueo de unos 2,5 segundos es normal; el sensor no está estropeado.
  • Montarlo mal orientado: un PIR detecta mejor cuando el movimiento cruza su campo de visión de lado; a alguien que camina directo hacia él lo nota más tarde.

Un sensor PIR es uno de los mejores puntos de partida para tu primer proyecto de domótica: se conecta con tres cables y ves el resultado enseguida. En la app BlueGrays encontrarás proyectos de luz con sensor de movimiento, timbre y alarma, paso a paso con esquemas y código.

Preguntas frecuentes

¿A qué distancia detecta un sensor PIR?

El HC-SR501 detecta entre 3 y 7 metros con un ángulo de unos 110 grados. El alcance se ajusta con el potenciómetro Sx (sensibilidad) del módulo; al girarlo en sentido horario aumenta.

¿Un sensor PIR detecta a una persona quieta?

No. Un PIR solo detecta cambios en la radiación infrarroja, es decir, movimiento. No notará a alguien sentado completamente quieto. Para saber si hay alguien en una habitación se usan radares de presencia mmWave como el LD2410.

¿Funciona un sensor PIR a través de un cristal?

No. El vidrio normal de las ventanas no deja pasar la radiación infrarroja que emite el cuerpo, así que un sensor detrás de un cristal no ve el movimiento de fuera. Para exteriores, monta el sensor fuera, en un lugar protegido de la lluvia.

¿El HC-SR501 funciona a 3,3 V?

Su regulador es inestable por debajo de 4,5 V, así que necesita 5 V. La salida ya es de 3,3 V y puede ir directamente a un ESP32 o a una Pico. Si quieres un sistema totalmente a 3,3 V, usa el pequeño módulo PIR AM312, que funciona entre 2,7 y 12 V.

¿Por qué mi sensor PIR se dispara solo?

Las causas más habituales son el tiempo de calentamiento, las fuentes de calor hacia las que apunta (radiadores, sol, aire acondicionado) y el ruido en la alimentación. Ignora los primeros 60 segundos, orienta el sensor lejos del calor, pon un condensador entre VCC y GND y aléjalo de los módulos Wi-Fi.

¿Qué diferencia hay entre el modo H y el modo L del HC-SR501?

En modo H (repetible) el tiempo de salida vuelve a empezar con cada detección mientras sigue habiendo movimiento, así que una luz se mantiene encendida mientras alguien se mueva. En modo L (único) la salida se apaga al terminar el tiempo aunque siga el movimiento; el siguiente disparo llega tras el tiempo de bloqueo.

Ver todos los proyectos
Detector de movimiento con sensor de movimiento
#24Principiante
Premium

Detector de movimiento con sensor de movimiento

Proyecto básico que enciende LEDs al detectar movimiento en el entorno con sensor de movimiento PIR. Enseña la lectura digital del sensor y la lógica de detección de movimiento.

4.6(47)
66
Timbre y luz con sensor de movimiento
#25Intermedio
Premium

Timbre y luz con sensor de movimiento

Proyecto que enciende el LED y reproduce la melodía del timbre con zumbador cuando el sensor PIR detecta movimiento. Combina la detección de movimiento con la notificación por sonido y luz.

4.7(54)
70
Iluminación automática con el sensor de movimiento PIR del ESP32
#121Intermedio
Premium

Iluminación automática con el sensor de movimiento PIR del ESP32

En este proyecto, utilizaremos el sensor de movimiento PIR HC-SR501 para detectar a las personas que entren en la habitación y encender el LED automáticamente. Cuando se detecte movimiento, el LED permanecerá encendido durante un tiempo determinado y gestionaremos el tiempo mediante la función `millis()` y un contador, sin necesidad de utilizar `delay()`. De este modo, obtendremos un sistema de iluminación con sensor de movimiento que no bloquea el ESP32 y permite realizar otras tareas. En la vi

4.4(24)
38
Alarma con sensor de movimiento ESP32
#140Intermedio
Premium

Alarma con sensor de movimiento ESP32

En este proyecto, elaborado con un ESP32 y un sensor PIR, cuando se detecta movimiento, el zumbador se activa y emite una alarma sonora. Se trata de una aplicación sencilla y económica para un sistema de seguridad. (Las imágenes son ilustrativas; por favor, conéctelas según las instrucciones)

4.4(10)
15
Iluminación Inteligente ESP32 (PIR + LDR + Relé + OLED)
#141Avanzado
Premium

Iluminación Inteligente ESP32 (PIR + LDR + Relé + OLED)

¡Convierte tu pasillo, baño o despensa en iluminación inteligente con ESP32! Utilizando un sensor de movimiento PIR, un sensor de luz LDR y un módulo de relé, construimos el escenario clásico "la luz se enciende cuando se detecta movimiento en la oscuridad" — si el ambiente ya está iluminado, el movimiento NO activa la luz, ahorrando energía durante el día. La luz permanece encendida durante 30 segundos; si el movimiento continúa, el temporizador se reinicia y la luz permanece encendida más tiem

4.3(6)
11
Sistema de Alarma de Movimiento ESP32 (PIR + Buzzer + LED + Telegram)
#145Avanzado
Premium

Sistema de Alarma de Movimiento ESP32 (PIR + Buzzer + LED + Telegram)

Un sistema inteligente de alarma de seguridad que activa el buzzer y el LED cuando el sensor PIR detecta movimiento, y envía simultáneamente una notificación instantánea al propietario vía Telegram. Cuenta con un cooldown de 30 segundos para evitar falsas alarmas. Ideal para seguridad del hogar, vigilancia de garajes, almacenes o salas de trabajo. Con ESP32-CAM se pueden añadir notificaciones con fotos; con el clásico ESP32 DevKit V1 se envían notificaciones de texto.

0.0(0)
8
Sistema de alerta láser
#22Intermedio
Premium

Sistema de alerta láser

Proyecto de seguridad que detecta cuando se interrumpe el rayo láser mediante LDR y avisa con zumbador y LED. Enseña la lógica de detección de interrupción de luz con par láser-LDR.

4.8(64)
82
Sistema de seguridad láser
#23Avanzado
Premium

Sistema de seguridad láser

Sistema de seguridad avanzado que activa la alarma cuando se interrumpe el rayo láser y puede restablecerse mediante pulsador o control por infrarrojos. Enseña la gestión de múltiples fuentes de entra

4.8(60)
77

Aprende cómo detecta un sensor PIR el movimiento de las personas, cómo ajustar el HC-SR501, conectarlo a Arduino, hacer una luz que se enciende al detectar movimiento y evitar falsas alarmas.

Sensor de movimiento PIR (HC-SR501): detección de movimiento con Arduino, ESP32 y Pico | BlueGrays