.. 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_pi5: 4.1.2 Caméra à Capture Automatique ===================================== Introduction --------------- Lorsque vous êtes absent, les petits écureuils de la forêt pourraient visiter votre rebord de fenêtre. Fabriquons une caméra à capture automatique pour garder des photos de ces petites créatures adorables ! Composants Nécessaires -------------------------- Pour ce projet, nous avons besoin des composants suivants. .. image:: ../python_pi5/img/4.1.4_automatic_capture_list.png :width: 800 :align: center Il est vraiment pratique d'acheter un kit complet, voici le lien : .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nom - Éléments dans ce kit - Lien * - Kit Raphael - 337 - |link_Raphael_kit| Vous pouvez également les acheter séparément à partir des 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 T-Board Physique wiringPi BCM GPIO17 Pin 11 0 17 ============ ========= ========= ==== .. image:: ../python_pi5/img/4.1.4_automatic_capture_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_pi5`. **Étape 1 :** Construisez le circuit. .. image:: ../python_pi5/img/4.1.4_automatic_capture_circuit.png :width: 800 :align: center **Étape 2 :** Allez sur le bureau de Raspberry Pi. Vous aurez peut-être besoin d'un écran pour une meilleure expérience, référez-vous à : `Connect your Raspberry Pi `_. Ou accédez au bureau de Raspberry Pi à distance, pour un tutoriel détaillé, veuillez vous référer à :ref:`remote_desktop`. **Étape 3 :** Ouvrez un terminal et accédez au dossier du code. .. raw:: html .. code-block:: cd ~/raphael-kit/python-pi5 **Étape 4 :** Exécutez. .. raw:: html .. code-block:: sudo python3 4.1.4_AutomaticCaptureCamera_zero.py Après l'exécution du code, le PIR détectera l'environnement environnant, et s'il détecte le passage du petit écureuil, 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 terminal. 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 que le module PIR fonctionne mieux, vous devez tourner les deux dans le sens inverse des aiguilles d'une montre jusqu'à la fin. .. image:: ../python_pi5/img/4.1.4_PIR_TTE.png :width: 400 :align: center .. note:: Vous pouvez également ouvrir ``4.1.4_AutomaticCaptureCamera_zero.py`` dans le chemin ``~/raphael-kit/python-pi5/`` avec un IDE Python, cliquer sur le bouton Exécuter pour l'exécuter, et arrêter le code avec le bouton Arrêter. .. warning:: Si vous recevez le message d'erreur ``RuntimeError: Cannot determine SOC peripheral base address``, veuillez consulter :ref:`faq_soc` **Code** .. note:: Vous pouvez **Modifier/Réinitialiser/Copier/Exécuter/Arrêter** le code ci-dessous. Mais avant cela, vous devez aller dans le chemin du code source comme ``raphael-kit/python-pi5``. 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 from picamera2 import Picamera2, Preview from gpiozero import MotionSensor import time import os # Retrieve the current user's login name and home directory user = os.getlogin() user_home = os.path.expanduser(f'~{user}') # Initialize the camera camera = Picamera2() camera.start() # Initialize the motion sensor on GPIO pin 17 pir = MotionSensor(17) try: i = 1 # Initialize the image count while True: if pir.motion_detected: # Capture an image when motion is detected and save it with a unique number camera.capture_file(f'{user_home}/capture%s.jpg' % i) print('The number is %s' % i) # Print the image count time.sleep(3) # Wait for 3 seconds before next detection i += 1 # Increment the image count else: print('waiting') # Print 'waiting' when no motion is detected time.sleep(0.5) # Check for motion every 0.5 seconds except KeyboardInterrupt: # Stop the camera and turn off the LED if a KeyboardInterrupt occurs camera.stop_preview() pass **Explication du Code** #. Importe les classes ``Picamera2`` et ``Preview`` pour le contrôle de la caméra, la classe ``MotionSensor`` pour la détection de mouvement, ainsi que les bibliothèques standards ``time`` et ``os`` pour la gestion du temps et les interactions avec le système d'exploitation. .. code-block:: python #!/usr/bin/env python3 from picamera2 import Picamera2, Preview from gpiozero import MotionSensor import time import os #. Récupère le nom de connexion et le répertoire personnel de l'utilisateur actuel pour enregistrer les images capturées. .. code-block:: python # Retrieve the current user's login name and home directory user = os.getlogin() user_home = os.path.expanduser(f'~{user}') #. Initialise la caméra et la démarre. .. code-block:: python # Initialize the camera camera = Picamera2() camera.start() #. Initialise un capteur de mouvement PIR connecté à la broche GPIO 17. .. code-block:: python # Initialize the motion sensor on GPIO pin 17 pir = MotionSensor(17) #. Initialise un compteur ``i`` pour suivre le nombre d'images capturées. Dans une boucle infinie, vérifie si un mouvement est détecté. Si un mouvement est détecté, capture une image, la sauvegarde avec un nom unique basé sur le compteur ``i``, affiche le numéro de l'image, et attend 3 secondes avant de vérifier à nouveau la détection de mouvement. Le compteur ``i`` est incrémenté après chaque capture. .. code-block:: python try: i = 1 # Initialize the image count while True: if pir.motion_detected: # Capture an image when motion is detected and save it with a unique number camera.capture_file(f'{user_home}/capture%s.jpg' % i) print('The number is %s' % i) # Print the image count time.sleep(3) # Wait for 3 seconds before next detection i += 1 # Increment the image count #. Si aucun mouvement n'est détecté, affiche ``waiting`` et vérifie la détection de mouvement toutes les 0,5 secondes. .. code-block:: python try: ... while True: ... else: print('waiting') # Print 'waiting' when no motion is detected time.sleep(0.5) # Check for motion every 0.5 seconds #. Intercepte une interruption clavier (comme Ctrl+C) pour arrêter l'aperçu de la caméra et quitter le script de manière gracieuse. .. code-block:: python except KeyboardInterrupt: # Stop the camera and turn off the LED if a KeyboardInterrupt occurs camera.stop_preview() pass