Nota
Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Approfondisci l’esplorazione del Raspberry Pi, Arduino ed ESP32 con altri appassionati.
Perché unirti a noi?
Supporto esperto: Risolvi i problemi post-vendita e le sfide tecniche con l’aiuto della nostra comunità e del nostro team.
Impara e condividi: Scambia consigli e tutorial per migliorare le tue competenze.
Anteprime esclusive: Accedi in anteprima agli annunci di nuovi prodotti e alle anticipazioni esclusive.
Sconti speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
Promozioni e omaggi festivi: Partecipa a omaggi e promozioni speciali durante le festività.
👉 Sei pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi stesso!
4.1.4 Fotocamera automatica di cattura
Introduzione
Quando sei fuori, gli scoiattoli del bosco potrebbero visitare il tuo davanzale. Creiamo una fotocamera automatica di cattura per immortalare queste piccole creature!
Componenti necessari
In questo progetto, avremo bisogno dei seguenti componenti.
È sicuramente conveniente acquistare un kit completo, ecco il link:
Nome |
ELEMENTI IN QUESTO KIT |
LINK |
|---|---|---|
Kit Raphael |
337 |
Puoi anche acquistarli separatamente dai link sottostanti.
INTRODUZIONE AI COMPONENTI |
LINK PER L’ACQUISTO |
|---|---|
- |
Schema elettrico
T-Board Name |
physical |
wiringPi |
BCM |
GPIO17 |
Pin 11 |
0 |
17 |
Procedura sperimentale
Prima di iniziare questo progetto, assicurati di aver completato 3.1.1 Modulo Fotografico.
Passo 1: Costruisci il circuito.
Passo 2: Per collegare il modulo fotocamera e completare la configurazione, fai riferimento a: Modulo Fotocamera.
Passo 3: Accedi al Desktop del Raspberry Pi. Potresti aver bisogno di uno schermo per un’esperienza migliore, fai riferimento a: Connetti il tuo Raspberry Pi. Oppure accedi al desktop del Raspberry Pi da remoto, per un tutorial dettagliato fai riferimento a: Desktop Remoto.
Passo 4: Apri un Terminale ed entra nella cartella del codice.
cd ~/raphael-kit/python/
Passo 5: Esegui.
sudo python3 4.1.4_AutomaticCaptureCamera.py
Dopo l’esecuzione del codice, il PIR rileverà l’ambiente circostante e, se percepisce lo scoiattolo, la fotocamera scatterà una foto. L’intervallo tra le foto è di 3 secondi e il numero totale di foto scattate verrà mostrato nella finestra di stampa.
Ci sono due potenziometri sul modulo PIR: uno per regolare la sensibilità e l’altro per regolare la distanza di rilevamento. Per far funzionare meglio il modulo PIR, è necessario girarli entrambi completamente in senso antiorario.
Nota
Puoi anche aprire 4.1.4_AutomaticCaptureCamera.py nel percorso ~/raphael-kit/python/ utilizzando un IDE Python, clicca sul pulsante Esegui per eseguire e interrompi il codice con il pulsante Stop.
Codice
Nota
Puoi Modificare/Resettare/Copiare/Eseguire/Fermare il codice qui sotto. Ma prima di farlo, devi andare nel percorso del codice sorgente come raphael-kit/python. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l’effetto.
#!/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.")
Spiegazione del Codice
Legge la directory home dell’utente corrente per salvare le immagini catturate.
user = os.getlogin() user_home = os.path.expanduser(f'~{user}')
Questo ottiene il nome dell’utente attivo e costruisce il percorso completo della sua directory home.
Configura i GPIO e imposta il sensore PIR su
GPIO17come ingresso.PIR_PIN = 17 GPIO.setmode(GPIO.BCM) GPIO.setup(PIR_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
L’uso di una resistenza di pull-down garantisce che il pin legga
LOWquando non viene rilevato alcun movimento.Inizializza l’istanza di Picamera2 e avvia subito la fotocamera.
camera = Picamera2() camera.start()
La fotocamera viene attivata per essere pronta a catturare immagini non appena viene individuato un movimento.
Rileva il movimento leggendo lo stato di ingresso del sensore PIR.
if GPIO.input(PIR_PIN) == GPIO.HIGH:
Quando il sensore PIR rileva un movimento, invia un segnale
HIGHche avvia la procedura di cattura.Cattura un’immagine e la salva utilizzando un numero progressivo nel nome del file.
filename = f"{user_home}/capture{i}.jpg" camera.capture_file(filename)
Ogni rilevamento salva una nuova immagine con nomi come
capture1.jpg,capture2.jpge così via.Attende tre secondi dopo una cattura attivata dal movimento.
time.sleep(3)
Questo evita la cattura di più immagini troppo ravvicinate dopo un unico evento di movimento.
Stampa “waiting” quando non viene rilevato movimento e controlla nuovamente dopo un breve ritardo.
else: print("waiting") time.sleep(0.5)
In questo modo il programma continua a monitorare costantemente senza usare inutilmente troppa CPU.
Gestisce un’interruzione da tastiera (Ctrl+C) per uscire dal programma in sicurezza.
except KeyboardInterrupt: print("\nKeyboard interrupt received. Exiting program...")
Quando l’utente interrompe manualmente il programma, viene mostrato un messaggio di uscita pulita.
Rilascia correttamente le risorse della fotocamera e dei GPIO prima di terminare.
finally: camera.close() GPIO.cleanup()
Questo garantisce che la fotocamera venga chiusa correttamente e che tutti i pin GPIO ritornino in uno stato sicuro.