¿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
VCC
o+
del PIR a3.3V
en tu ESP32-C3. - Pin
GND
o-
del PIR aGND
en tu ESP32-C3. - Pin
OUT
(Salida) del PIR aGPIO 2
en 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)
VCC
del PIR a3.3V
GND
del PIR aGND
OUT
del PIR aGPIO 2
- Conexiones LED: (Revisa el Tutorial 1)
- Patilla más larga (ánodo) del LED a
GPIO 3
en 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)
VCC
del PIR a3.3V
GND
del PIR aGND
OUT
del 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 6
en 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 }