Note
Bienvenue sur la communauté Facebook SunFounder Raspberry Pi, Arduino & ESP32 !
Obtenez du support technique et de l’aide au dépannage.
Apprenez et partagez des projets, des astuces et des tutoriels.
Accédez en avant-première aux aperçus et mises à jour des produits.
Profitez de réductions exclusives et de cadeaux.
👉 Rejoignez-nous ici : [here]
Module Caméra Panoramique et d’Inclinaison
Note
La série Pironman 5 n’inclut pas de module caméra. Vous devez en préparer un vous-même ou l’acheter sur notre site officiel :
Dans cette section, vous apprendrez comment configurer et contrôler un module caméra panoramique et d’inclinaison en utilisant deux servomoteurs SG90 connectés directement aux broches GPIO. À la fin de cette section, vous aurez un module entièrement installé et fonctionnel prêt pour vos projets.
Connexion matérielle
Avant de commencer, assurez-vous que votre Raspberry Pi est éteint.
Schéma de connexion :
Périphérique |
Broche GPIO |
Broche physique |
|---|---|---|
Servo Pan (Orange) |
GPIO17 |
Broche 11 |
Servo Tilt (Orange) |
GPIO18 |
Broche 12 |
VCC (Rouge) |
5V |
Broche 2 ou 4 |
GND (Marron) |
GND |
Broche 6, 9, 14, 20, 25, 30, 34, 39 |
Module Caméra |
Interface CSI |
Connectez-vous au port caméra |
Attention
Bien que les servomoteurs SG90 puissent être alimentés directement par la broche 5V du Raspberry Pi pendant les tests, une utilisation prolongée ou le mouvement simultané des deux servomoteurs peut provoquer des chutes de tension et une instabilité du système. Pour les projets à long terme, envisagez d’utiliser une alimentation externe 5V (assurez une masse commune avec le Raspberry Pi).
Connexion étape par étape :
Connectez les servomoteurs :
Connectez le fil orange de signal du servo Pan à GPIO17 (broche physique 11)
Connectez le fil orange de signal du servo Tilt à GPIO18 (broche physique 12)
Connectez les fils rouges VCC des deux servomoteurs à une broche 5V (broche physique 2 ou 4)
Connectez les fils marrons GND des deux servomoteurs à n’importe quelle broche GND (par exemple, broche physique 6)
Connectez la caméra :
Soulevez doucement la pince en plastique sur le connecteur caméra CSI
Insérez le câble nappe de la caméra avec les contacts métalliques orientés vers l’opposé du port Ethernet
Appuyez sur la pince en plastique pour sécuriser le câble
Tester le servomoteur
Avant d’exécuter l’exemple complet de Pan-Tilt, testons chaque servomoteur individuellement pour nous assurer qu’ils fonctionnent correctement.
1. Activer GPIO et I2C (si nécessaire) :
sudo raspi-config
# Naviguez vers : Interface Options -> I2C -> Enable
# Redémarrez après l'activation
2. Script simple de test du servomoteur :
Créez un fichier de test servo_test.py :
#!/usr/bin/env python3
# servo_test.py - Test simple de servomoteur
from gpiozero import Servo
import time
# Test du servo Pan sur GPIO17
pan = Servo(17, min_pulse_width=0.5/1000, max_pulse_width=2.5/1000)
print("Test du servo Pan (GPIO17)...")
print("Déplacement vers la position 0°...")
pan.value = -1 # 0°
time.sleep(2)
print("Déplacement vers la position 90°...")
pan.value = 0 # 90°
time.sleep(2)
print("Déplacement vers la position 180°...")
pan.value = 1 # 180°
time.sleep(2)
pan.close()
print("Test du servo Pan terminé")
3. Exécutez le test :
python3 servo_test.py
Si le servomoteur se déplace correctement à travers toutes les positions, répétez le test pour le servo Tilt en changeant le numéro de broche pour 18.
Tester la caméra
1. Activez l’interface caméra :
sudo raspi-config
# Naviguez vers : Interface Options -> Camera -> Enable
# Ou pour les systèmes plus récents : Interface Options -> Legacy Camera -> Enable
sudo reboot
2. Testez la capture de la caméra :
Pour Raspberry Pi OS Bullseye et plus récent (utilisant libcamera) :
# Prendre une photo de test
libcamera-jpeg -o test.jpg -t 2000 --width 640 --height 480
# Aperçu du flux caméra
libcamera-hello -t 0
Pour les systèmes plus anciens (utilisant raspistill) :
# Prendre une photo de test
raspistill -o test.jpg -t 2000 -w 640 -h 480
# Aperçu du flux vidéo
raspivid -t 0
3. Vérifiez la photo :
ls -l test.jpg
# Ouvrir l'image (si vous avez une interface graphique)
xdg-open test.jpg
Exemple de Pan-Tilt
Maintenant, combinons le contrôle des servomoteurs et la fonctionnalité de la caméra dans un programme complet de contrôle Pan-Tilt. Cet exemple vous permet de contrôler la direction de la caméra à l’aide des touches WSAD et de prendre des photos avec la touche T.
1. Créez le script de contrôle Pan-Tilt :
nano ptz_wsad_simple.py
Copiez le code suivant :
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# ptz_wsad_simple.py - Contrôle PTZ avec touches WSAD, version ultra simple
from gpiozero import Servo
import os
from datetime import datetime
# Initialiser les servomoteurs
# Paramètres SG90 : largeur d'impulsion min 0,5ms (0°), largeur d'impulsion max 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)
# Position initiale (centre)
pan.value = 0
tilt.value = 0
print("\n=== Contrôle PTZ SG90 ===")
print("W : Haut")
print("S : Bas")
print("A : Gauche")
print("D : Droite")
print("T : Prendre une photo")
print("C : Centrer")
print("Q : Quitter")
print("-" * 30)
def take_photo():
"""Fonction pour prendre une photo"""
# Créer le répertoire de photos s'il n'existe pas
photo_dir = "/home/pi/Pictures/ptz"
os.makedirs(photo_dir, exist_ok=True)
# Générer un nom de fichier avec horodatage
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"{photo_dir}/ptz_{timestamp}.jpg"
# Prendre une photo avec libcamera (pour Raspberry Pi Bullseye et supérieur)
# Alternative pour les systèmes plus anciens : utiliser raspistill
os.system(f"libcamera-jpeg -o {filename} -t 1 --width 640 --height 480")
# Commande alternative pour les systèmes plus anciens :
# os.system(f"raspistill -o {filename} -t 1 -w 640 -h 480")
print(f"Photo enregistrée : {filename}")
try:
while True:
# Obtenir l'entrée utilisateur
cmd = input("Entrez la commande : ").lower().strip()
if cmd == 'w':
# Monter (augmenter l'angle d'inclinaison)
tilt.value = min(1.0, tilt.value + 0.2)
print(f"↑ Haut ({tilt.value:.1f})")
elif cmd == 's':
# Descendre (diminuer l'angle d'inclinaison)
tilt.value = max(-1.0, tilt.value - 0.2)
print(f"↓ Bas ({tilt.value:.1f})")
elif cmd == 'a':
# Aller à gauche (diminuer l'angle panoramique)
pan.value = max(-1.0, pan.value - 0.2)
print(f"← Gauche ({pan.value:.1f})")
elif cmd == 'd':
# Aller à droite (augmenter l'angle panoramique)
pan.value = min(1.0, pan.value + 0.2)
print(f"→ Droite ({pan.value:.1f})")
elif cmd == 't':
# Prendre une photo
take_photo()
elif cmd == 'c':
# Centrer le PTZ
pan.value = 0
tilt.value = 0
print("PTZ centré")
elif cmd == 'q':
# Quitter le programme
print("Fermeture du programme")
break
else:
print("Commande invalide, veuillez utiliser W/S/A/D/T/C/Q")
except KeyboardInterrupt:
print("\nProgramme interrompu par l'utilisateur")
finally:
# Nettoyer les ressources GPIO
pan.close()
tilt.close()
print("GPIO nettoyé")
2. Rendez le script exécutable :
chmod +x ptz_wsad_simple.py
3. Exécutez le contrôleur Pan-Tilt :
python3 ptz_wsad_simple.py
4. Contrôlez la caméra :
Appuyez sur W/S pour incliner haut/bas
Appuyez sur A/D pour panoramique gauche/droite
Appuyez sur T pour prendre une photo (enregistrée dans /home/pi/Pictures/ptz/)
Appuyez sur C pour centrer la caméra
Appuyez sur Q pour quitter
Capture de la caméra :
Le script utilise libcamera-jpeg (pour les versions plus récentes de Raspberry Pi OS) pour capturer des photos. Les photos sont automatiquement enregistrées avec des horodatages pour éviter les écrasements.