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

../_images/3.1.18components.png

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

Nom

ARTICLES DANS CE KIT

LIEN

Kit Raphael

337

Raphael Kit

Vous pouvez également les acheter séparément via les 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 du T-Board

Brochage

wiringPi

BCM

GPIO17

Pin 11

0

17

../_images/1.1.18_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/3.1.18fritzing.png

Étape 2 : Pour connecter le module caméra et compléter la configuration, veuillez vous référer à Module de Caméra.

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

Étape 4 : Ouvrez un Terminal et accédez au dossier du code.

cd ~/raphael-kit/python/

Étape 5 : Exécutez.

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.

../_images/PIR_TTE.png

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.

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

  1. Lit le répertoire personnel de l’utilisateur actuel pour enregistrer les images capturées.

    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.

  2. Configure le GPIO et initialise le capteur de mouvement PIR sur GPIO17 comme entrée.

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

  3. Initialise l’instance Picamera2 et démarre la caméra.

    camera = Picamera2()
    camera.start()
    

    La caméra est activée afin de pouvoir capturer des images immédiatement lorsqu’un mouvement est détecté.

  4. Détecte un mouvement en lisant l’état de l’entrée du capteur PIR.

    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.

  5. Capture une image et l’enregistre en utilisant un numéro de fichier séquentiel.

    filename = f"{user_home}/capture{i}.jpg"
    camera.capture_file(filename)
    

    Chaque détection enregistre une nouvelle image sous capture1.jpg, capture2.jpg, etc.

  6. Attend trois secondes après une capture déclenchée par mouvement.

    time.sleep(3)
    

    Cela empêche la prise de plusieurs images trop rapidement après un seul événement de mouvement.

  7. Affiche “waiting” lorsqu’aucun mouvement n’est détecté et vérifie à nouveau après un court délai.

    else:
        print("waiting")
        time.sleep(0.5)
    

    Cela assure une surveillance continue tout en réduisant l’utilisation inutile du processeur.

  8. Gère l’interruption clavier (Ctrl+C) pour quitter proprement le programme.

    except KeyboardInterrupt:
        print("\nKeyboard interrupt received. Exiting program...")
    

    Un message de sortie propre est affiché lorsque l’utilisateur arrête le programme manuellement.

  9. Libère les ressources de la caméra et du GPIO avant de quitter.

    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

../_images/4.1.4spycamera.JPG