.. note:: Bonjour et bienvenue dans la Communauté Facebook des passionnés de Raspberry Pi, Arduino et ESP32 de SunFounder ! Plongez plus profondément dans l'univers des Raspberry Pi, Arduino et ESP32 avec d'autres passionnés. **Pourquoi rejoindre ?** - **Support d'experts** : Résolvez les problèmes après-vente et les défis techniques avec l'aide de notre communauté et de notre équipe. - **Apprendre et partager** : Échangez des astuces et des tutoriels pour améliorer vos compétences. - **Aperçus exclusifs** : Accédez en avant-première aux annonces de nouveaux produits et aux aperçus. - **Réductions spéciales** : Profitez de réductions exclusives sur nos produits les plus récents. - **Promotions festives et cadeaux** : Participez à des cadeaux et des promotions de vacances. 👉 Prêt à explorer et à créer avec nous ? Cliquez [|link_sf_facebook|] et rejoignez-nous aujourd'hui ! .. _4.1.4_py: 4.1.4 Caméra de Capture Automatique ======================================= Introduction ----------------- Lorsque vous êtes absent, les petits écureuils dans les bois pourraient visiter votre appui de fenêtre. Faisons une caméra de capture automatique pour laisser des photos de ces petites mignonnes créatures ! Composants Requis ------------------------------ Dans ce projet, nous avons besoin des composants suivants. .. image:: ../img/3.1.18components.png :width: 800 :align: center Il est certainement pratique d'acheter un kit complet, voici le lien : .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nom - ARTICLES DANS CE KIT - LIEN * - Kit Raphael - 337 - |link_Raphael_kit| Vous pouvez également les acheter séparément via les liens ci-dessous. .. list-table:: :widths: 30 20 :header-rows: 1 * - INTRODUCTION DES COMPOSANTS - LIEN D'ACHAT * - :ref:`cpn_gpio_extension_board` - |link_gpio_board_buy| * - :ref:`cpn_breadboard` - |link_breadboard_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_resistor` - |link_resistor_buy| * - :ref:`cpn_camera_module` - |link_camera_buy| * - :ref:`cpn_pir` - \- Schéma de Câblage ----------------------- ============== ========= ========== === Nom du T-Board Brochage wiringPi BCM GPIO17 Pin 11 0 17 ============== ========= ========== === .. image:: ../img/1.1.18_schematic.png :width: 400 :align: center Procédures Expérimentales ------------------------------ Avant de commencer ce projet, assurez-vous d'avoir complété :ref:`3.1.1_py`. **Étape 1 :** Construisez le circuit. .. image:: ../img/3.1.18fritzing.png :width: 800 :align: center **Étape 2 :** Pour connecter le module caméra et compléter la configuration, veuillez vous référer à :ref:`cpn_camera_module`. **Étape 3 :** Accédez au bureau de Raspberry Pi. Pour une meilleure expérience, vous pouvez avoir besoin d'un écran. Référez-vous à : `Connect your Raspberry Pi `_. Ou accédez à distance au bureau de Raspberry Pi en suivant le tutoriel détaillé :ref:`remote_desktop`. **Étape 4 :** Ouvrez un Terminal et accédez au dossier du code. .. raw:: html .. code-block:: cd ~/raphael-kit/python/ **Étape 5 :** Exécutez. .. raw:: html .. code-block:: sudo python3 4.1.4_AutomaticCaptureCamera.py Une fois le code exécuté, le PIR détectera l'environnement environnant et, s'il détecte un petit écureuil passant, la caméra prendra une photo. L'intervalle entre les photos est de 3 secondes, et le nombre total de photos prises sera affiché dans la fenêtre de commande. Il y a deux potentiomètres sur le module PIR : l'un pour ajuster la sensibilité et l'autre pour ajuster la distance de détection. Pour optimiser le fonctionnement du module PIR, vous devez les tourner complètement dans le sens antihoraire. .. image:: ../img/PIR_TTE.png :width: 400 :align: center .. note:: Vous pouvez également ouvrir ``4.1.4_AutomaticCaptureCamera.py`` dans le chemin ``~/raphael-kit/python/`` avec un IDE Python, cliquer sur le bouton Exécuter pour lancer le code, et arrêter le code avec le bouton Arrêter. **Code** .. note:: Vous pouvez **Modifier/Réinitialiser/Copier/Exécuter/Arrêter** le code ci-dessous. Mais avant cela, vous devez accéder au chemin du code source comme ``raphael-kit/python``. Après avoir modifié le code, vous pouvez l'exécuter directement pour voir l'effet. .. raw:: html .. code-block:: python #!/usr/bin/env python3 import time import os import RPi.GPIO as GPIO from picamera2 import Picamera2 # ---------------------------- # USER DIRECTORY # ---------------------------- user = os.getlogin() user_home = os.path.expanduser(f'~{user}') # ---------------------------- # GPIO SETUP # ---------------------------- PIR_PIN = 17 # PIR motion sensor connected to GPIO17 GPIO.setmode(GPIO.BCM) GPIO.setup(PIR_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # ---------------------------- # CAMERA SETUP # ---------------------------- camera = Picamera2() camera.start() print("Motion detection started. Press Ctrl+C to exit.") # ---------------------------- # MAIN LOOP # ---------------------------- try: i = 1 while True: if GPIO.input(PIR_PIN) == GPIO.HIGH: filename = f"{user_home}/capture{i}.jpg" camera.capture_file(filename) print(f"Motion detected. Saved image #{i}: {filename}") time.sleep(3) i += 1 else: print("waiting") time.sleep(0.5) # ---------------------------- # KEYBOARD INTERRUPT # ---------------------------- except KeyboardInterrupt: print("\nKeyboard interrupt received. Exiting program...") # ---------------------------- # CLEANUP # ---------------------------- finally: try: camera.close() except: pass GPIO.cleanup() print("Program exited cleanly.") **Explication du code** #. Lit le répertoire personnel de l’utilisateur actuel pour enregistrer les images capturées. .. code-block:: python user = os.getlogin() user_home = os.path.expanduser(f'~{user}') Cela permet d’obtenir le nom de l’utilisateur actif et de construire le chemin complet vers son répertoire personnel. #. Configure le GPIO et initialise le capteur de mouvement PIR sur ``GPIO17`` comme entrée. .. code-block:: python PIR_PIN = 17 GPIO.setmode(GPIO.BCM) GPIO.setup(PIR_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) L’utilisation d’une résistance de tirage vers le bas garantit que la broche lit ``LOW`` lorsqu’aucun mouvement n’est détecté. #. Initialise l’instance Picamera2 et démarre la caméra. .. code-block:: python camera = Picamera2() camera.start() La caméra est activée afin de pouvoir capturer des images immédiatement lorsqu’un mouvement est détecté. #. Détecte un mouvement en lisant l’état de l’entrée du capteur PIR. .. code-block:: python if GPIO.input(PIR_PIN) == GPIO.HIGH: Lorsque le PIR détecte un mouvement, il envoie un signal ``HIGH``, déclenchant le processus de capture. #. Capture une image et l’enregistre en utilisant un numéro de fichier séquentiel. .. code-block:: python filename = f"{user_home}/capture{i}.jpg" camera.capture_file(filename) Chaque détection enregistre une nouvelle image sous ``capture1.jpg``, ``capture2.jpg``, etc. #. Attend trois secondes après une capture déclenchée par mouvement. .. code-block:: python time.sleep(3) Cela empêche la prise de plusieurs images trop rapidement après un seul événement de mouvement. #. Affiche “waiting” lorsqu’aucun mouvement n’est détecté et vérifie à nouveau après un court délai. .. code-block:: python else: print("waiting") time.sleep(0.5) Cela assure une surveillance continue tout en réduisant l’utilisation inutile du processeur. #. Gère l’interruption clavier (Ctrl+C) pour quitter proprement le programme. .. code-block:: python except KeyboardInterrupt: print("\nKeyboard interrupt received. Exiting program...") Un message de sortie propre est affiché lorsque l’utilisateur arrête le programme manuellement. #. Libère les ressources de la caméra et du GPIO avant de quitter. .. code-block:: python finally: camera.close() GPIO.cleanup() Cela garantit que la caméra se ferme correctement et que toutes les broches GPIO reviennent à un état sûr. Photo du Phénomène ------------------------ .. image:: ../img/4.1.4spycamera.JPG :align: center