.. 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