Todo emite cierta radiación de bajo nivel, y cuanto más caliente es algo, mayor radiación es emitida. Los sensores infrarrojos pasivos (PIR) son dispositivos ideales para proyectos que implican la detección de movimiento, ya que aprovechan este principio físico. Este tutorial se centrará en cómo integrar un sensor PIR, específicamente el popular modelo HC-SR501, con un microcontrolador ESP8266, una plataforma conocida por su conectividad Wi-Fi y su versatilidad en proyectos de Internet de las Cosas (IoT). A lo largo de esta guía, desglosaremos el funcionamiento del sensor, sus ajustes, y cómo programar el ESP8266 para reaccionar a las detecciones de movimiento, creando así un sistema de alerta o automatización sencillo pero funcional.

Principios de Funcionamiento del Sensor PIR
El sensor PIR HC-SR501 opera basándose en la detección de cambios en la radiación infrarroja. Como se ha mencionado, todo cuerpo emite radiación infrarroja, y la intensidad de esta radiación es proporcional a la temperatura del objeto. El sensor PIR no emite radiación propia (de ahí el término "pasivo"); en cambio, detecta la radiación infrarroja que emana de los objetos en su entorno.
Internamente, el sensor está dividido en dos mitades. Estas mitades están dispuestas de tal manera que se anulan mutuamente. La detección de movimiento ocurre cuando un objeto en movimiento cruza entre estas dos mitades. Al hacerlo, provoca un cambio diferencial en la radiación infrarroja detectada por cada mitad. Es este cambio, y no los niveles promedio de radiación infrarroja, lo que el sensor interpreta como movimiento. Si un objeto estuviera completamente quieto, incluso si emite radiación infrarroja, el sensor no lo detectaría como movimiento.
El sensor HC-SR501 tiene un alcance de detección de movimiento que varía entre 3 y 7 metros. Su funcionamiento está optimizado para detectar la presencia de personas u otros cuerpos cálidos que se muevan dentro de su campo de visión.
Componentes y Conexiones del Sensor PIR HC-SR501
El sensor HC-SR501 es un componente electrónico compacto y fácil de usar, diseñado para integrarse en diversos proyectos. Típicamente, este sensor cuenta con tres pines esenciales para su funcionamiento:
- VCC: Pin de alimentación. Este pin debe conectarse a la fuente de voltaje adecuada para el sensor.
- OUTPUT: Pin de señal de salida. Cuando el sensor detecta movimiento, este pin cambia su estado lógico, indicando la activación.
- GND: Pin de tierra. Debe conectarse al punto de tierra común del circuito.
Además de estos pines de conexión, el sensor HC-SR501 incorpora dos potenciómetros (conocidos como "trimers") que permiten ajustar con precisión su comportamiento:
- Ajuste de Sensibilidad: Este trimer regula la sensibilidad del sensor. Girándolo en un sentido se aumenta la sensibilidad, permitiendo detectar movimientos a mayor distancia o movimientos más sutiles. Girándolo en el sentido opuesto, se disminuye la sensibilidad, lo que puede ser útil para evitar activaciones accidentales por objetos pequeños o para distinguir entre el movimiento de una persona y el de una mascota. La posición mínima de sensibilidad generalmente se encuentra en un extremo del potenciómetro, y la máxima en el otro.
- Ajuste del Temporizador (Retardo): Este trimer controla el tiempo durante el cual la señal de salida permanece activa después de que se ha detectado movimiento. El rango de ajuste suele ser de aproximadamente 3 segundos a unos 5 minutos. Una vez que el sensor detecta movimiento y activa su salida, esta permanecerá en estado de activación durante el tiempo configurado por este temporizador.

Modos de Funcionamiento: Continuo vs. Repetición
El sensor PIR HC-SR501 ofrece dos modos de funcionamiento principales, seleccionables mediante un selector de modo o mediante puentes en la placa del sensor:
- Modo de Repetición (Modo L - Normal): Este es el modo predeterminado en la mayoría de las configuraciones. En este modo, el sensor se activa al detectar movimiento y mantiene la señal de salida alta durante el tiempo de retardo configurado. Una vez que el tiempo de retardo expira, el sensor vuelve a su estado de espera. Si se detecta un nuevo movimiento durante el período de retardo, el temporizador se reinicia y el período de activación se alarga. Sin embargo, si el movimiento cesa y el tiempo de retardo expira, el sensor entrará nuevamente en modo de espera, incluso si el movimiento continúa en su campo de visión. La salida cambia de alta a baja cuando se activa.
- Modo Continuo: En este modo, si el sensor detecta movimiento de manera continua, mantendrá una señal de salida continua. Esto significa que mientras haya movimiento detectado, la salida permanecerá activa sin necesidad de reiniciar el temporizador con cada nueva detección.
La selección entre estos modos se realiza típicamente puenteando contactos específicos en la placa del sensor. Por ejemplo, para activar el modo continuo, se pueden puentear los contactos 2 y 3. Para activar el modo de repetición (modo L - Normal), se podría hacer un puente entre los contactos 1 y 1 (o simplemente no puentearlos, dependiendo del diseño específico del sensor).
Integración con ESP8266
El ESP8266 es un microcontrolador de bajo costo y alta integración con capacidades Wi-Fi, lo que lo hace ideal para proyectos de IoT. Su capacidad para conectarse a redes inalámbricas permite enviar datos de detección de movimiento a la nube, activar notificaciones, o controlar otros dispositivos de forma remota.
Consideraciones de Voltaje
Una consideración importante al conectar un sensor PIR al ESP8266 es el voltaje de operación. El ESP8266, especialmente en módulos como el NodeMCU, opera típicamente a 3.3V. Si bien muchos sensores PIR HC-SR501 pueden funcionar con un rango de voltaje que incluye 5V, su pin de salida puede generar una señal de hasta 3.3V o 5V dependiendo de la configuración y la alimentación del sensor.
Conectar directamente la salida de un sensor PIR alimentado a 5V a un pin de entrada de 3.3V del ESP8266 puede ser arriesgado y podría dañar el microcontrolador. Los pines de entrada del ESP8266, aunque tienen cierta protección, no están diseñados para voltajes superiores a 3.3V.
Para una conexión segura, se recomienda lo siguiente:
- Alimentar el Sensor PIR a 3.3V si es posible: Si el sensor PIR HC-SR501 puede operarse de forma fiable con 3.3V, esta es la opción más sencilla. Sin embargo, la mayoría de los HC-SR501 están diseñados para 5V.
- Utilizar un Divisor de Voltaje: Si el sensor PIR debe ser alimentado a 5V, se debe implementar un divisor de voltaje en la línea de salida del sensor antes de conectarla a un pin del ESP8266. Una configuración común implica el uso de dos resistencias (por ejemplo, una de 100Ω y otra de 200Ω) para reducir el voltaje de 5V a aproximadamente 3.3V. La resistencia de 100Ω se coloca en serie con la salida del sensor, y la resistencia de 200Ω se coloca desde la salida del sensor a tierra. El punto de conexión entre ambas resistencias se conecta al pin de entrada del ESP8266.
- Añadir una Resistencia en Serie: Independientemente de si se usa un divisor de voltaje, es una buena práctica añadir una resistencia de 100Ω o 200Ω en serie con la salida del PIR. Esta resistencia ayuda a limitar la corriente que fluye hacia el pin de entrada del ESP8266, protegiéndolo contra picos de voltaje o corrientes excesivas, especialmente si la señal de salida del PIR es ligeramente superior a 3.3V. Sin esta resistencia, el circuito podría funcionar inicialmente, pero existe el riesgo de "freír" el pin de entrada del ESP8266 con el tiempo.

Programación del ESP8266 con Arduino IDE
Para programar el ESP8266, utilizaremos el popular entorno de desarrollo Arduino IDE, asegurándonos de tener instalada la compatibilidad para placas ESP8266.
A continuación, se presenta un boceto (sketch) básico para detectar movimiento y, por ejemplo, encender un LED conectado a otro pin del ESP8266.
// Definición de pinesconst int sensorPirPin = D2; // Pin GPIO al que está conectado el sensor PIR (ej. D2 en NodeMCU)const int ledPin = D4; // Pin GPIO al que está conectado el LED (ej. D4 en NodeMCU)void setup() { // Inicialización de la comunicación serial para depuración Serial.begin(9600); Serial.println("Iniciando sistema de detección de movimiento..."); // Configuración de los pines pinMode(sensorPirPin, INPUT); // El pin del sensor PIR se configura como entrada pinMode(ledPin, OUTPUT); // El pin del LED se configura como salida // Calibración del sensor PIR // El sensor PIR necesita un tiempo para calibrarse después de encenderse. // Durante este tiempo, puede haber detecciones falsas. Serial.println("Calibrando sensor PIR. Por favor, espere..."); delay(30000); // Espera de 30 segundos para la calibración (ajustable) Serial.println("Sensor calibrado. Listo para detectar movimiento."); // Asegurarse de que el LED esté apagado al inicio digitalWrite(ledPin, LOW);}void loop() { // Leer el estado del pin del sensor PIR int sensorState = digitalRead(sensorPirPin); // Comprobar si se ha detectado movimiento if (sensorState == HIGH) { // Si el sensor está en HIGH, significa que se ha detectado movimiento Serial.println("¡Movimiento detectado!"); // Encender el LED como indicación digitalWrite(ledPin, HIGH); // Mantener el LED encendido durante un tiempo determinado (ej. 5 segundos) // Nota: El tiempo de retardo del sensor PIR ya influye en cuánto tiempo // la señal de salida se mantiene alta. Este delay adicional es para el LED. delay(5000); // El LED se apaga después de 5 segundos // Apagar el LED digitalWrite(ledPin, LOW); // Importante: En modo de repetición (normal), si el sensor sigue detectando // movimiento, la señal se mantendrá alta hasta que el temporizador del sensor expire. // Si se desea una acción más inmediata tras la detección, se puede añadir // un delay corto aquí o ajustar el temporizador del sensor. // Para evitar múltiples detecciones falsas en un corto período, podemos // añadir un pequeño delay después de apagar el LED. delay(2000); // Espera adicional para evitar detecciones repetidas inmediatas } else { // Si el sensor está en LOW, no hay movimiento detectado // Asegurarse de que el LED esté apagado digitalWrite(ledPin, LOW); }}Este boceto cumple con la función básica de leer la señal del sensor PIR y actuar en consecuencia, en este caso, encendiendo un LED. La configuración Serial.begin(9600) es crucial para la depuración, permitiendo ver los mensajes del programa en el Monitor Serial del Arduino IDE.
La línea pinMode(sensorPirPin, INPUT) declara que el pin conectado al sensor PIR actuará como una entrada, recibiendo la señal digital del sensor. pinMode(ledPin, OUTPUT) configura el pin del LED como una salida para poder controlarlo.
El delay(30000) en la función setup() es un tiempo de calibración para el sensor PIR. Al encenderse, los sensores PIR necesitan un período para estabilizarse y establecer un "punto de referencia" de la radiación infrarroja ambiental. Durante este período, pueden ocurrir activaciones falsas. Es recomendable dejar este tiempo para que el sensor se calibre correctamente.
En la función loop(), digitalRead(sensorPirPin) lee el estado lógico del pin del sensor. Si el estado es HIGH, significa que se ha detectado movimiento. En ese momento, se enciende el LED (digitalWrite(ledPin, HIGH)), se espera un tiempo configurable (en este caso, 5 segundos) y luego se apaga (digitalWrite(ledPin, LOW)).
Módulo ESP8266 y Sensor PIR detector de movimiento
Mejoras y Consideraciones Adicionales
El boceto proporcionado es un punto de partida. Para proyectos más complejos, se pueden considerar las siguientes mejoras:
Conexión de un Relé para Activar Dispositivos Mayores
Si el objetivo es activar una alarma, una sirena, una luz de mayor potencia, o cualquier otro dispositivo que requiera más corriente o voltaje que un LED, se necesitará un relé. El relé actúa como un interruptor controlado electrónicamente.
Un circuito típico para activar un relé con un microcontrolador como el ESP8266 implicaría:
- Un transistor NPN (como el BC547) para actuar como interruptor del relé.
- Una resistencia en serie con la base del transistor para limitar la corriente.
- Un diodo de libre circulación (flyback diode) en paralelo con la bobina del relé para proteger el transistor de los picos de voltaje inversores cuando el relé se desactiva.
- El relé mismo, cuyos contactos se usarían para controlar el dispositivo externo.
El pin de salida del ESP8266 controlaría la base del transistor, que a su vez energizaría o desenergizaría la bobina del relé.
Un esquema sencillo para esto incluiría el sensor PIR conectado al ESP8266, y el ESP8266 controlando un pin que a su vez activa el circuito del relé. Los pines utilizados para el sensor y el control del relé no son necesariamente relevantes en cuanto a su número específico, sino a su funcionalidad (entrada para el sensor, salida para el relé).
Integración con Redes Wi-Fi
Para que el ESP8266 sea verdaderamente un dispositivo IoT, se debe programar para conectarse a una red Wi-Fi. Una vez conectado, puede enviar notificaciones (por ejemplo, a través de un servicio como IFTTT, Telegram, o un servidor MQTT) cada vez que se detecta movimiento.
El código para la conexión Wi-Fi es estándar para el ESP8266 y generalmente implica:
#include <ESP8266WiFi.h>const char* ssid = "TU_SSID_WIFI";const char* password = "TU_PASSWORD_WIFI";void setup() { // ... (configuración de pines y sensor) ... WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\nConectado a la red Wi-Fi"); Serial.print("Dirección IP: "); Serial.println(WiFi.localIP());}void loop() { // ... (lectura del sensor) ... if (sensorState == HIGH) { Serial.println("Movimiento detectado. Enviando notificación..."); // Aquí iría el código para enviar la notificación // Por ejemplo, publicar en un broker MQTT o hacer una petición HTTP delay(10000); // Esperar antes de la próxima posible notificación } // ...}Consideraciones sobre el Modo de Funcionamiento y Detecciones Falsas
El modo de repetición (L - Normal) es generalmente preferible para la mayoría de las aplicaciones de alarma, ya que evita que el sensor permanezca activado indefinidamente si el movimiento es continuo, lo que podría ser un desperdicio de energía o generar activaciones no deseadas en sistemas de notificación.
Para minimizar las detecciones falsas, además del tiempo de calibración, se puede ajustar finamente la sensibilidad del sensor. Si el sensor se activa por mascotas pequeñas y se desea evitar esto, se debe reducir la sensibilidad. Si el problema es que no detecta movimiento a la distancia deseada, se debe aumentar la sensibilidad.
El ajuste del temporizador también es crucial. Si se desea que una luz permanezca encendida solo unos segundos tras detectar movimiento, se ajustará el temporizador del sensor a un valor bajo. Si se necesita que la alarma permanezca activa durante más tiempo, se ajustará a un valor mayor.
Es importante entender que el sensor PIR detecta cambios en la radiación infrarroja. Esto significa que cambios bruscos de temperatura en el entorno (como la apertura de una ventana con aire frío o caliente, o la proximidad de un objeto muy caliente) podrían, en teoría, desencadenar una detección. Sin embargo, el diseño de dos mitades y el procesamiento interno del HC-SR501 minimizan este riesgo en la práctica.
Actualización y Mantenimiento
Los componentes electrónicos, especialmente los sensores, pueden degradarse con el tiempo. Si bien el HC-SR501 es un sensor robusto, es prudente considerar la vida útil de los componentes en proyectos a largo plazo. Las actualizaciones de firmware para el ESP8266 también pueden ser necesarias para mejorar la seguridad, la funcionalidad o la compatibilidad.
Evitando Clichés y Malentendidos
Un error común es pensar que los sensores PIR "ven" movimiento en el sentido óptico. En realidad, detectan la radiación infrarroja emitida por cuerpos cálidos. Por lo tanto, no pueden "ver" en la oscuridad, pero sí pueden detectar calor a través de materiales delgados y opacos a la luz visible (como plásticos o telas finas), aunque esto puede afectar la sensibilidad. Otro malentendido es la creencia de que funcionan con cualquier tipo de movimiento; están optimizados para detectar el movimiento de cuerpos con una firma térmica distinta a la del entorno.
Este tutorial paso a paso proporciona una base sólida para implementar la detección de movimiento con un sensor PIR y un ESP8266. La flexibilidad de esta combinación abre un abanico de posibilidades para la automatización del hogar, sistemas de seguridad, y una infinidad de proyectos de robótica y IoT.