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).
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
Ajustes del Sensor PIR
El sensor HC-SR501 tiene dos potenciómetros (pequeñas ruedecillas naranjas) para ajustar la sensibilidad y el tiempo de retardo. Puedes girarlos con un destornillador pequeño para calibrar el sensor a tu gusto.
- Sensibilidad: Define la distancia a la que el sensor detectará movimiento.
- Tiempo de retardo: Define cuánto tiempo permanecerá la señal de salida en ALTO después de detectar movimiento.
