¿Qué vamos a hacer?
¡Prepárate para dar un paso más en la automatización de tus proyectos con el Sensor de Movimiento PIR HC-SR501 de tu kit! Este módulo te permitirá detectar la presencia de personas o animales, abriendo la puerta a un sinfín de aplicaciones de seguridad, iluminación automática o incluso juguetes interactivos.
Al final de este tutorial, serás capaz de:
- Conectar correctamente el sensor PIR HC-SR501 a tu ESP32-C3 SuperMini.
- Detectar movimiento y mostrar un mensaje en el Monitor Serial.
- (Opcional): Integrar la detección de movimiento con los LEDs o el Buzzer de tutoriales anteriores para crear alertas visuales o sonoras.
Requisitos Previos:
Antes de comenzar, asegúrate de tener lo siguiente:
- ESP32-C3 SuperMini (1 unidad)
- Sensor de Movimiento PIR HC-SR501 (1 unidad)
- Protoboard de 830 puntos (1 unidad)
- Cables Dupont F-M y M-M
- IDE de Arduino con la plataforma ESP32 instalada y configurada (Tutorial 0).
- (Opcional): LEDs (del Tutorial 1) y/o Buzzer (del Tutorial 2) para las actividades de integración.
Actividad 1: Detectando Presencia y Mostrando en Monitor Serial
Dificultad: Baja
Objetivo: Conectar el sensor PIR y leer su estado para detectar movimiento, mostrando el resultado en el Monitor Serial.
Descripción: Esta actividad te familiarizará con el sensor PIR. Lo conectarás a tu ESP32-C3 y escribirás un código simple para saber cuándo se detecta movimiento en su campo de visión.
Materiales que necesitas:
- ESP32-C3 SuperMini
- Sensor de Movimiento PIR HC-SR501
- Cables Dupont
¿Qué es el Sensor de Movimiento PIR HC-SR501?
El Sensor de Movimiento PIR HC-SR501 es un detector de Movimiento por Infrarrojos Pasivo (PIR por sus siglas en inglés). «Pasivo» significa que no emite energía, sino que detecta cambios en la radiación infrarroja (calor) que emiten los cuerpos. Cuando una persona o animal se mueve dentro de su rango, el sensor detecta un cambio en el patrón de calor, y su pin de salida cambia de estado.
Este sensor tiene un lente tipo «domo» que ayuda a ampliar su campo de visión. También tiene dos potenciómetros en su base (usualmente naranja o azules) que te permiten ajustar:
- Sensibilidad: Qué tan lejos o qué tan pequeño debe ser el movimiento para ser detectado.
- Tiempo de Retardo: Por cuánto tiempo la señal de salida permanece activa después de la última detección de movimiento.
Cuando el sensor PIR detecta movimiento, su pin de salida pasa a un estado ALTO (HIGH). Cuando no hay movimiento (o el tiempo de retardo ha terminado), vuelve a BAJO (LOW). Es una salida digital simple de «sí» o «no».
Conexión del circuito (Sensor PIR HC-SR501):
¡Antes de conectar, asegúrate de que tu ESP32-C3 SuperMini esté desconectada del computador!
El sensor PIR HC-SR501 tiene 3 pines claramente identificados:
- Pin
VCCo+del PIR a3.3Ven tu ESP32-C3. - Pin
GNDo-del PIR aGNDen tu ESP32-C3. - Pin
OUT(Salida) del PIR aGPIO 2en tu ESP32-C3. (Podrías usar otro GPIO digital disponible si lo deseas).
Esquemático y Simulación en Wokwi:
Observa cómo se conecta el sensor PIR a tu ESP32-C3 SuperMini. En Wokwi, podrás simular el movimiento y ver cómo cambia el estado del sensor en el Monitor Serial.

Código para la Actividad 1:
Para esta actividad, no necesitas librerías adicionales, ya que digitalRead() es una función nativa de Arduino.
// Define el pin donde está conectado el pin de Salida (OUT) del sensor PIR.
#define PIR_SENSOR_PIN GPIO_NUM_2
// Variable para almacenar el estado actual del sensor PIR
int pirState = LOW; // Inicialmente, asumimos que no hay movimiento
// Variable para almacenar el estado anterior, para detectar cambios
int lastPirState = LOW;
void setup() {
Serial.begin(115200); // Inicia la comunicación serial
Serial.println(F("Iniciando Monitor de Movimiento PIR..."));
pinMode(PIR_SENSOR_PIN, INPUT); // Configura el pin del PIR como entrada
}
void loop() {
// Lee el estado actual del sensor PIR (HIGH si detecta movimiento, LOW si no)
pirState = digitalRead(PIR_SENSOR_PIN);
// Compara el estado actual con el estado anterior para detectar un cambio
if (pirState != lastPirState) {
if (pirState == HIGH) {
// Se detectó movimiento
Serial.println(F("¡MOVIMIENTO DETECTADO!"));
} else {
// El movimiento ha cesado
Serial.println(F("Movimiento FINALIZADO."));
}
delay(50); // Pequeña pausa para estabilizar la lectura después del cambio
lastPirState = pirState; // Actualiza el estado anterior
}
// Si no hay cambio, no imprimimos nada para no saturar el Monitor Serial
delay(10); // Pequeña pausa entre lecturas para no sobrecargar el bucle
}
Actividad 2: Alerta Visual con LED al Detectar Movimiento
Dificultad: Media
Objetivo: Integrar el sensor PIR con un LED (del Tutorial 1) para que el LED se encienda cuando se detecte movimiento.
Descripción: Esta actividad te permitirá crear una simple alarma visual. El LED se encenderá automáticamente cuando el PIR detecte la presencia de algo, y se apagará cuando el movimiento cese.
Materiales que necesitas:
- ESP32-C3 SuperMini
- Sensor de Movimiento PIR HC-SR501
- LED (rojo, amarillo o verde)
- Resistencia de 220 Ohm (para proteger el LED, como en el Tutorial 1)
- Cables Dupont
- Protoboard
Conexión del circuito:
¡Asegúrate de que tu ESP32-C3 SuperMini esté desconectada del computador!
- Conexiones PIR: (Las mismas que la Actividad 1)
VCCdel PIR a3.3VGNDdel PIR aGNDOUTdel PIR aGPIO 2
- Conexiones LED: (Revisa el Tutorial 1)
- Patilla más larga (ánodo) del LED a
GPIO 3en tu ESP32-C3. - Patilla más corta (cátodo) del LED a un extremo de la Resistencia de 220 Ohm.
- El otro extremo de la Resistencia de 220 Ohm a
GND.
- Patilla más larga (ánodo) del LED a
Esquemático y Simulación en Wokwi:
Aquí verás cómo se conectan el PIR y el LED. Haz clic en la imagen para abrir la simulación en Wokwi y observa cómo el LED se enciende al detectar movimiento simulado.

Código para la Actividad 2:
// Define el pin para el sensor PIR
#define PIR_SENSOR_PIN GPIO_NUM_2
// Define el pin para el LED
#define LED_PIN GPIO_NUM_3
int pirState = LOW; // Variable para el estado del PIR
int lastPirState = LOW; // Variable para el estado anterior del PIR
void setup() {
Serial.begin(115200);
Serial.println(F("Sistema de Alerta de Movimiento (PIR + LED)..."));
pinMode(PIR_SENSOR_PIN, INPUT); // Pin del PIR como entrada
pinMode(LED_PIN, OUTPUT); // Pin del LED como salida
}
void loop() {
pirState = digitalRead(PIR_SENSOR_PIN); // Lee el estado del PIR
if (pirState != lastPirState) {
if (pirState == HIGH) {
// Movimiento detectado: enciende el LED
digitalWrite(LED_PIN, HIGH);
Serial.println(F("¡MOVIMIENTO DETECTADO! LED Encendido."));
} else {
// Movimiento cesado: apaga el LED
digitalWrite(LED_PIN, LOW);
Serial.println(F("Movimiento FINALIZADO. LED Apagado."));
}
delay(50); // Pequeña pausa para estabilizar
lastPirState = pirState;
}
delay(10);
}
Actividad 3: Alerta Sonora y Visual con PIR, Buzzer y LED
Dificultad: Alta
Objetivo: Combinar el sensor PIR con un LED y un Buzzer (del Tutorial 2) para crear una alarma completa que se active al detectar movimiento.
Descripción: Lleva tu alarma al siguiente nivel. Al detectar movimiento, no solo encenderás un LED, sino que también activarás un sonido de alarma con el buzzer. Esto es ideal para una pequeña alarma de seguridad o un sistema de bienvenida.
Materiales que necesitas:
- ESP32-C3 SuperMini
- Sensor de Movimiento PIR HC-SR501
- LED
- Resistencia de 220 Ohm
- Buzzer (Activo o Pasivo, como en el Tutorial 2)
- Cables Dupont
- Protoboard
Conexión del circuito:
¡Asegúrate de que tu ESP32-C3 SuperMini esté desconectada del computador!
- Conexiones PIR: (Las mismas que la Actividad 1)
VCCdel PIR a3.3VGNDdel PIR aGNDOUTdel PIR aGPIO 2
- Conexiones LED: (Las mismas que la Actividad 2)
- Ánodo del LED a
GPIO 3. - Cátodo del LED a Resistencia de 220 Ohm a
GND.
- Ánodo del LED a
- Conexiones Buzzer: (Revisa el Tutorial 2. Usaremos el Buzzer Activo para simplicidad)
- Pin positivo
+del Buzzer Activo aGPIO 6en tu ESP32-C3. - Pin negativo
-del Buzzer Activo aGND.
- Pin positivo
Esquemático y Simulación en Wokwi:
Aquí verás cómo se conectan el PIR, el LED y el Buzzer. Haz clic en la imagen para abrir la simulación en Wokwi y observa cómo se activa la alarma visual y sonora al detectar movimiento.

Código para la Actividad 3:
// Pines de componentes
#define PIR_SENSOR_PIN GPIO_NUM_2
#define LED_PIN GPIO_NUM_3
#define BUZZER_PIN GPIO_NUM_6 // Pin para el Buzzer Pasivo
int pirState = LOW; // Estado actual del PIR
int lastPirState = LOW; // Estado anterior del PIR
// Función para generar el sonido de "policía" con el buzzer pasivo
void playPoliceSiren() {
// Patrón simple de dos tonos alternados
tone(BUZZER_PIN, 1000); // Primer tono (ej. 1000 Hz)
delay(200); // Dura 200 ms
tone(BUZZER_PIN, 1500); // Segundo tono (ej. 1500 Hz)
delay(200); // Dura 200 ms
noTone(BUZZER_PIN); // Detiene el sonido entre ciclos si se desea un "gap"
}
void setup() {
Serial.begin(115200);
Serial.println(F("¡Sistema de Alarma Completa (PIR + LED + Buzzer Policial) Activado!"));
pinMode(PIR_SENSOR_PIN, INPUT); // PIR como entrada
pinMode(LED_PIN, OUTPUT); // LED como salida
pinMode(BUZZER_PIN, OUTPUT); // Buzzer como salida (importante para tone())
digitalWrite(LED_PIN, LOW); // Aseguramos que el LED esté apagado al inicio
noTone(BUZZER_PIN); // Aseguramos que el buzzer esté en silencio al inicio
}
void loop() {
pirState = digitalRead(PIR_SENSOR_PIN); // Lee el estado del PIR
if (pirState != lastPirState) {
if (pirState == HIGH) {
// Movimiento detectado: enciende el LED y activa la sirena
digitalWrite(LED_PIN, HIGH);
Serial.println(F("¡ALERTA! MOVIMIENTO DETECTADO. Sirena y LED Activados."));
} else {
// Movimiento cesado: apaga el LED y el buzzer
digitalWrite(LED_PIN, LOW);
noTone(BUZZER_PIN); // Desactiva la sirena
Serial.println(F("Movimiento FINALIZADO. Alarma Desactivada."));
}
delay(50); // Pequeña pausa para estabilizar
lastPirState = pirState;
}
// Si se detecta movimiento (pirState es HIGH), reproduce la sirena continuamente.
// La sirena se detendrá cuando pirState vuelva a LOW en el 'if' anterior.
if (pirState == HIGH) {
playPoliceSiren();
}
delay(10); // Pequeña pausa para no sobrecargar el bucle
}
