Come controllare un servomotore con Raspberry Pi 4

servomotore con Raspberry Pi 4

Cos’è un servomotore?

Un servomotore o servo è un dispositivo elettromeccanico che permette un controllo molto preciso della velocità e dello spostamento angolare del proprio asse, generalmente limitato a 180 gradi. È composto principalmente da un motore a corrente continua, un riduttore di velocità, un albero, un circuito di controllo e un meccanismo di feedback, solitamente un potenziometro.

Come funziona un servomotore?

Un microcontrollore, ad esempio un Raspberry Pi 4, invia un impulso elettrico (PWM) al servomotore. Questo legge l’ampiezza dell’impulso, attraverso il suo circuito di controllo, e aziona il motore CC. Il riduttore di velocità si attiva e riduce la velocità di rotazione dell’albero. Insieme all’albero, ruota la manopola del potenziometro cambiando la sua tensione di uscita. Questo valore viene utilizzato dal circuito di controllo per calcolare la posizione, la direzione e la velocità angolare dell’asse.

Successivamente vedremo come ruotare un servomotore di 180 gradi senza interruzioni utilizzando un Raspberry Pi 4.

Materiale necessario

Per questo progetto utilizzeremo un Raspberry Pi 4 e un Micro Servo Sunfunder 9g SG90.

Micro Servomotore Sunfunder 9g SG9

Cablaggio del circuito

I servomotori sono generalmente dotati di tre diversi fili colorati: arancione per il controllo; rosso per il cibo; e marrone per terra.

Collegare i cavi del servomotore ai pin del Raspberry come segue: il cavo arancione al pin 23 del GPIO; il filo nero con uno qualsiasi dei pin GND; e il filo rosso con il pin 3.3V.

Codice Python per ruotare un servo di 180 gradi avanti e indietro

import RPi.GPIO as GPIO
import time

SERVO_MIN_PULSE = 500
SERVO_MAX_PULSE = 2500
Servo = 23

def map(value, inMin, inMax, outMin, outMax):
    return (outMax - outMin) * (value - inMin) / (inMax - inMin) + outMin

def setup():
    global p
    GPIO.setmode(GPIO.BCM)       
    GPIO.setup(Servo, GPIO.OUT)  
    GPIO.output(Servo, GPIO.LOW) 
    p = GPIO.PWM(Servo, 50)     
    p.start(0)                    

def setAngle(angle):      
    angle = max(0, min(180, angle))
    pulse_width = map(angle, 0, 180, SERVO_MIN_PULSE, SERVO_MAX_PULSE)
    pwm = map(pulse_width, 0, 20000, 0, 100)
    p.ChangeDutyCycle(pwm)
def loop():
    while True:
        for i in range(0, 181, 5):   
            setAngle(i)    
            time.sleep(0.002)
        time.sleep(1)
        for i in range(180, -1, -5): 
            setAngle(i)
            time.sleep(0.001)
        time.sleep(1)
def destroy():
    p.stop()
    GPIO.cleanup()

if __name__ == '__main__':    
    setup()
    try:
        loop()
    except KeyboardInterrupt:
        destroy()

Codice SunFounder

Per eseguire il codice, vai al desktop del sistema operativo Raspberry Pi. Fare clic sul menu Raspberry > Programmazione > mu. Copia e incolla il codice. Fai clic su Save e salva il file con estensione .py. Infine, fai clic su Run.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Torna in alto