Nota
Ciao, benvenuto nella Community di SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.
Perché Unirsi?
Supporto Tecnico Esperto: Risolvi i problemi post-vendita e affronta le sfide tecniche con l’aiuto della nostra comunità e del nostro team.
Impara e Condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.
Anteprime Esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e anteprime.
Sconti Speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
Promozioni Festive e Giveaway: Partecipa a giveaway e promozioni festive.
👉 Sei pronto a esplorare e creare con noi? Clicca [Qui] e unisciti oggi stesso!
4.1.1 Fotocamera
Introduzione
Qui realizzeremo una fotocamera con un otturatore; quando premi il pulsante, la fotocamera scatterà una foto mentre il LED lampeggia.
Componenti Necessari
In questo progetto, abbiamo bisogno dei seguenti componenti.
È decisamente conveniente acquistare un kit completo, ecco il link:
Nome |
COMPONENTI NEL KIT |
LINK |
|---|---|---|
Raphael Kit |
337 |
Puoi anche acquistarli separatamente dai link sottostanti.
INTRODUZIONE AI COMPONENTI |
LINK PER L’ACQUISTO |
|---|---|
Diagramma Schematica
T-Board Name |
physical |
wiringPi |
BCM |
GPIO17 |
Pin 11 |
0 |
17 |
GPIO18 |
Pin 12 |
1 |
18 |
Procedure Sperimentali
Passo 1: Costruisci il circuito.
Passo 2: Accedi al desktop di Raspberry Pi. Potresti aver bisogno di uno schermo per un’esperienza migliore, fai riferimento a: Collega il tuo Raspberry Pi. Oppure accedi al desktop di Raspberry Pi da remoto, per un tutorial dettagliato consulta Desktop Remoto.
Passo 3: Apri un Terminale e vai nella cartella del codice.
cd ~/raphael-kit/python-pi5
Passo 4: Esegui.
sudo python3 4.1.1_Camera_zero.py
Dopo l’esecuzione del codice, premi il pulsante: il Raspberry Pi farà lampeggiare il LED e scatterà una foto. La foto verrà chiamata my_photo.jpg e salvata nella directory ~.
Nota
Puoi anche aprire 4.1.1_Camera_zero.py nel percorso ~/raphael-kit/python/ con un IDE Python, cliccare sul pulsante Esegui per avviare e utilizzare il pulsante Stop per interrompere il codice.
Se desideri scaricare la foto sul tuo PC, fai riferimento a Software FileZilla.
Avvertimento
Se viene visualizzato l’errore RuntimeError: Cannot determine SOC peripheral base address, fare riferimento a If gpiozero doesn’t work..
Code
#!/usr/bin/env python3
from picamera2 import Picamera2, Preview
from gpiozero import LED, Button
import time
import os
# Ottieni il nome dell'utente attualmente connesso e la sua directory home
user = os.getlogin()
user_home = os.path.expanduser(f'~{user}')
# Inizializza la fotocamera
camera = Picamera2()
camera.start()
# Inizializza una variabile per tracciare lo stato della fotocamera
global status
status = False
# Imposta il LED e il pulsante con i rispettivi numeri di pin GPIO
led = LED(17)
button = Button(18)
def takePhotos(pin):
"""Function to set the camera's status to True when the button is pressed."""
global status
status = True
try:
# Assegna la funzione da chiamare quando si preme il pulsante
button.when_pressed = takePhotos
# Ciclo principale
while True:
# Controlla se il pulsante è stato premuto
if status:
# Fai lampeggiare il LED cinque volte
for i in range(5):
led.on()
time.sleep(0.1)
led.off()
time.sleep(0.1)
# Cattura e salva una foto
camera.capture_file(f'{user_home}/my_photo.jpg')
print('Take a photo!')
# Reimposta lo stato
status = False
else:
# Spegni il LED se non stai scattando foto
led.off()
# Aspetta un breve periodo prima di controllare nuovamente lo stato del pulsante
time.sleep(1)
except KeyboardInterrupt:
# Interrompi l'anteprima della fotocamera e spegni il LED se si verifica un'interruzione da tastiera
camera.stop_preview()
led.off()
pass
Spiegazione del Codice
Importa le librerie necessarie per la gestione del tempo, il controllo della fotocamera e dei componenti GPIO.
#!/usr/bin/env python3 from picamera2 import Picamera2, Preview from gpiozero import LED, Button import time import os
Recupera il nome dell’utente attualmente connesso e la sua directory home per salvare le foto.
# Ottieni il nome dell'utente attualmente connesso e la sua directory home user = os.getlogin() user_home = os.path.expanduser(f'~{user}')
Inizializza la fotocamera e la avvia.
# Inizializza la fotocamera camera = Picamera2() camera.start()
Dichiara
statuscome variabile globale e la imposta inizialmente suFalse.# Inizializza una variabile per tracciare lo stato della fotocamera global status status = False
Inizializza un LED collegato al pin GPIO 17 e un pulsante collegato al pin GPIO 18.
# Imposta il LED e il pulsante con i rispettivi numeri di pin GPIO led = LED(17) button = Button(18)
Definisce una funzione
takePhotosche imposta la variabile globalestatussuTruequando si preme il pulsante.def takePhotos(pin): """Function to set the camera's status to True when the button is pressed.""" global status status = True
Assegna la funzione
takePhotosper essere chiamata quando si preme il pulsante.try: # Assegna la funzione da chiamare quando si preme il pulsante button.when_pressed = takePhotos ...
Controlla continuamente se
statusèTrue. In tal caso, fa lampeggiare il LED cinque volte, cattura una foto e reimpostastatus. In caso contrario, il LED rimane spento. C’è un ritardo di 1 secondo tra ogni iterazione del ciclo.try: ... # Ciclo principale while True: # Controlla se il pulsante è stato premuto if status: # Fai lampeggiare il LED cinque volte for i in range(5): led.on() time.sleep(0.1) led.off() time.sleep(0.1) # Cattura e salva una foto camera.capture_file(f'{user_home}/my_photo.jpg') print('Take a photo!') # Reimposta lo stato status = False else: # Spegni il LED se non stai scattando foto led.off() # Aspetta un breve periodo prima di controllare nuovamente lo stato del pulsante time.sleep(1)
Cattura un’interruzione da tastiera (come Ctrl+C) e interrompe l’anteprima della fotocamera, spegnendo il LED prima di uscire.
except KeyboardInterrupt: # Interrompi l'anteprima della fotocamera e spegni il LED se si verifica un'interruzione da tastiera camera.stop_preview() led.off() pass