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.
Es definitivamente conveniente comprar un kit completo, aquí está el enlace:
Nombre |
ELEMENTOS EN ESTE KIT |
ENLACE |
|---|---|---|
Raphael Kit |
337 |
También puedes comprarlos por separado en los enlaces a continuación.
INTRODUCCIÓN DEL COMPONENTE |
ENLACE DE COMPRA |
|---|---|
Diagrama esquemático
Nombre T-Board |
físico |
wiringPi |
BCM |
GPIO17 |
Pin 11 |
0 |
17 |
GPIO18 |
Pin 12 |
1 |
18 |
Procedimientos experimentales
Paso 1: Construye el circuito.
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
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
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}')
Inicializa la cámara y la pone en marcha.
# Inicializar la cámara camera = Picamera2() camera.start()
Declara
statuscomo una variable global y la inicializa aFalse.# Inicializar una variable para rastrear el estado de la cámara global status status = False
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)
Define una función
takePhotosque establece la variable globalstatusenTruecuando 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
Asigna la función
takePhotospara 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 ...
Verifica continuamente si
statusesTrue. Si es así, hace parpadear el LED cinco veces, captura una foto y restablecestatus. 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)
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