Nota

Ciao, benvenuto nella Community di SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Approfondisci il mondo di Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.

Perché unirti a noi?

  • Supporto Tecnico Esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra comunità e del nostro team.

  • Impara e Condividi: Scambia consigli e tutorial per migliorare le tue competenze.

  • Anteprime Esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e alle anteprime.

  • Sconti Speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni Festive e Giveaway: Partecipa a giveaway e promozioni durante le festività.

👉 Sei pronto a esplorare e creare con noi? Clicca [Qui] e unisciti oggi stesso!

1.3.2 Servo

Introduzione

In questo progetto, impareremo a far ruotare un servomotore.

Componenti Necessari

Per questo progetto, avremo bisogno dei seguenti componenti.

../_images/1.3.2_servo_list.png

È decisamente conveniente acquistare un kit completo, ecco il link:

Nome

COMPONENTI NEL KIT

LINK

Raphael Kit

337

Raphael Kit

Puoi anche acquistarli separatamente dai link sottostanti.

INTRODUZIONE AI COMPONENTI

LINK D’ACQUISTO

Scheda di estensione GPIO

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Servo

ACQUISTA

Schema Elettrico

../_images/image337.png

Procedure Sperimentali

Passo 1: Costruisci il circuito.

../_images/image125.png

Passo 2: Accedi alla cartella del codice.

cd ~/raphael-kit/python-pi5

Passo 3: Esegui il file eseguibile.

sudo python3 1.3.2_Servo_zero.py

Dopo l’esecuzione del programma, il servomotore ruoterà da 0 gradi a 90 fino a 180 gradi, e poi da 180 gradi a 90 fino a 0 gradi, in un ciclo continuo.

Avvertimento

Se viene visualizzato l’errore RuntimeError: Cannot determine SOC peripheral base address, fare riferimento a If gpiozero doesn’t work..

Code

Nota

Puoi Modificare/Resettare/Copiare/Eseguire/Fermare il codice qui sotto. Ma prima, devi andare nella directory del codice come raphael-kit/python-pi5. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l’effetto.

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

# Definisci un fattore di correzione per regolare la larghezza degli impulsi del servo
myCorrection = 0.45
maxPW = (2.0 + myCorrection) / 1000  # Calcola la larghezza massima degli impulsi
minPW = (1.0 - myCorrection) / 1000  # Calcola la larghezza minima degli impulsi

# Inizializza l'oggetto Servo con larghezze di impulsi 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 attuale
        sleep(0.5)    # Breve pausa di 0.5 secondi

        # Sposta il servo alla sua posizione minima e attendi
        servo.min()
        print("min")  # Indica la posizione attuale
        sleep(1)      # Mantieni la posizione per 1 secondo

        # Riporta il servo alla posizione centrale e attendi
        servo.mid()
        print("mid")  # Indica la posizione attuale
        sleep(0.5)    # Breve pausa di 0.5 secondi

        # Sposta il servo alla sua posizione massima e attendi
        servo.max()
        print("max")  # Indica la posizione attuale
        sleep(1)      # Mantieni la posizione per 1 secondo

except KeyboardInterrupt:
    # Termina in modo sicuro lo script con un'interruzione da tastiera (Ctrl+C)
    pass

Spiegazione del Codice

  1. Questi importano la classe Servo per il controllo del servo e la funzione sleep per i ritardi temporali.

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

    # Imposta il numero di pin GPIO a cui è collegato il servomotore
    myGPIO = 18
    
  3. Queste linee definiscono un fattore di correzione e lo utilizzano per calcolare la larghezza massima e minima degli impulsi per il servo, regolando la gamma di movimento.

    # Definisci un fattore di correzione per regolare la larghezza degli impulsi del servo
    myCorrection = 0.45
    maxPW = (2.0 + myCorrection) / 1000  # Calcola la larghezza massima degli impulsi
    minPW = (1.0 - myCorrection) / 1000  # Calcola la larghezza minima degli impulsi
    
  4. Inizializza l’oggetto Servo con il pin GPIO specificato e larghezze di impulsi personalizzate.

    # Inizializza l'oggetto Servo con larghezze di impulsi 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 viene posizionato a metà, min e max punti, con ciascuna posizione stampata e mantenuta per una durata specificata.

    try:
        while True:
            # Posiziona il servo al centro e attendi
            servo.mid()
            print("mid")  # Indica la posizione attuale
            sleep(0.5)    # Breve pausa di 0.5 secondi
    
            # Sposta il servo alla sua posizione minima e attendi
            servo.min()
            print("min")  # Indica la posizione attuale
            sleep(1)      # Mantieni la posizione per 1 secondo
    
            # Riporta il servo alla posizione centrale e attendi
            servo.mid()
            print("mid")  # Indica la posizione attuale
            sleep(0.5)    # Breve pausa di 0.5 secondi
    
            # Sposta il servo alla sua posizione massima e attendi
            servo.max()
            print("max")  # Indica la posizione attuale
            sleep(1)      # Mantieni la posizione per 1 secondo
    
    except KeyboardInterrupt:
        # Termina in modo sicuro lo script con un'interruzione da tastiera (Ctrl+C)
        pass