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.
Il est vraiment pratique d’acheter un kit complet, voici le lien :
Nom |
Éléments dans ce kit |
Lien |
|---|---|---|
Kit Raphael |
337 |
Vous pouvez également les acheter séparément à partir des liens ci-dessous.
Introduction des Composants |
Lien d’Achat |
|---|---|
- |
Schéma de Câblage
Nom T-Board |
Physique |
wiringPi |
BCM |
GPIO17 |
Pin 11 |
0 |
17 |
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.
É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.
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
Importe les classes
Picamera2etPreviewpour le contrôle de la caméra, la classeMotionSensorpour la détection de mouvement, ainsi que les bibliothèques standardstimeetospour 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
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}')
Initialise la caméra et la démarre.
# Initialize the camera camera = Picamera2() camera.start()
Initialise un capteur de mouvement PIR connecté à la broche GPIO 17.
# Initialize the motion sensor on GPIO pin 17 pir = MotionSensor(17)
Initialise un compteur
ipour 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 compteuri, affiche le numéro de l’image, et attend 3 secondes avant de vérifier à nouveau la détection de mouvement. Le compteuriest 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
Si aucun mouvement n’est détecté, affiche
waitinget 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
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