Servomoteur SG90

Come controllare un servomotore con Raspberry Pi

Aggiornato 29 Ottobre 2019 - 0 Commenti - , , , ,

ⓘ Questo articolo potrebbe essere stato tradotto parzialmente o completamente utilizzando strumenti automatici. Ci scusiamo per eventuali errori che ciò potrebbe causare.

Questo tutorial è la terza parte di un file dedicato alla scoperta dell'elettronica con il Raspberry Pi. Se non l'hai letto, ti consiglio di consultare il primo tutorial per controllare un LED con il Raspberry Pi così come il secondo tutorial per utilizzare un lettore RFID con il Raspberry Pi.

Quando si avvia la domotica, un'esigenza classica è controllare il movimento fisico nella realtà da un programma.

In questo tutorial vedremo come utilizzare il Raspberry Pi per controllare un servomotore.

Accessori per il controllo di un servomotore

Per poter seguire questo tutorial e controllare un servomotore avremo bisogno del seguente materiale:

Qual è la differenza tra motore, servomotore e motore passo-passo?

Prima di iniziare a collegare il nostro servomotore al nostro Raspberry Pi, diamo uno sguardo ai diversi tipi di motori convenzionalmente utilizzati in elettronica.

Senza entrare nei dettagli, possiamo suddividere approssimativamente i motori utilizzati nell'elettronica in tre categorie:

  • Il motore: funziona finché è alimentato. È adatto quando si vuole eseguire un movimento continuo che non richiede grande precisione.
  • Il motore passo-passo: gira in una sorta di piccoli balzi successivi. Vale a dire che potrai chiedergli di fare, ad esempio, 50 salti o 112 salti, che corrisponderanno a un certo movimento (ad esempio un quarto di giro). È adatto quando si desidera effettuare un movimento continuo con elevata precisione (vengono utilizzati ad esempio nelle stampanti 3D).
  • Il servomotore: ruota ad un certo angolo, definito secondo un segnale di tipo PWM (Pulse Width Modulation). Spesso i piccoli motori sono limitati e non possono fare più di un giro. Sono quindi piuttosto utilizzati per un movimento breve di grande precisione.
Diversi tipi di motori
Da sinistra a destra, un motore, un motore passo-passo e un servomotore.

Ci sarebbero ancora molte altre cose da dire su questi diversi motori, ma poi entreremo in questioni meccaniche che vanno ben oltre lo scopo del nostro tutorial.

Nel nostro caso utilizzeremo un servomotore perché è il motore di precisione più semplice da controllare da un Raspberry Pi.

Collega un servomotore al Raspberry Pi

La prima cosa da fare per poter utilizzare il nostro servomotore è collegarlo al Raspberry Pi.

Gli attuatori hanno 3 connettori elettrici. I colori possono cambiare a seconda del produttore, ma generalmente troverai qualcosa come:

  • Un filo rosso, che funge da alimentatore.
  • Un filo nero o marrone, che funge da Rete Display di Google.
  • Un altro filo, che viene utilizzato per trasmettere il segnale PWM controllando la posizione del motore.

Collegheremo quindi questi diversi cavi al Raspberry Pi, il filo rosso a una porta GPIO da 5 volt e il nero a una porta GND.

Per la porta PWM invece dovremo necessariamente collegarla al 12 ° pin GPIO del Raspberry Pi. In effetti, è l'unico pin GPIO che supporta un segnale PWM per impostazione predefinita.

Quindi dovresti avere un montaggio come questo.

Schema di montaggio di un servomotore sul Raspberry Pi
Filo rosso -> GPIO 2, Filo nero -> GPIO 6, Filo giallo -> GPIO 12

Nota, qui stiamo alimentando il nostro servomotore direttamente dal Raspberry Pi. Questo funziona perché stiamo usando un servomotore molto piccolo, ma su un modello più grande avremmo bisogno di un alimentatore dedicato.

Controllare il servomotore nelle linee di comando

Ora che abbiamo collegato il nostro servomotore, saremo in grado di pilotarlo direttamente dalla riga di comando di Raspberry Pi.

Per fare ciò, inizieremo attivando la modalità PWM sulla porta 12, ovvero GPIO 18 in base alla numerazione del processore.

gpio -o mode 18 pwm

E attiveremo la modalità Mark / Space del PWM, che permette di avere un segnale più adatto al nostro utilizzo.

gpio pwm-ms

Infine, configureremo la durata di un ciclo, le frequenze da utilizzare, ecc.

Il servomotore è impostato per funzionare a una frequenza di 50 Hz, ovvero 20 ms. Il segnale Raspberry Pi funziona a un'altra frequenza, 19,2 MHz. Usando queste due cifre, possiamo calcolare un periodo e un intervallo (grazie a ramboise314.fr per la formula):

50 = 19.2 * 10^6 / 192 / 2000
Estratto dalla documentazione SG90.
La documentazione del motore mostra un diagramma del periodo e del ciclo di lavoro di un SG90.

Quindi imposteremo il Raspberry Pi per utilizzare questi valori:

gpio pwmc 192
gpio pwmr 2000

Finalmente potremo far muovere il nostro motore! Nota che non passiamo un angolo al servomotore, ma un numero che verrà convertito in un angolo. Il nostro servomotore va da 0 ° a 180 °. Dopo alcune prove, sembrerebbe che 0 ° corrisponda a 230, 90 ° a 150 e 180 ° a 70.

Per inviare il nostro motore a 90 ° useremo quindi il comando:

gpio -g pwm 18 150

E sostituiremo 150 con 230 per andare a 0 °, 70 per andare a 180 ° o qualsiasi valore intermedio di cui abbiamo bisogno.

Nota, questi piccoli motori supportano un angolo di 180 ° in modo preciso, ma hanno un piccolo margine che può far sì che facciano 190 ° o 200 ° e persino che facciano un giro completo se metti un valore sufficientemente basso. È specifico per ogni modello di motore.

Guida il servomotore con Python

Come con i tutorial precedenti di questa serie, l'obiettivo è piuttosto quello di controllare il nostro motore con Python piuttosto che direttamente dalle righe di comando. Considero che ora hai le basi di Python, se non vai a leggere i tutorial precedenti, i collegamenti sono disponibili all'inizio di questo articolo.

Per controllare il nostro motore da uno script Python useremo ancora una volta lib Rpi.GPIO.

In Python e sul Pi, l'angolo del motore è calcolato come percentuale del ciclo. Questa percentuale è chiamata "Duty Cycle".

Un segnale di 0,5 ms corrisponde a 0 ° e un segnale di 2,5 ms a 180 °. Sapendo che il nostro ciclo è di 50 Hz, cioè 20ms, questo ci permette di calcolare il Duty Cycle per 0 ° e 180 ° in questo modo:

x = 0.5 / 20
y = 2.5 / 20

Troviamo quindi che il Duty Cycle corrispondente a 0 ° è 0,025, o 2,5% e che quello corrispondente a 180 ° è 0,125, o 12,5%.

Piccolo problema però, se questo valore è teoricamente buono, tende infatti ad innescare un giro completo del motore per 0 ° … Pertanto consiglio di utilizzare il 4% per 0 °. Il valore 12,5% per 180 è buono.

Per controllare il motore, dobbiamo solo impostare il pin 12 come segnale PWM e utilizzare le funzioni start e ChangeDutyCycle.

È quindi possibile creare un file servo.py e inserisci lì il codice seguente:

#!/usr/bin/env python3
#-- coding: utf-8 --
import RPi.GPIO as GPIO
import time


#Set function to calculate percent from angle
def angle_to_percent (angle) :
    if angle > 180 or angle < 0 :
        return False

    start = 4
    end = 12.5
    ratio = (end - start)/180 #Calcul ratio from angle to percent

    angle_as_percent = angle * ratio

    return start + angle_as_percent


GPIO.setmode(GPIO.BOARD) #Use Board numerotation mode
GPIO.setwarnings(False) #Disable warnings

#Use pin 12 for PWM signal
pwm_gpio = 12
frequence = 50
GPIO.setup(pwm_gpio, GPIO.OUT)
pwm = GPIO.PWM(pwm_gpio, frequence)

#Init at 0°
pwm.start(angle_to_percent(0))
time.sleep(1)

#Go at 90°
pwm.ChangeDutyCycle(angle_to_percent(90))
time.sleep(1)

#Finish at 180°
pwm.ChangeDutyCycle(angle_to_percent(180))
time.sleep(1)

#Close GPIO & cleanup
pwm.stop()
GPIO.cleanup()

Tutto quello che devi fare è eseguire lo script facendo:

python3 ./servo.py

Dovresti quindi vedere il tuo motore avviarsi a 0 °, quindi passare a 90 ° e infine fermarsi a 180 °.

Tutto quello che devi fare è adattare questo script alle tue esigenze!

Condividi
Newsletter
Autore:
Raspberry Pi FR
Unisciti alla comunità Raspberry Pi
Un computer da 35 euro ha già venduto 10 milioni di copie
ACQUISTA IL NUOVO RASPBERRY PI 4
Tutorial correlati
Connettiti al Raspberry Pi senza Internet con la porta seriale. Usa un lettore RFID con Raspberry Pi. Perché avrei dovuto spiegare Bitcoin a France Info piuttosto che a mia nonna? Come creare un router Tor con Raspberry Pi. Accendi e spegni un LED con Raspberry Pi e Python.
Nessun commento
Condividi
Iscriviti alla Newsletter
Iscriviti alla newsletter.
Ti è piaciuto questo articolo ?
Iscriviti e resta informato!