Raspberry (11): Conectar un detector de movimiento pasivo o “PIR” a la Raspberry.

Vamos a ver en este capítulo como conectar un detector de movimiento pasivo o “PIR” de forma que nuestra Raspberry detecte movimientos en el lugar que deseemos y en ese caso realizar la acción oportuna.

Contenido de los ficheros para que puedas “copiar/pegar“:

Fichero “detectaMovimiento.py”:

# import para detectar el movimiento.
import RPi.GPIO as GPIO
import time as pausa
from datetime import datetime # Para obtener la fecha/hora

# Inicializaciones del detector de movimiento:
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.IN) # PIR
GPIO.setup(12, GPIO.OUT) # Buzzer

# PAUSA antes de empezar, para retardar la alarma:
pausa.sleep(1) # Tiempo de espera para activar la alarma en segundos

ahora = datetime.now()
ano = str(ahora.year)
mes = str(ahora.month).zfill(2)
dia = str(ahora.day).zfill(2)
hora = str(ahora.hour).zfill(2)
minutos = str(ahora.minute).zfill(2)
segundos = str(ahora.second).zfill(2)
milisegundos = str(ahora.microsecond).zfill(6)
ahoraTexto = dia + "-"+ mes + "-" + ano + " " + hora + ":" + minutos + ":" + segundos + ":" + milisegundos
print('ACTIVANDO LA ALARMA PIR.... ' + ahoraTexto)

try:
pausa.sleep(2) # Para estabilizar el sensor
while True:
if GPIO.input(23): # Si se detecta MOVIMIENTO:
ahora = datetime.now() # time.strftime("%Y-%m-%d-%H-%M-%S")
ano = str(ahora.year)
mes = str(ahora.month).zfill(2)
dia = str(ahora.day).zfill(2)
hora = str(ahora.hour).zfill(2)
minutos = str(ahora.minute).zfill(2)
segundos = str(ahora.second).zfill(2)
milisegundos = str(ahora.microsecond).zfill(6)
ahoraTexto = dia + "-"+ mes + "-" + ano + " " + hora + ":" + minutos + ":" + segundos + ":" + milisegundos
print (' - Movimiento detectado: ' + ahoraTexto)
GPIO.output(12, True) # Pitido del buzzer
pausa.sleep(0.5) #Retardo para la duración del Buzzer
GPIO.output(12, False) # Termina el pitido del buzzer
pausa.sleep(0.2) # Retardo del BUCLE, debe ser MENOR que el retardo de la detección del movimiento.

except: # Para detectar cuando se pulsa “Ctrl + C”.
GPIO.cleanup()
print("Fin..")
quit()

Fichero “detectaMovimiento2.py”:

# import para detectar el movimiento.
import RPi.GPIO as GPIO
import time as pausa
from datetime import datetime # Para obtener la fecha/hora

# Inicializaciones del detector de movimiento:
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.IN) # PIR
GPIO.setup(12, GPIO.OUT) # Buzzer

# PAUSA antes de empezar, para retardar la alarma:
pausa.sleep(1) # Tiempo de espera para activar la alarma en segundos

ahora = datetime.now()
ano = str(ahora.year)
mes = str(ahora.month).zfill(2)
dia = str(ahora.day).zfill(2)
hora = str(ahora.hour).zfill(2)
minutos = str(ahora.minute).zfill(2)
segundos = str(ahora.second).zfill(2)
milisegundos = str(ahora.microsecond).zfill(6)
ahoraTexto = dia + "-"+ mes + "-" + ano + " " + hora + ":" + minutos + ":" + segundos + ":" + milisegundos
print('ACTIVANDO LA ALARMA PIR.... ' + ahoraTexto)

try:
pausa.sleep(2) # Para estabilizar el sensor
while True:
if GPIO.input(23): # Si se detecta MOVIMIENTO:
ahora = datetime.now() # time.strftime("%Y-%m-%d-%H-%M-%S")
ano = str(ahora.year)
mes = str(ahora.month).zfill(2)
dia = str(ahora.day).zfill(2)
hora = str(ahora.hour).zfill(2)
minutos = str(ahora.minute).zfill(2)
segundos = str(ahora.second).zfill(2)
milisegundos = str(ahora.microsecond).zfill(6)
ahoraTexto = dia + "-"+ mes + "-" + ano + " " + hora + ":" + minutos + ":" + segundos + ":" + milisegundos
print (' - Movimiento detectado: ' + ahoraTexto)
GPIO.output(12, True) # Pitido del buzzer
pausa.sleep(0.5) #Retardo para la duración del Buzzer
GPIO.output(12, False) # Termina el pitido del buzzer
pausa.sleep(0.2) # para evitar múltiples avisos.
while GPIO.input(23):
GPIO.output(12, True) # Pitido del buzzer
pausa.sleep(0.5) #Retardo para la duración del Buzzer
GPIO.output(12, False)
pausa.sleep(0.3) # para evitar múltiples avisos.
pausa.sleep(0.2) # Retardo del BUCLE, debe ser MENOR que el retardo de la detección del movimiento.

except: # Para detectar cuando se pulsa "Ctrl + C"
GPIO.cleanup()
print("Fin..")
quit()

Fichero “detectaMovimiento.sh”:

#!/bin/bash
#Preparamos la entrada.
echo 23 > /sys/class/gpio/export

echo "Activando el PIR . . ."
# Espero un segundo para que se inicialice el "export"
sleep 1

#Le indico que el GPIO es de salida:
echo in > /sys/class/gpio/gpio23/direction

# Capturo "Ctrl+C" para liberar el PIN.
int_handler()
{
#Eliminaremos la entrada GPIO para libera el pin
echo 23 > /sys/class/gpio/unexport
echo "Proceso finalizado."
exit 1
}

trap 'int_handler' INT

#Bucle infinito
while [ 1 ]
do
Valor=$(gpio -g read 23)
# echo $Valor
if test $Valor -eq 1 ;
then
echo "Movimiento: $(date +'%d/%m/%Y %H:%M:%S')"
# Espero un segundo para comprobar otra vez el PIR.
sleep 1
# else
# echo "NO pasa nada"
fi

done

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *