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
Capítulo Anterior | Capítulo Siguiente |