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 [Ici] et rejoignez-nous aujourd’hui !

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.

../_images/4.1.4_automatic_capture_list.png

Il est vraiment pratique d’acheter un kit complet, voici le lien :

Nom

Éléments dans ce kit

Lien

Kit Raphael

337

Raphael Kit

Vous pouvez également les acheter séparément à partir des liens ci-dessous.

Introduction des Composants

Lien d’Achat

Carte d’extension GPIO

ACHETER

Plaque d’expérimentation (Breadboard)

ACHETER

Fils de Liaison

ACHETER

Résistance

ACHETER

Module de Caméra

ACHETER

Module de Capteur de Mouvement PIR

-

Schéma de Câblage

Nom T-Board

Physique

wiringPi

BCM

GPIO17

Pin 11

0

17

../_images/4.1.4_automatic_capture_schematic.png

Procédures Expérimentales

Avant de commencer ce projet, assurez-vous d’avoir complété 3.1.1 Module Photographique.

Étape 1 : Construisez le circuit.

../_images/4.1.4_automatic_capture_circuit.png

É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 à Bureau à distance.

Étape 3 : Ouvrez un terminal et accédez au dossier du code.

cd ~/raphael-kit/python-pi5

Étape 4 : Exécutez.

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.

../_images/4.1.4_PIR_TTE.png

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.

Avertissement

Si vous recevez le message d’erreur RuntimeError: Cannot determine SOC peripheral base address, veuillez consulter Si « gpiozero » ne fonctionne pas.

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.

#!/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

  1. 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.

    #!/usr/bin/env python3
    from picamera2 import Picamera2, Preview
    from gpiozero import MotionSensor
    import time
    import os
    
  2. Récupère le nom de connexion et le répertoire personnel de l’utilisateur actuel pour enregistrer les images capturées.

    # Retrieve the current user's login name and home directory
    user = os.getlogin()
    user_home = os.path.expanduser(f'~{user}')
    
  3. Initialise la caméra et la démarre.

    # Initialize the camera
    camera = Picamera2()
    camera.start()
    
  4. Initialise un capteur de mouvement PIR connecté à la broche GPIO 17.

    # Initialize the motion sensor on GPIO pin 17
    pir = MotionSensor(17)
    
  5. 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.

    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
    
  6. Si aucun mouvement n’est détecté, affiche waiting et vérifie la détection de mouvement toutes les 0,5 secondes.

    try:
        ...
    
        while True:
            ...
    
            else:
                print('waiting')  # Print 'waiting' when no motion is detected
                time.sleep(0.5)  # Check for motion every 0.5 seconds
    
  7. 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.

    except KeyboardInterrupt:
        # Stop the camera and turn off the LED if a KeyboardInterrupt occurs
        camera.stop_preview()
        pass