Detector de Movimiento con Sensor PIR y Arduino

Introducción

En este tutorial, construiremos un detector de movimiento simple pero efectivo utilizando una placa Arduino y un sensor PIR HC-SR501. Los sensores PIR son dispositivos electrónicos que miden la luz infrarroja (IR) que irradia de los objetos en su campo de visión. Son fantásticos para detectar cuándo una persona (o un animal) se ha movido dentro o fuera del alcance del sensor.

Este proyecto es ideal para principiantes y sirve como base para aplicaciones más complejas, como encender luces automáticamente, activar una alarma, un contador de personas, ¡y mucho más!

Materiales Necesarios

  • Placa Arduino UNO (o cualquier otra compatible)
  • Sensor de Movimiento PIR HC-SR501
  • Un LED (del color que prefieras)
  • Una resistencia de 220Ω (ohmios)
  • Protoboard (placa de pruebas)
  • Cables Jumper (macho-macho y macho-hembra)
  • Cable USB para conectar el Arduino al ordenador

Esquema de Montaje

El montaje es bastante sencillo. Sigue estas conexiones con cuidado. El sensor PIR tiene 3 pines: VCC (alimentación), OUT (salida de señal) y GND (tierra).

Captura de pantalla 2025-10-23 185843

Conexiones:

  • Sensor PIR (VCC) → 5V del Arduino.
  • Sensor PIR (GND) → GND del Arduino.
  • Sensor PIR (OUT) → Pin digital 2 del Arduino.
  • Pata larga del LED (ánodo) → Pin digital 13 del Arduino.
  • Pata corta del LED (cátodo) → Una pata de la resistencia de 220Ω.
  • La otra pata de la resistencia → GND del Arduino.
// Definimos los pines que vamos a utilizar
const int pinPIR = 2;   // Pin de datos del sensor PIR
const int pinLED = 13;  // Pin para el LED de notificación

// Variable para almacenar el estado del sensor
int estadoPIR = 0;

void setup() {
  // Iniciamos la comunicación serial para ver los resultados en el monitor
  Serial.begin(9600);
  
  // Configuramos los pines
  pinMode(pinPIR, INPUT);   // El sensor PIR es una entrada de datos
  pinMode(pinLED, OUTPUT);  // El LED es una salida
  
  Serial.println("Sensor PIR inicializando...");
  // El sensor necesita un par de segundos para calibrarse
  delay(2000);
  Serial.println("Sensor listo.");
}

void loop() {
  // Leemos el valor del sensor PIR (ALTO o BAJO)
  estadoPIR = digitalRead(pinPIR);
  
  // Comprobamos si se ha detectado movimiento
  if (estadoPIR == HIGH) {
    // Si hay movimiento...
    digitalWrite(pinLED, HIGH); // Encendemos el LED
    Serial.println("¡Movimiento detectado!");
    
    // Esperamos un poco para no saturar el monitor serial
    delay(500); 
  } else {
    // Si no hay movimiento...
    digitalWrite(pinLED, LOW); // Apagamos el LED
  }
}

Explicación del Código

Variables Globales

Declaramos constantes («const int») para los pines «pinPIR» y «pinLED». Esto hace que el código sea más fácil de leer y modificar. La variable «estadoPIR» guardará el valor que leamos del sensor (0 o 1, BAJO o ALTO).

Función «setup()»

Aquí configuramos los pines. El «pinPIR» se establece como `INPUT` (entrada) porque Arduino recibe datos de él. El «pinLED» es «OUTPUT» (salida) porque Arduino le envía energía. También iniciamos la comunicación serial («Serial.begin(9600)») para poder enviar mensajes al Monitor Serie del IDE de Arduino, lo que es muy útil para depurar.

Función «loop()»

Este es el corazón del programa. «digitalRead(pinPIR)» lee el estado del pin del sensor. Si el valor es «HIGH» (alto), significa que se ha detectado movimiento. En ese caso, encendemos el LED con «digitalWrite(pinLED, HIGH)» y mostramos un mensaje en el monitor. Si el estado es «LOW» (bajo), simplemente apagamos el LED.

Cosas a Tener en Cuenta