Nota
Hola, bienvenido a la Comunidad de Entusiastas de Raspberry Pi, Arduino y ESP32 de SunFounder en Facebook. Profundice en Raspberry Pi, Arduino y ESP32 junto a otros entusiastas.
¿Por qué unirte?
Soporte de Expertos: 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.
Vistas Previas Exclusivas: Obtén acceso anticipado a nuevos anuncios de productos y vistas previas.
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 [here] y únete hoy.
Módulo de Cámara Pan-Tilt
Nota
La serie Pironman 5 no incluye un módulo de cámara. Necesita preparar uno usted mismo o comprarlo en nuestro sitio web oficial:
En esta sección, aprenderá cómo configurar y controlar un módulo de cámara Pan-Tilt usando dos servomotores SG90 conectados directamente a los pines GPIO. Al final de esta sección, tendrá un módulo Pan-Tilt completamente instalado y funcional listo para sus proyectos.
Conexión de Hardware
Antes de comenzar, asegúrese de que su Raspberry Pi esté apagada.
Diagrama de Conexión:
Dispositivo |
Pin GPIO |
Pin Físico |
|---|---|---|
Servo Pan (Naranja) |
GPIO17 |
Pin 11 |
Servo Tilt (Naranja) |
GPIO18 |
Pin 12 |
VCC (Rojo) |
5V |
Pin 2 o 4 |
GND (Marrón) |
GND |
Pin 6, 9, 14, 20, 25, 30, 34, 39 |
Módulo de Cámara |
Interfaz CSI |
Conectar al puerto de la cámara |
Advertencia
Aunque los servos SG90 pueden obtener alimentación directamente del pin 5V de la Raspberry Pi durante las pruebas, el uso prolongado o el movimiento simultáneo de ambos servos puede causar caídas de voltaje e inestabilidad del sistema. Para proyectos a largo plazo, considere usar una fuente de alimentación externa de 5V (asegure una tierra común con la Raspberry Pi).
Conexión Paso a Paso:
Conecte los servos:
Conecte el cable de señal naranja del servo Pan a GPIO17 (pin físico 11)
Conecte el cable de señal naranja del servo Tilt a GPIO18 (pin físico 12)
Conecte los cables rojos VCC de ambos servos a un pin 5V (pin físico 2 o 4)
Conecte los cables marrones GND de ambos servos a cualquier pin GND (ej., pin físico 6)
Conecte la cámara:
Levante suavemente el clip de plástico en el conector CSI de la cámara
Inserte el cable plano de la cámara con los contactos metálicos mirando hacia afuera del puerto Ethernet
Presione el clip de plástico hacia abajo para asegurar el cable
Probar el Servo
Antes de ejecutar el ejemplo completo de Pan-Tilt, probemos cada servo individualmente para asegurarnos de que funcionan correctamente.
1. Habilitar GPIO e I2C (si es necesario):
sudo raspi-config
# Navegue a: Interface Options -> I2C -> Enable
# Reinicie después de habilitar
2. Script simple de prueba de servo:
Cree un archivo de prueba servo_test.py:
#!/usr/bin/env python3
# servo_test.py - Prueba simple de servo
from gpiozero import Servo
import time
# Probar servo Pan en GPIO17
pan = Servo(17, min_pulse_width=0.5/1000, max_pulse_width=2.5/1000)
print("Probando servo Pan (GPIO17)...")
print("Moviendo a posición 0°...")
pan.value = -1 # 0°
time.sleep(2)
print("Moviendo a posición 90°...")
pan.value = 0 # 90°
time.sleep(2)
print("Moviendo a posición 180°...")
pan.value = 1 # 180°
time.sleep(2)
pan.close()
print("Prueba del servo Pan completada")
3. Ejecute la prueba:
python3 servo_test.py
Si el servo se mueve suavemente a través de todas las posiciones, repita la prueba para el servo Tilt cambiando el número de pin a 18.
Probar la Cámara
1. Habilite la interfaz de la cámara:
sudo raspi-config
# Navegue a: Interface Options -> Camera -> Enable
# O para sistemas más nuevos: Interface Options -> Legacy Camera -> Enable
sudo reboot
2. Pruebe la captura de la cámara:
Para Raspberry Pi OS Bullseye y más recientes (usando libcamera):
# Tomar una foto de prueba
libcamera-jpeg -o test.jpg -t 2000 --width 640 --height 480
# Vista previa del feed de la cámara
libcamera-hello -t 0
Para sistemas más antiguos (usando raspistill):
# Tomar una foto de prueba
raspistill -o test.jpg -t 2000 -w 640 -h 480
# Vista previa del feed de la cámara
raspivid -t 0
3. Verifique la foto:
ls -l test.jpg
# Abrir la imagen (si tiene interfaz gráfica)
xdg-open test.jpg
Ejemplo de Pan-Tilt
Ahora combinemos el control de los servos y la funcionalidad de la cámara en un programa completo de control Pan-Tilt. Este ejemplo le permite controlar la dirección de la cámara usando las teclas WSAD y tomar fotos con la tecla T.
1. Cree el script de control Pan-Tilt:
nano ptz_wsad_simple.py
Copie el siguiente código:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# ptz_wsad_simple.py - Control PTZ con teclas WSAD, versión ultra simple
from gpiozero import Servo
import os
from datetime import datetime
# Inicializar servos
# Parámetros SG90: ancho de pulso mínimo 0.5ms (0°), ancho de pulso máximo 2.5ms (180°)
pan = Servo(17, min_pulse_width=0.5/1000, max_pulse_width=2.5/1000)
tilt = Servo(18, min_pulse_width=0.5/1000, max_pulse_width=2.5/1000)
# Posición inicial (centro)
pan.value = 0
tilt.value = 0
print("\n=== Control PTZ SG90 ===")
print("W: Arriba")
print("S: Abajo")
print("A: Izquierda")
print("D: Derecha")
print("T: Tomar foto")
print("C: Centrar")
print("Q: Salir")
print("-" * 30)
def take_photo():
"""Función para tomar foto"""
# Crear directorio de fotos si no existe
photo_dir = "/home/pi/Pictures/ptz"
os.makedirs(photo_dir, exist_ok=True)
# Generar nombre de archivo con marca de tiempo
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"{photo_dir}/ptz_{timestamp}.jpg"
# Tomar foto usando libcamera (para Raspberry Pi Bullseye y superior)
# Alternativa para sistemas más antiguos: usar raspistill
os.system(f"libcamera-jpeg -o {filename} -t 1 --width 640 --height 480")
# Comando alternativo para sistemas más antiguos:
# os.system(f"raspistill -o {filename} -t 1 -w 640 -h 480")
print(f"Foto guardada: {filename}")
try:
while True:
# Obtener entrada del usuario
cmd = input("Ingrese comando: ").lower().strip()
if cmd == 'w':
# Mover arriba (aumentar ángulo de inclinación)
tilt.value = min(1.0, tilt.value + 0.2)
print(f"↑ Arriba ({tilt.value:.1f})")
elif cmd == 's':
# Mover abajo (disminuir ángulo de inclinación)
tilt.value = max(-1.0, tilt.value - 0.2)
print(f"↓ Abajo ({tilt.value:.1f})")
elif cmd == 'a':
# Mover izquierda (disminuir ángulo de pan)
pan.value = max(-1.0, pan.value - 0.2)
print(f"← Izquierda ({pan.value:.1f})")
elif cmd == 'd':
# Mover derecha (aumentar ángulo de pan)
pan.value = min(1.0, pan.value + 0.2)
print(f"→ Derecha ({pan.value:.1f})")
elif cmd == 't':
# Tomar foto
take_photo()
elif cmd == 'c':
# Centrar el PTZ
pan.value = 0
tilt.value = 0
print("PTZ centrado")
elif cmd == 'q':
# Salir del programa
print("Saliendo del programa")
break
else:
print("Comando inválido, use W/S/A/D/T/C/Q")
except KeyboardInterrupt:
print("\nPrograma interrumpido por el usuario")
finally:
# Limpiar recursos GPIO
pan.close()
tilt.close()
print("GPIO limpiado")
2. Haga el script ejecutable:
chmod +x ptz_wsad_simple.py
3. Ejecute el controlador Pan-Tilt:
python3 ptz_wsad_simple.py
4. Controle la cámara:
Presione W/S para inclinar arriba/abajo
Presione A/D para girar izquierda/derecha
Presione T para tomar una foto (guardada en /home/pi/Pictures/ptz/)
Presione C para centrar la cámara
Presione Q para salir
Captura de Cámara:
El script usa libcamera-jpeg (para versiones más recientes de Raspberry Pi OS) para capturar fotos. Las fotos se guardan automáticamente con marcas de tiempo para evitar sobrescrituras.