Nota

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 [Qui] e unisciti oggi stesso!

1.3.2 Servo

Introduzione

In questo progetto impareremo a far ruotare un servomotore.

Componenti Necessari

In questo progetto, abbiamo bisogno dei seguenti componenti.

../_images/1.3.2_servo_list.png

Schema Elettrico

../_images/image337.png

Procedure Sperimentali

Passo 1: Costruisci il circuito.

../_images/image125.png

Passo 2: Entra nella cartella del codice.

cd ~/davinci-kit-for-raspberry-pi/python-pi5

Passo 3: Esegui il file eseguibile.

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.

Avvertimento

Se compare l’errore RuntimeError: Cannot determine SOC peripheral base address, consulta Se gpiozero non funziona.

Codice

Nota

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.

#!/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

  1. Queste istruzioni di importazione richiamano la classe Servo per il controllo del servo e la funzione sleep per la temporizzazione.

    #!/usr/bin/env python3
    from gpiozero import Servo
    from time import sleep
    
  2. Imposta il pin GPIO 18 per il collegamento del servomotore.

    # Imposta il numero di pin GPIO a cui è collegato il servomotore
    myGPIO = 18
    
  3. 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.

    # 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
    
  4. Inizializza l’oggetto Servo con il pin GPIO specificato e larghezze di impulso personalizzate.

    # Inizializza l'oggetto Servo con larghezze di impulso personalizzate
    servo = Servo(myGPIO, min_pulse_width=minPW, max_pulse_width=maxPW)
    
  5. 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.

    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