Servomoteur SG90

Cómo controlar un servomotor con la Raspberry Pi

Actualizado el 29 octubre 2019 - 0 Comentarios - , , , ,

ⓘ Este artículo puede haber sido traducido total o parcialmente utilizando herramientas automáticas. Pedimos disculpas por cualquier error que esto pueda causar.

Este tutorial es la tercera parte de un archivo dedicado a descubrir la electrónica con la Raspberry Pi. Si no lo has leído te aconsejo que consultes el primer tutorial para controlar un LED con la Raspberry Pi así como el segundo tutorial para usar un lector RFID con la Raspberry Pi.

Al iniciar la domótica, una necesidad clásica es controlar el movimiento físico en realidad desde un programa.

En este tutorial veremos cómo usar la Raspberry Pi para controlar un servomotor.

Accesorios para controlar un servomotor

Para poder seguir este tutorial y controlar un servomotor necesitaremos el siguiente material:

¿Cuál es la diferencia entre motor, servomotor y motor paso a paso?

Antes de empezar a conectar nuestro servomotor a nuestra Raspberry Pi, echemos un vistazo a los diferentes tipos de motores que se utilizan convencionalmente en electrónica.

Sin entrar en detalles, podemos dividir aproximadamente los motores utilizados en electrónica en tres categorías:

  • El motor: Funciona mientras esté alimentado. Es adecuado cuando se desea realizar un movimiento continuo que no requiere una gran precisión.
  • El motor paso a paso: gira en una especie de pequeños saltos sucesivos. Es decir que podrás pedirle que haga, por ejemplo, 50 saltos, o 112 saltos, que corresponderán a un determinado movimiento (por ejemplo un cuarto de vuelta). Es adecuado cuando se desea realizar un movimiento continuo con alta precisión (se utilizan por ejemplo en impresoras 3D).
  • El servomotor: Gira en un ángulo determinado, definido según una señal de tipo PWM (Pulse Width Modulation). A menudo, los motores pequeños son limitados y no pueden hacer más de una revolución. Por tanto, se utilizan más bien para un movimiento corto de gran precisión.
Diferentes tipos de motores
De izquierda a derecha, un motor, un motor paso a paso y un servomotor.

Todavía habría muchas otras cosas que decir sobre estos diferentes motores, pero luego entraremos en cuestiones mecánicas que van mucho más allá del alcance de nuestro tutorial.

En nuestro caso vamos a utilizar un servomotor porque es el motor de precisión más fácil de controlar desde una Raspberry Pi.

Conecta un servomotor a la Raspberry Pi

Lo primero que debemos hacer para poder utilizar nuestro servomotor es conectarlo a la Raspberry Pi.

Los actuadores tienen 3 conectores eléctricos. Los colores pueden cambiar dependiendo del fabricante, pero generalmente encontrarás algo como:

  • Un cable rojo, que sirve como fuente de alimentación.
  • Un cable negro o marrón, que sirve como GDN.
  • Otro cable, que se utiliza para transmitir la señal PWM controlando la posición del motor.

Por lo tanto, conectaremos estos diferentes cables a la Raspberry Pi, el cable rojo a un puerto GPIO de 5 voltios y el negro a un puerto GND.

Para el puerto PWM en cambio, necesariamente tendremos que conectarlo al pin GPIO 12 de la Raspberry Pi. De hecho, es el único pin GPIO que admite una señal PWM de forma predeterminada.

Entonces deberías tener un montaje como este.

Diagrama de montaje de un servomotor en la Raspberry Pi
Cable rojo -> GPIO 2, cable negro -> GPIO 6, cable amarillo -> GPIO 12

Tenga en cuenta que aquí estamos alimentando nuestro servomotor directamente desde la Raspberry Pi. Esto funciona porque estamos usando un servomotor muy pequeño, pero en un modelo más grande necesitaríamos una fuente de alimentación dedicada.

Controla el servomotor en las líneas de comando

Ahora que hemos conectado nuestro servomotor, podremos manejarlo directamente desde la línea de comandos de Raspberry Pi.

Para ello, comenzaremos activando el modo PWM en el puerto 12, es decir GPIO 18 según la numeración del procesador.

gpio -o mode 18 pwm

Y activaremos el modo Mark / Space de PWM, que permite tener una señal más adecuada a nuestro uso.

gpio pwm-ms

Finalmente configuraremos la duración de un ciclo, las frecuencias a utilizar, etc.

El servomotor está configurado para funcionar a una frecuencia de 50 Hz, es decir, 20 ms. La señal de Raspberry Pi funciona en otra frecuencia, 19,2 MHz. Usando estas dos cifras, podemos calcular un período y un rango (gracias a ramboise314.fr por la fórmula):

50 = 19.2 * 10^6 / 192 / 2000
Extracto de la documentación SG90.
La documentación del motor muestra un diagrama del período y ciclo de trabajo de un SG90.

Por lo tanto, configuraremos la Raspberry Pi para que use estos valores:

gpio pwmc 192
gpio pwmr 2000

¡Finalmente, podremos poner nuestro motor en movimiento! Tenga en cuenta que no pasamos un ángulo al servomotor, sino un número que se convertirá en un ángulo. Nuestro servomotor va de 0 ° a 180 °. Después de algunas pruebas, parecería que 0 ° corresponde a 230, 90 ° a 150 y 180 ° a 70.

Para enviar nuestro motor a 90 ° usaremos el comando:

gpio -g pwm 18 150

Y reemplazaremos 150 por 230 para ir a 0 °, 70 para ir a 180 ° o cualquier valor intermedio que necesitemos.

Tenga en cuenta que estos pequeños motores soportan un ángulo de 180 ° de forma precisa, pero tienen un pequeño margen que puede hacer que giren 190 ° o 200 ° e incluso que den un giro completo si pones un valor suficientemente bajo. Es específico para cada modelo de motor.

Conduce el servomotor con Python

Al igual que con los tutoriales anteriores de esta serie, el objetivo es más bien controlar nuestro motor con Python en lugar de hacerlo directamente desde las líneas de comando. Considero que ahora tienes los conceptos básicos de Python, si no ve a leer los tutoriales anteriores, los enlaces están disponibles al principio de este artículo.

Para controlar nuestro motor desde un script de Python usaremos nuevamente la biblioteca Rpi.GPIO.

En Python y en Pi, el ángulo del motor se calcula como un porcentaje del ciclo. Este porcentaje se denomina "ciclo de trabajo".

Una señal de 0.5ms corresponde a 0 ° y una señal de 2.5ms a 180 °. Sabiendo que nuestro ciclo es de 50 Hz, es decir, 20 ms, esto nos permite calcular el ciclo de trabajo para 0 ° y 180 ° así:

x = 0.5 / 20
y = 2.5 / 20

Luego encontramos que el ciclo de trabajo correspondiente a 0 ° es 0.025, o 2.5% y que el correspondiente a 180 ° es 0.125, o 12.5%.

Sin embargo, un pequeño problema, si este valor es teóricamente bueno, de hecho tiende a activar una revolución completa del motor para 0 ° … Por lo tanto, le recomiendo que use 4% para 0 °. El valor del 12,5% para 180 es bueno.

Para controlar el motor, solo necesitamos configurar el pin 12 como nuestra señal PWM y usar las funciones start y ChangeDutyCycle.

Por tanto, puede crear un archivo servo.py y ponga el siguiente código allí:

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

Todo lo que tienes que hacer es ejecutar el script haciendo:

python3 ./servo.py

Luego, debería ver que el motor arranca a 0 °, luego cambia a 90 ° y finalmente se detiene a 180 °.

¡Todo lo que tiene que hacer es adaptar este script a sus propias necesidades!

Compartir
Boletin informativo
Autor:
Raspberry Pi FR
Únete a la comunidad de Raspberry Pi
Un ordenador de 35$ ya vendió 10 millones de copias
COMPRAR LA NUEVA RASPBERRY PI 4
Tutoriales relacionados
Compre la Raspberry Pi 4 y sus accesorios, las trampas que debe evitar. Lanzamiento de la nueva Raspberry Pi 3B, ¿qué novedad, qué precio, dónde comprarla? Apague el LED de la cámara para Raspberry Pi. ¡Raspbian France cambia de nombre y se convierte en Raspberry Pi FR! ¿Por qué debería haber explicado Bitcoin a France Info en lugar de a mi abuela?
No hay comentarios
Compartir
Inscríbase al boletín
Suscríbete a la newsletter.
Did you like this article ?
Subscribe and stay informed!