Nota

¡Hola! Bienvenido a la Comunidad de Entusiastas de SunFounder Raspberry Pi & Arduino & ESP32 en Facebook. Sumérgete más en Raspberry Pi, Arduino y ESP32 con otros entusiastas.

¿Por qué unirse?

  • Soporte Experto: Resuelve problemas post-venta y desafíos técnicos con la ayuda de nuestra comunidad y equipo.

  • Aprende y Comparte: Intercambia consejos y tutoriales para mejorar tus habilidades.

  • Avances Exclusivos: Accede anticipadamente a nuevos anuncios de productos y adelantos exclusivos.

  • Descuentos Especiales: Disfruta de descuentos exclusivos en nuestros productos más nuevos.

  • Promociones y Sorteos Festivos: Participa en sorteos y promociones de temporada.

👉 ¿Listo para explorar y crear con nosotros? Haz clic en [Aquí] y únete hoy mismo.

4.1.2 Cámara de Captura Automática

Introducción

Cuando estés fuera, las pequeñas ardillas en el bosque podrían visitar tu alféizar. ¡Hagamos una cámara de captura automática para dejar fotos de estas adorables criaturas!

Componentes Necesarios

En este proyecto, necesitamos los siguientes componentes.

../_images/4.1.4_automatic_capture_list.png

Es definitivamente conveniente comprar un kit completo, aquí está el enlace:

Nombre

COMPONENTES EN ESTE KIT

ENLACE

Kit Raphael

337

Raphael Kit

También puedes comprarlos por separado en los enlaces a continuación.

INTRODUCCIÓN DE COMPONENTES

ENLACE DE COMPRA

Placa de Extensión GPIO

COMPRAR

Protoboard

COMPRAR

Cables de Puente

COMPRAR

Resistor

COMPRAR

Módulo de Cámara

COMPRAR

Módulo Sensor de Movimiento PIR

-

Diagrama Esquemático

Nombre T-Board

físico

wiringPi

BCM

GPIO17

Pin 11

0

17

../_images/4.1.4_automatic_capture_schematic.png

Procedimientos Experimentales

Antes de este proyecto, necesitas asegurarte de completar 3.1.1 Módulo Fotográfico .

Paso 1: Construye el circuito.

../_images/4.1.4_automatic_capture_circuit.png

Paso 2: Entra en el Escritorio de Raspberry Pi. Es posible que necesites una pantalla para una mejor experiencia, consulta: Conecta tu Raspberry Pi. O accede al escritorio de Raspberry Pi de forma remota, para un tutorial detallado consulta Escritorio Remoto.

Paso 3: Abre un Terminal y accede a la carpeta del código.

cd ~/raphael-kit/python-pi5

Paso 4: Ejecuta.

sudo python3 4.1.4_AutomaticCaptureCamera_zero.py

Después de ejecutar el código, el PIR detectará el entorno circundante y si detecta que la pequeña ardilla pasa cerca, la cámara tomará una foto. El intervalo entre fotos es de 3 segundos, y el número total de fotos tomadas se mostrará en la ventana de impresión.

Hay dos potenciómetros en el módulo PIR: uno es para ajustar la sensibilidad y el otro para ajustar la distancia de detección. Para que el módulo PIR funcione mejor, necesitas girar ambos en sentido contrario a las agujas del reloj hasta el final.

../_images/4.1.4_PIR_TTE.png

Nota

También puedes abrir 4.1.4_AutomaticCaptureCamera_zero.py en la ruta ~/raphael-kit/python-pi5/ con un IDE de Python, haz clic en el botón Run para ejecutar y detén el código con el botón Stop.

Advertencia

Si recibe el mensaje de error RuntimeError: Cannot determine SOC peripheral base address, consulte Si «gpiozero» no funciona.

Código

Nota

Puedes Modificar/Restablecer/Copiar/Ejecutar/Detener el código a continuación. Pero antes de eso, necesitas ir a la ruta del código fuente como raphael-kit/python-pi5. Después de modificar el código, puedes ejecutarlo directamente para ver el efecto.

#!/usr/bin/env python3
from picamera2 import Picamera2, Preview
from gpiozero import MotionSensor
import time
import os

# Recupera el nombre de usuario actual y su directorio de inicio
user = os.getlogin()
user_home = os.path.expanduser(f'~{user}')

# Inicializa la cámara
camera = Picamera2()
camera.start()

# Inicializa el sensor de movimiento en el pin GPIO 17
pir = MotionSensor(17)

try:
    i = 1  # Inicializa el contador de imágenes
    while True:
        if pir.motion_detected:
            # Captura una imagen cuando se detecta movimiento y la guarda con un número único
            camera.capture_file(f'{user_home}/capture%s.jpg' % i)
            print('The number is %s' % i)  # Print the image count
            time.sleep(3)  # Wait for 3 seconds before next detection
            i += 1  # Increment the image count
        else:
            print('waiting')  # Print 'waiting' when no motion is detected
            time.sleep(0.5)  # Check for motion every 0.5 seconds

except KeyboardInterrupt:
    # Detiene la cámara si ocurre un KeyboardInterrupt
    camera.stop_preview()
    pass

Explicación del Código

  1. Importa las clases Picamera2 y Preview para el control de la cámara, la clase MotionSensor para la detección de movimiento, y las bibliotecas estándar time y os para el manejo del tiempo y las interacciones del sistema operativo.

    #!/usr/bin/env python3
    from picamera2 import Picamera2, Preview
    from gpiozero import MotionSensor
    import time
    import os
    
  2. Recupera el nombre de usuario actual y el directorio de inicio para guardar las imágenes capturadas.

    # Recupera el nombre de usuario actual y el directorio de inicio
    user = os.getlogin()
    user_home = os.path.expanduser(f'~{user}')
    
  3. Inicializa la cámara y la pone en marcha.

    # Inicializa la cámara
    camera = Picamera2()
    camera.start()
    
  4. Inicializa un sensor de movimiento PIR conectado al pin GPIO 17.

    # Inicializa el sensor de movimiento en el pin GPIO 17
    pir = MotionSensor(17)
    
  5. Inicializa un contador i para rastrear el número de imágenes capturadas. En un bucle infinito, verifica si se detecta movimiento. Si se detecta movimiento, captura una imagen, la guarda con un nombre único basado en el contador i, imprime el número de la imagen y espera 3 segundos antes de volver a verificar el movimiento. El contador i se incrementa después de cada captura.

    try:
        i = 1  # Inicializa el contador de imágenes
        while True:
            if pir.motion_detected:
                # Captura una imagen cuando se detecta movimiento y la guarda con un número único
                camera.capture_file(f'{user_home}/capture%s.jpg' % i)
                print('The number is %s' % i)  # Print the image count
                time.sleep(3)  # Wait for 3 seconds before next detection
                i += 1  # Increment the image count
    
  6. Si no se detecta movimiento, imprime esperando y verifica el movimiento cada 0.5 segundos.

    try:
        ...
    
        while True:
            ...
    
            else:
                print('waiting')  # Print 'waiting' when no motion is detected
                time.sleep(0.5)  # Check for motion every 0.5 seconds
    
  7. Captura un KeyboardInterrupt (como Ctrl+C) para detener la vista previa de la cámara y salir del script de manera segura.

    except KeyboardInterrupt:
        # Detiene la cámara si ocurre un KeyboardInterrupt
        camera.stop_preview()
        pass