.. note:: 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 [|link_sf_facebook|] e unisciti oggi stesso! .. _4.1.1_py_pi5: 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. .. image:: ../python_pi5/img/4.1.1_camera_list.png :width: 800 :align: center È decisamente conveniente acquistare un kit completo, ecco il link: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nome - COMPONENTI NEL KIT - LINK * - Raphael Kit - 337 - |link_Raphael_kit| Puoi anche acquistarli separatamente dai link sottostanti. .. list-table:: :widths: 30 20 :header-rows: 1 * - INTRODUZIONE AI COMPONENTI - LINK PER L'ACQUISTO * - :ref:`cpn_gpio_extension_board` - |link_gpio_board_buy| * - :ref:`cpn_breadboard` - |link_breadboard_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_resistor` - |link_resistor_buy| * - :ref:`cpn_led` - |link_led_buy| * - :ref:`cpn_button` - |link_button_buy| * - :ref:`cpn_camera_module` - |link_camera_buy| Diagramma Schematica ------------------------- ============ ======== ======== === T-Board Name physical wiringPi BCM GPIO17 Pin 11 0 17 GPIO18 Pin 12 1 18 ============ ======== ======== === .. image:: ../python_pi5/img/4.1.1_camera_schematic.png :align: center Procedure Sperimentali -------------------------- **Passo 1:** Costruisci il circuito. .. image:: ../python_pi5/img/4.1.1_camera_circuit.png :width: 800 :align: center **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 :ref:`remote_desktop`. **Passo 3:** Apri un Terminale e vai nella cartella del codice. .. raw:: html .. code-block:: cd ~/raphael-kit/python-pi5 **Passo 4:** Esegui. .. raw:: html .. code-block:: 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 ``~``. .. note:: 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 :ref:`filezilla`. .. warning:: Se viene visualizzato l'errore ``RuntimeError: Cannot determine SOC peripheral base address``, fare riferimento a :ref:`faq_soc`. **Code** .. code-block:: python #!/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. .. code-block:: python #!/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. .. code-block:: python # 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. .. code-block:: python # Inizializza la fotocamera camera = Picamera2() camera.start() #. Dichiara ``status`` come variabile globale e la imposta inizialmente su ``False``. .. code-block:: python # 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. .. code-block:: python # Imposta il LED e il pulsante con i rispettivi numeri di pin GPIO led = LED(17) button = Button(18) #. Definisce una funzione ``takePhotos`` che imposta la variabile globale ``status`` su ``True`` quando si preme il pulsante. .. code-block:: python def takePhotos(pin): """Function to set the camera's status to True when the button is pressed.""" global status status = True #. Assegna la funzione ``takePhotos`` per essere chiamata quando si preme il pulsante. .. code-block:: python 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 reimposta ``status``. In caso contrario, il LED rimane spento. C'è un ritardo di 1 secondo tra ogni iterazione del ciclo. .. code-block:: python 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. .. code-block:: python except KeyboardInterrupt: # Interrompi l'anteprima della fotocamera e spegni il LED se si verifica un'interruzione da tastiera camera.stop_preview() led.off() pass