Nota

Hola, ¡bienvenido a la comunidad de entusiastas de SunFounder Raspberry Pi & Arduino & ESP32 en Facebook! Sumérgete en el mundo de Raspberry Pi, Arduino y ESP32 con otros entusiastas.

¿Por qué unirse?

  • Soporte experto: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo.

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

  • Preestrenos exclusivos: Obtén acceso anticipado a nuevos anuncios de productos y adelantos.

  • 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.1 Cámara

Introducción

Aquí haremos una cámara con un obturador, cuando presiones el botón, la cámara tomará una foto mientras el LED parpadea.

Componentes necesarios

En este proyecto, necesitamos los siguientes componentes.

../_images/4.1.1_camera_list.png

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

Nombre

ELEMENTOS EN ESTE KIT

ENLACE

Raphael Kit

337

Raphael Kit

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

INTRODUCCIÓN DEL COMPONENTE

ENLACE DE COMPRA

Placa de Extensión GPIO

COMPRAR

Protoboard

COMPRAR

Cables de Puente

COMPRAR

Resistor

COMPRAR

LED

COMPRAR

Botón

COMPRAR

Módulo de Cámara

COMPRAR

Diagrama esquemático

Nombre T-Board

físico

wiringPi

BCM

GPIO17

Pin 11

0

17

GPIO18

Pin 12

1

18

../_images/4.1.1_camera_schematic1.png

Procedimientos experimentales

Paso 1: Construye el circuito.

../_images/4.1.1_camera_circuit1.png

Paso 2: Ingresa al escritorio de Raspberry Pi. Puede que necesites una pantalla para una mejor experiencia, consulta: Connect your Raspberry Pi. O accede al escritorio de Raspberry Pi de forma remota, para un tutorial detallado consulta Escritorio Remoto.

Paso 3: Abre una Terminal y entra en la carpeta del código.

cd ~/raphael-kit/python-pi5

Paso 4: Ejecuta.

sudo python3 4.1.1_Camera_zero.py

Después de que el código se ejecute, presiona el botón, el Raspberry Pi hará parpadear el LED y tomará una foto. La foto se llamará my_photo.jpg y se guardará en el directorio ~.

Nota

También puedes abrir 4.1.1_Camera_zero.py en la ruta ~/raphael-kit/python/ con un IDE de Python, hacer clic en el botón de Ejecutar para ejecutarlo y detener el código con el botón de Detener.

Si deseas descargar la foto a tu PC, consulta Software FileZilla. .. warning:

Si recibe el mensaje de error ``RuntimeError: Cannot determine SOC peripheral base address``, consulte :ref:`faq_soc`

Código

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

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

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

# Inicializar una variable para rastrear el estado de la cámara
global status
status = False

# Configurar el LED y el botón con sus números de pin GPIO
led = LED(17)
button = Button(18)

def takePhotos(pin):
    """Function to set the camera's status to True when the button is pressed."""
    global status
    status = True

try:
    # Asignar la función a ser llamada cuando se presione el botón
    button.when_pressed = takePhotos

    # Bucle principal
    while True:
        # Verificar si el botón ha sido presionado
        if status:
            # Hacer parpadear el LED cinco veces
            for i in range(5):
                led.on()
                time.sleep(0.1)
                led.off()
                time.sleep(0.1)
            # Capturar y guardar una foto
            camera.capture_file(f'{user_home}/my_photo.jpg')
            print('Take a photo!')
            # Reset the status
            status = False
        else:
            # Apagar el LED si no se está capturando
            led.off()

        # Esperar un corto período antes de verificar el estado del botón nuevamente
        time.sleep(1)

except KeyboardInterrupt:
    # Detener la cámara y apagar el LED si ocurre una interrupción de teclado
    camera.stop_preview()
    led.off()
    pass

Explicación del Código

  1. Importa las librerías necesarias para el manejo del tiempo, control de la cámara y control de componentes GPIO.

    #!/usr/bin/env python3
    from picamera2 import Picamera2, Preview
    from gpiozero import LED, Button
    import time
    import os
    
  2. Obtiene el nombre de usuario actual y el directorio de inicio para guardar las fotos.

    # Obtener 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.

    # Inicializar la cámara
    camera = Picamera2()
    camera.start()
    
  4. Declara status como una variable global y la inicializa a False.

    # Inicializar una variable para rastrear el estado de la cámara
    global status
    status = False
    
  5. Inicializa un LED conectado al pin GPIO 17 y un botón conectado al pin GPIO 18.

    # Configurar el LED y el botón con sus números de pin GPIO
    led = LED(17)
    button = Button(18)
    
  6. Define una función takePhotos que establece la variable global status en True cuando se presiona el botón.

    def takePhotos(pin):
        """Function to set the camera's status to True when the button is pressed."""
        global status
        status = True
    
  7. Asigna la función takePhotos para ser llamada cuando se presione el botón.

    try:
        # Asignar la función a ser llamada cuando se presione el botón
        button.when_pressed = takePhotos
    
        ...
    
  8. Verifica continuamente si status es True. Si es así, hace parpadear el LED cinco veces, captura una foto y restablece status. Si no, el LED permanece apagado. Hay un retraso de 1 segundo entre cada iteración del bucle.

    try:
        ...
    
        # Bucle principal
        while True:
            # Verificar si el botón ha sido presionado
            if status:
                # Hacer parpadear el LED cinco veces
                for i in range(5):
                    led.on()
                    time.sleep(0.1)
                    led.off()
                    time.sleep(0.1)
                # Capturar y guardar una foto
                camera.capture_file(f'{user_home}/my_photo.jpg')
                print('Take a photo!')
                # Reset the status
                status = False
            else:
                # Apagar el LED si no se está capturando
                led.off()
    
            # Esperar un corto período antes de verificar el estado del botón nuevamente
            time.sleep(1)
    
  9. Captura una interrupción de teclado (como Ctrl+C) y detiene la vista previa de la cámara y apaga el LED antes de salir.

    except KeyboardInterrupt:
        # Detener la cámara y apagar el LED si ocurre una interrupción de teclado
        camera.stop_preview()
        led.off()
        pass