Cómo conectar un micro servo SG90 (posición 180 grados) a Raspberry Pi

En este pequeño tutorial veremos cómo conectar un micro servo SG90 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.

En este ejemplo usaremos el micro servo motor SG90, que cuenta con engranes de plástico, y para implementar la señal de control utilizaremos el paquete de python3 <RPi.GPIO>. Cabe mencionar que este servomotor se puede alimentar directamente del Pin 5V en nuestra tarjeta ya que no demanda demasiada corriente, sin embargo si utilizas otro servo o si deseas controlar más de un SG90 con la misma tarjeta te recomendamos utilizar una fuente externa.

Componentes Necesarios

  • Micro servo SG90
  • Raspberry Pi
  • Cables de conexión H-M

Diagrama de Conexiones

Raspberry Pi – Potenciometro – Micro Servo SG90 – 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 = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(servoPIN, GPIO.OUT)

p = GPIO.PWM(servoPIN, 50) # GPIO 17 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!