Cómo controlar un servomotor con Raspberry Pi 4

Raspberry Pi 4 y servomotor SunFounder

¿Qué es un servomotor?

Un servomotor o servo es un dispositivo electromecánico que permite controlar con mucha precisión la velocidad y el desplazamiento angular de su eje, limitado por lo general a 180 grados. Se compone principalmente de un motor DC, un reductor de velocidad, un eje, un circuito de control y un mecanismo de feedback, usualmente un potenciómetro.

Cómo funciona un servomotor

Un microcontrolador, por ejemplo una Raspberry Pi 4, envía un pulso electrico (PWM) al servomotor. Este lee la amplitud del pulso, a través de su circuito de control, y acciona el motor DC. Se pone enmarcha el reductor de velocidad. La rotación del eje hace girar la perilla del potenciómetro modificando su voltaje de salida. Este valor es utilizado por el circuito de control para calcular la posición, dirección y velocidad angular del eje.

A continuación veremos cómo hacer girar un servo 180 grados sin interrupción usando una Raspberry Pi 4.

Material necesario

Para este proyecto utilizaremos una Raspberry Pi 4 y un Micro Servo Sunfunder 9g SG90.

Micro Servo Sunfunder 9g SG90

Cableado del circuito

Los servomotores suelen venir con tres cables de colores distintos: anaranjado para el control; rojo para la alimentación; y marrón para la tierra.

Conecta los cables del servomotor con los pines de la Raspberry de la siguiente manera: el cable anaranjado con el pin GPIO 23; el cable negro con cualquiera de los pines GND; y el cable rojo con el pin 3.3V.

Código Python para hacer girar un servo 180 grados de ida y vuelta

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()

Código de SunFounder

Para ejecutar el código, ve al escritorio de Raspberry Pi OS. Haz clic en el menú de Raspberry > Programming > mu. Copia y pega el código. Haz clic en Save y guarda el archivo con extensión .py. Por último, haz clic en Run.

Ver nuestro vídeo en YouTube: Haciendo girar un servomotor con Raspberry Pi 4

TAMBIÉN TE PUEDE INTERESAR

Comparte esta entrada en tus redes sociales

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Ir arriba