.. note:: Ciao e benvenuto nella Community di Appassionati di SunFounder per Raspberry Pi, Arduino ed ESP32 su Facebook! Esplora a fondo il mondo di Raspberry Pi, Arduino ed ESP32 insieme a tanti altri appassionati. **Perché Unirsi?** - **Supporto da Esperti**: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra community e del nostro team. - **Impara e Condividi**: Scambia consigli e tutorial per migliorare le tue competenze. - **Anteprime Esclusive**: Ottieni accesso anticipato agli annunci dei nuovi prodotti e a contenuti inediti. - **Sconti Speciali**: Approfitta di sconti esclusivi sui nostri prodotti più recenti. - **Promozioni Festive e Giveaway**: Partecipa a concorsi e promozioni festive. 👉 Pronto a esplorare e creare con noi? Clicca su [|link_sf_facebook|] e unisciti oggi stesso! .. _1.3.2_py_pi5: 1.3.2 Servo ============= Introduzione ---------------- In questo progetto impareremo a far ruotare un servomotore. Componenti Necessari ------------------------------- In questo progetto, abbiamo bisogno dei seguenti componenti. .. image:: ../python_pi5/img/1.3.2_servo_list.png Schema Elettrico -------------------- .. image:: ../img/image337.png Procedure Sperimentali ------------------------- **Passo 1:** Costruisci il circuito. .. image:: ../img/image125.png **Passo 2**: Entra nella cartella del codice. .. raw:: html .. code-block:: cd ~/davinci-kit-for-raspberry-pi/python-pi5 **Passo 3**: Esegui il file eseguibile. .. raw:: html .. code-block:: sudo python3 1.3.2_Servo.py Dopo l'esecuzione del programma, il servomotore ruoterà da 0 a 90 a 180 gradi e poi da 180 a 90 a 0 gradi, in un ciclo continuo. .. warning:: Se compare l'errore ``RuntimeError: Cannot determine SOC peripheral base address``, consulta :ref:`faq_soc` **Codice** .. note:: Puoi **Modificare/Reimpostare/Copiare/Eseguire/Interrompere** il codice qui sotto. Prima di farlo, però, vai al percorso del codice sorgente, come ``davinci-kit-for-raspberry-pi/python-pi5``. Dopo aver modificato il codice, potrai eseguirlo direttamente per vedere il risultato. .. raw:: html .. code-block:: python #!/usr/bin/env python3 from gpiozero import Servo from time import sleep # Imposta il numero di pin GPIO a cui è collegato il servomotore myGPIO = 18 # Definisce un fattore di correzione per regolare la larghezza degli impulsi del servo myCorrection = 0.45 maxPW = (2.0 + myCorrection) / 1000 # Calcola la larghezza massima dell'impulso minPW = (1.0 - myCorrection) / 1000 # Calcola la larghezza minima dell'impulso # Inizializza l'oggetto Servo con larghezze di impulso personalizzate servo = Servo(myGPIO, min_pulse_width=minPW, max_pulse_width=maxPW) try: while True: # Posiziona il servo al centro e attendi servo.mid() print("mid") # Indica la posizione corrente sleep(0.5) # Pausa di 0,5 secondi # Muove il servo alla posizione minima e attende servo.min() print("min") # Indica la posizione corrente sleep(1) # Mantieni la posizione per 1 secondo # Riporta il servo alla posizione centrale e attende servo.mid() print("mid") # Indica la posizione corrente sleep(0.5) # Pausa di 0,5 secondi # Muove il servo alla posizione massima e attende servo.max() print("max") # Indica la posizione corrente sleep(1) # Mantieni la posizione per 1 secondo except KeyboardInterrupt: # Termina il programma in modo sicuro con un'interruzione da tastiera (Ctrl+C) pass **Spiegazione del Codice** #. Queste istruzioni di importazione richiamano la classe ``Servo`` per il controllo del servo e la funzione ``sleep`` per la temporizzazione. .. code-block:: python #!/usr/bin/env python3 from gpiozero import Servo from time import sleep #. Imposta il pin GPIO 18 per il collegamento del servomotore. .. code-block:: python # Imposta il numero di pin GPIO a cui è collegato il servomotore myGPIO = 18 #. Queste righe definiscono un fattore di correzione e lo utilizzano per calcolare la larghezza massima e minima degli impulsi per il servo, regolando il suo intervallo di movimento. .. code-block:: python # Definisce un fattore di correzione per regolare la larghezza degli impulsi del servo myCorrection = 0.45 maxPW = (2.0 + myCorrection) / 1000 # Calcola la larghezza massima dell'impulso minPW = (1.0 - myCorrection) / 1000 # Calcola la larghezza minima dell'impulso #. Inizializza l'oggetto Servo con il pin GPIO specificato e larghezze di impulso personalizzate. .. code-block:: python # Inizializza l'oggetto Servo con larghezze di impulso personalizzate servo = Servo(myGPIO, min_pulse_width=minPW, max_pulse_width=maxPW) #. Il blocco `try` contiene un ciclo `while True` per muovere continuamente il servo. Il servo si posiziona ai punti centrale, minimo e massimo, con ciascuna posizione stampata e mantenuta per la durata specificata. .. code-block:: python try: while True: # Posiziona il servo al centro e attendi servo.mid() print("mid") # Indica la posizione corrente sleep(0.5) # Pausa di 0,5 secondi # Muove il servo alla posizione minima e attende servo.min() print("min") # Indica la posizione corrente sleep(1) # Mantieni la posizione per 1 secondo # Riporta il servo alla posizione centrale e attende servo.mid() print("mid") # Indica la posizione corrente sleep(0.5) # Pausa di 0,5 secondi # Muove il servo alla posizione massima e attende servo.max() print("max") # Indica la posizione corrente sleep(1) # Mantieni la posizione per 1 secondo except KeyboardInterrupt: # Termina il programma in modo sicuro con un'interruzione da tastiera (Ctrl+C) pass