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.
Schema Elettrico
Procedure Sperimentali
Passo 1: Costruisci il circuito.
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
Queste istruzioni di importazione richiamano la classe
Servoper il controllo del servo e la funzionesleepper la temporizzazione.#!/usr/bin/env python3 from gpiozero import Servo from time import sleep
Imposta il pin GPIO 18 per il collegamento del servomotore.
# 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.
# 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.
# 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.
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