Cómo conectar un servo MG995 o SG5010 (posición 180 grados) a Raspberry Pi

En este pequeño tutorial veremos cómo conectar un servo mediano de posición con rango de 180 grados a una tarjeta Raspberry Pi, también encontrarás un código de programación para tus primeras pruebas.

Los servomotores son dispositivos electromecánicos que tienen la capacidad de controlar la posición angular de su eje, su funcionamiento consiste en recibir la información del ángulo deseado a través del ancho de pulso de una señal PWM para llevar al eje a dicha posición, por lo regular constan de un motor de corriente directa, un tren de engranes reductores y una tarjeta de control, todo contenido en una caja de plástico.

Este ejemplo está pensado para los servos MG995 y SG5010 pero es posible que funcione para muchos modelos más, para implementar la señal de control utilizaremos el paquete de python3 <RPi.GPIO>. Cabe mencionar que este servomotor NO se puede alimentar directamente del Pin 5V en nuestra tarjeta ya que demanda demasiada corriente, recomendamos siempre utilizar una fuente externa.

Componentes Necesarios

  • Micro servo MG995 o SG5010
  • Raspberry Pi
  • Protoboard chica
  • Cables de conexión M-M y H-M
  • Jack de 2.1mm Terminal de Barril a Terminal de Tornillo
  • Eliminador 5V, mínimo 1A – Terminal de Barril 2.1mm

Diagrama de Conexiones

Raspberry Pi – Potenciometro – Micro Servo MG995 o SG50100 – Protoboard

Código de Python3

Copiamos el siguiente código un script de Python y lo ejecutamos con Python3 para observar las diferentes posiciones angulares del eje del servo.



import RPi.GPIO as GPIO
import time

servoPIN = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(servoPIN, GPIO.OUT)

p = GPIO.PWM(servoPIN, 50) # GPIO 18 for PWM with 50Hz
p.start(2.5) 
try:
  while True:
    p.ChangeDutyCycle(5)
    time.sleep(0.5)
    p.ChangeDutyCycle(7.5)
    time.sleep(0.5)
    p.ChangeDutyCycle(10)
    time.sleep(0.5)
    p.ChangeDutyCycle(12.5)
    time.sleep(0.5)
    p.ChangeDutyCycle(10)
    time.sleep(0.5)
    p.ChangeDutyCycle(7.5)
    time.sleep(0.5)
    p.ChangeDutyCycle(5)
    time.sleep(0.5)
    p.ChangeDutyCycle(2.5)
    time.sleep(0.5)
except KeyboardInterrupt:
  p.stop()
  GPIO.cleanup()

¡Sigue explorando!