Proyecto 37 – Módulo PIR HC-SR501

En este proyecto utilizaremos un módulo PIR HC-SR501 con nuestro Arduino para detectar movimiento. Este tipo de sensores e muy útil para detectar movilizaremos principalmente en la construcción de robots seguidores de línea o robots autónomos que no se estrellan contra objetos en su camino.

Sensor PIR HC-SR501
Sensor PIR HC-SR501

¿Qué es un sensor PIR?

Un sensor PIR o sensor infrarrojo pasivo (Passive InfraRed) son dispositivos que sirven para detectar el movimiento utilizando una lente Fresnel.

El módulo PIR esta constituido por un LED de luz infrarroja que emite la señal y un fotodiodo que recibe la luz que refleja del LED IR cuando hay un objeto en frente, también contamos con un módulo de medición estándar con un comparador LM393, que nos permite obtener una lectura digital y se puede regular la sensibilidad del umbral con el potenciómetro en el circuito.

Son económicos, de fácil uso e implementación, muy útiles en proyectos de alarmas, para iluminación, como encendido automático de luces, etc.

Componentes

  • Arduino UNO o placa compatible
  • Módulo PIR HC-SR501
  • Cables o Jumpers
Diagrama conexiones
Diagrama de conexiones del sensor PIR HC-SR501

En este proyecto las conexiones son bastante simples, lo primero que debemos hacer es identificar los tres pines que posee el sensor GND, OUT y VCC, de los cuales la alimentación del módulo son (VCC, GND), un pin de salida digital (OUT).

Una vez identificados los pines del módulo conectamos el pin OUT al pin 2 del Arduino, luego conectamos el GND al GND del Arduino y por último el pin VCC a los 5V del Arduino.

Código

#define led 13
#define pinSensor 2

void setup() 
{
  pinMode(pinSensor, INPUT);
  pinMode(led, OUTPUT);
  Serial.begin(9600);
}

void loop() 
{
  byte estado = digitalRead(pinSensor);
  digitalWrite(led,estado);
  if (estado==HIGH)
    Serial.println("Hay un merodeador");
  else if(estado==LOW)
    Serial.println("No hay moros en la costa");
  delay(500);
}

Explicación del código

Comenzaremos a revisar el código, primero vamos hacer la declaración de las variables.

#define LED 13
#define pinSensor 2

Lo primero que vamos a hacer es definir una constante led a la que le asignaremos el valor 13, el cual es el pin del led integrado en el Arduino, de igual forma definimos otra constante pinSensor a la que le asignamos el valor de 2, que sería el pin del Arduino por el que vamos a leer el sensor.

Función setup()

pinMode(pinSensor, INPUT);
pinMode(led, OUTPUT);
Serial.begin(9600); 

Como hemos visto anteriormente en otros proyectos en el setup ponemos todo lo que debe ser inicializado o ejecutado una sola vez, en nuestro caso encontramos 3 líneas no mas. La primera línea que vemos que establecemos el pin del LED como pin de salida, de igual forma en la siguiente línea establecemos el pinSensor como pin de entrada y para finalizar que vemos en la tercera línea la inicialización de la comunicación serial a una velocidad el 9600 baudios, por medio de la cual veremos los resultados del sensor a través del monitor serial.

Función loop()

byte estado = digitalRead(pinSensor);
digitalWrite(led,estado);
if (estado==HIGH)
  Serial.println("Hay un merodeador");
else if(estado==LOW)
  Serial.println("No hay moros en la costa");
delay(500);

Comenzaremos revisando el contenido de nuestra función loop, para esto vamos a irlo desglosando un poco, para que sea mas fácil de entender.

obstaculo = digitalRead(pinSensor);

Aquí podemos ver que le asignamos a la variable obstaculo el valor que leemos del sensor.

if (obstacle == LOW)
{
  Serial.println("OBSTACULO!!, OBSTACULO!!");
  digitalWrite(LED, HIGH);
}

Luego encontramos una condicional if, que pregunta si el valor que nos devuelve el sensor es un LOW o 0, entonces me imprima o muestre en el monitor serial el texto «OBSTACULO!!, OBSTACULO!!» y a su vez que encienda el LED, el cual es el led integrado al Arduino o alguno que hayan conectado al pin 13

else
{
  Serial.println("Libre");
  digitalWrite(LED, LOW);
}

Anteriormente vimos que había una condicional if, ahora vemos un else, donde sino se cumple la condición del if anterior entonces nos mostrará en monitor serial el texto «Libre» y mantendrá nuestro led apagado.

delay(500);

Finalmente encontramos una delay que hace una pausa de 500 milisegundos antes de volver comenzar de nuevo con el loop.

Salida monitor serial
NOTA:  Se podría conectar al pin 13 del Arduino un LED con su resistencia o un zumbador activo para que tengamos una señal cuando el módulo PIR haya detectado un obstáculo.

Resumen

En resumen al conectar nuestro Arduino a la computadora e iniciamos el monitor serial, vamos a ver en el monitor serial si hay algo obstaculizando el sensor o si esta libre de obstáculos, de igual forma cuando hay obstáculos se encenderá el LED integrado en el Arduino, de lo contrario se apagará.


Deja un comentario

Este sitio está protegido por reCAPTCHA y se aplican la política de privacidad y los términos de servicio de Google.