Sensor HC-SR501 con Arduino

Sensor de Movimiento PIR HC-SR501.

El PIR HC-SR501 es un sensor de bajo costo muy popular que detecta movimiento mediante la medición de la radiación infrarroja emitida por los objetos en su campo de visión. Este sensor puede ser utilizado en proyectos de seguridad y automatización. En este artículo se explica cómo utilizar este sensor con Arduino.

¿Qué es un Sensor PIR?

Un sensor PIR (Passive Infrared Sensor) es un dispositivo electrónico que mide la luz infrarroja (IR) emitida por los objetos en su campo de visión. Los sensores PIR son ampliamente utilizados en sistemas de seguridad y automatización del hogar debido a su capacidad para detectar movimiento. Funcionan detectando cambios en los niveles de radiación infrarroja causados por el movimiento de personas, animales u objetos. Están conformados por dos partes fundamentales:

  • Lente Fresnel: Amplifica la radiación infrarroja y la enfoca en el sensor.
Lente de Fresnel de sensor de movimiento pir HC-SR501.
  • Sensor piroeléctrico: Detecta la radiación infrarroja.
Sensor de Movimiento PIR.

Sensor de movimiento PIR HC-SR501

En los sensores de movimiento, el sensor PIR consta en realidad de 2 elementos detectores separados, siendo la señal diferencial entre ambos la que permite activar la alarma de movimiento. De esta forma, cuando hay movimiento, el objeto que pasa frente a la lente, provoca un cambio en la cantidad de radiación IR que incide en cada elemento, generando una diferencia de potencial que se traduce en una señal eléctrica. En el caso del HC-SR501, la señal generada por el sensor ingresa al circuito integrado BISS0001, que contiene amplificadores operacionales e interfaces electrónicas adicionales. Este circuito de procesamiento interpreta esta señal y activa la salida digital.

Integrado de control BISS0001 para detector de movimiento PIR.

Este sensor permite, además, ajustar la sensibilidad y la distancia de detección utilizando dos potenciómetros que se encuentran en el circuito.

Para configurar el disparo tiene un jumper que permite que este sea un disparo o disparos repetitivos.

Interfaces de ajuste del sensor de movimiento PIR HC-SR501.

Por último, permite la detección automática de la luz si se le incluye una fotorresistencia.

Ajuste de Sensibilidad (Rango)

El HC-SR501 tiene una distancia máxima de detección de 7 metros. Como se comentó antes, puedes ajustar la distancia de detección girando el potenciómetro de sensibilidad en sentido horario o en sentido antihorario. Al girar el potenciómetro en sentido horario, la distancia de detección aumenta hasta un máximo de 7 metros. Si lo giras en sentido antihorario, la distancia de detección disminuye hasta un mínimo de 3 metros.

Ajuste de Tiempo de Retardo

Con este potenciómetro, puedes ajustar el tiempo que la salida permanece en ALTO después de la detección de movimiento. El retardo mínimo es de 3 segundos y el máximo es de 300 segundos o 5 minutos. Gira el potenciómetro en sentido horario para aumentar el retardo y en sentido antihorario para disminuirlo.

Puente de Selección de Disparo

El jumper de selección de disparo permite seleccionar uno de los dos modos de disparo. Puedes ajustarlo a L (disparo simple) o H (disparo repetido):

  • Disparo Simple: La salida se pone en ALTO en cuanto se detecta movimiento y permanece así durante el tiempo establecido por el potenciómetro. Cualquier movimiento durante este periodo no se procesa y no reinicia el temporizador.
  • Disparo Repetido: Cada vez que se detecta movimiento, se reinicia el temporizador de retardo.

Detección automática de luz

Esta función no está disponible al adquirir el sensor de fábrica. Para activarla se debe agregar una fotorresistencia CdS (Sulfuro de Cadmio) que deshabilita la operación del sensor en caso de que exista suficiente luz visible en el área. Esta función se utiliza cuando se requiere que el sensor se active solo cuando hay poca iluminación.

Especificaciones del HC-SR501

Según el datasheet este es el resumen de las especificaciones técnicas de este sensor:

Características Valores
Voltaje de alimentación 5 a 20 V
Rango de distancia 3 a 7 m ajustable
Angulo de detección cono de 110°
Dimensiones de la placa 32,5 x 24 mm
Orificios de montaje 2 mm
Dimensiones de la lente de Fresnel 15 mm x 23 mm de diámetro
Nivel de voltaje de salida Alto 3,3 V / Bajo 0 V
Tiempo de retardo 2,5 a 300 s
Tiempo de bloqueo 2,5 s (por defecto)
Temperatura de trabajo -15 a +70° C

Conexión del HC-SR501 con Arduino

Para conectar un sensor PIR HC-SR501 a una placa Arduino no se necesita ningún otro componente. Sólo se debe conectar el pin GND a GND de Arduino, VCC a 5 V de Arduino y OUT a un pin digital. En una gran cantidad de ejemplos se usa el pin 2. Si tienes dudas de cuáles son los pines en el sensor puedes quitar temporalmente la lente de Fresnel y quedará al descubierto los nombres de los pines escritos en la placa como se muestra en la siguiente imagen.

Sensor de movimiento PIR HC-SR501 sin lente de Fresnel.

Finalmente, la conexión queda como se muestra a continuación.

Conexión del sensor de movimiento PIR HC-SR501 con Arduino.

Código para usar el HC-SR501 con Arduino

El código necesario para realizar la lectura es simple. El siguiente es un ejemplo típico de como hacerlo.

 1// Ejemplo de Arduino para utilizar el sensor PIR HC-SR501.
 2// Más información: https://www.3dpellet.com
 3
 4// Definimos el pin 2 como entrada del PIR HC-SR501
 5#define pirPin 2
 6// Definimos el pin 13 como salida para encender el led de la placa
 7#define ledPin 13
 8
 9int val = 0; // Variable para almacenar la lectura del PIR
10bool motionState = false; // Variable de estado del PIR
11
12void setup() {
13  // Los pines se configuran como entrada o salida.
14  pinMode(ledPin, OUTPUT);
15  pinMode(pirPin, INPUT);
16
17  // Se configura la comunicación serie a una velocidad de 9600 baudios
18  Serial.begin(9600);
19}
20
21void loop() {
22  // Se lee el pin de salida del PIR
23  val = digitalRead(pirPin);
24
25  if (val == HIGH) {
26    // Si se detecta movimiento enciende el LED
27    digitalWrite(ledPin, HIGH);
28
29    // Cambiamos el estado y mandamos el mensaje
30    if (!motionState) {
31      Serial.println("¡Movimiento detectado!");
32      motionState = true;
33    }
34  }
35  // If no motion is detected (pirPin = LOW), do the following:
36  else {
37    // Si No se detecta movimiento apaga el LED
38    digitalWrite(ledPin, LOW);
39
40    // Cambiamos el estado y mandamos el mensaje
41    if (motionState) {
42      Serial.println("¡Movimiento finalizado!");
43      motionState = false;
44    }
45  }
46}

Ajustes y Consideraciones

Sensibilidad y Tiempo de Retardo: Como se comentó anteriormente, los potenciómetros en el sensor PIR permiten ajustar la sensibilidad y el tiempo de retardo. Ajusta estos controles según tus necesidades específicas.

Ambiente de Operación: Los sensores PIR pueden verse afectados por cambios bruscos de temperatura y movimientos de objetos no deseados. Ubica el sensor en un lugar adecuado para minimizar falsas alarmas.

Uso de Carcasas: Colocar el sensor en una carcasa puede ayudar a protegerlo de factores ambientales y mejorar su rendimiento.

Conclusión

Los sensores PIR son herramientas versátiles y efectivas para detectar movimiento en diversas aplicaciones. Conectar y programar un sensor PIR con Arduino es una tarea relativamente sencilla que puede ser realizada por aficionados y profesionales. Con un poco de ajuste y calibración, estos sensores pueden integrarse en sistemas de seguridad, iluminación automática y muchas otras aplicaciones innovadoras.