El SG90 servo motor es un servomotor pequeño y ligero comúnmente usado en robótica, automatización y proyectos DIY. Permite un control preciso de la posición angular usando Modulación por Ancho de Pulso (PWM). Esta guía te mostrará cómo controlar un SG90 servo motor con una Raspberry Pi usando Python.
Qué necesitarás
- Raspberry Pi (cualquier modelo con soporte GPIO, p. ej., Pi 3, Pi 4)
- SG90 Servo Motor
- Fuente de alimentación externa (5V, opcional para múltiples servos)
- Protoboard y cables jumper
- Python instalado en la Raspberry Pi
Paso 1: Conexión del SG90 Servo a la Raspberry Pi
El SG90 servo motor tiene tres pines:
| SG90 Pin | Raspberry Pi Pin | Función |
|---|---|---|
| VCC (Rojo) | 5V (Pin 2) | Suministro de energía |
| GND (Marrón) | GND (Pin 6) | Tierra |
| Signal (Naranja) | GPIO18 (Pin 12) | Control de señal PWM |
Nota: Si usas múltiples servos, utiliza una fuente de alimentación externa de 5V para evitar sobrecargar el pin de 5V de la Raspberry Pi.
Paso 2: Habilitar PWM en la Raspberry Pi
La Raspberry Pi genera señales PWM para controlar la posición del servo.
- Instala la librería Raspberry Pi GPIO (si no está ya instalada):
sudo apt update && sudo apt install python3-rpi.gpio - Abre un editor de scripts Python:
nano servo_control.py - Copia el siguiente script Python para controlar el SG90 servo motor:
Paso 3: Código Python para controlar el servo
import RPi.GPIO as GPIO
import time
# Configurar el pin GPIO para PWM
SERVO_PIN = 18 # Usar GPIO18 (Pin 12)
GPIO.setmode(GPIO.BCM)
GPIO.setup(SERVO_PIN, GPIO.OUT)
# Iniciar PWM con frecuencia de 50Hz
pwm = GPIO.PWM(SERVO_PIN, 50)
pwm.start(0)
def set_angle(angle):
duty_cycle = (angle / 18) + 2.5 # Convertir ángulo a ciclo de trabajo
GPIO.output(SERVO_PIN, True)
pwm.ChangeDutyCycle(duty_cycle)
time.sleep(0.5) # Esperar a que el servo se mueva
GPIO.output(SERVO_PIN, False)
pwm.ChangeDutyCycle(0)
try:
while True:
angle = int(input("Introduce el ángulo (0-180): "))
if 0 <= angle <= 180:
set_angle(angle)
else:
print("¡Ángulo inválido! Introduce un valor entre 0 y 180.")
except KeyboardInterrupt:
print("Saliendo...")
pwm.stop()
GPIO.cleanup()
Paso 4: Ejecutar el script de control del servo
-
Guarda el script y sal:
- Pulsa CTRL+X, luego Y, luego ENTER.
-
Ejecuta el script:
python3 servo_control.py -
Introduce ángulos entre 0 y 180 para mover el servo.
Paso 5: Entender PWM para el control del servo
- Frecuencia PWM: El SG90 funciona a 50Hz.
- Cálculo del ciclo de trabajo:
- 0° → 2.5% Ciclo de trabajo
- 90° → 7.5% Ciclo de trabajo
- 180° → 12.5% Ciclo de trabajo
-
Fórmula:
duty_cycle = (angle / 18) + 2.5
Paso 6: Aplicaciones del SG90 Servo con Raspberry Pi
- Brazos robóticos – Controlar articulaciones para movimiento.
- Puertas y cerraduras automatizadas – Mecanismos de apertura/cierre usando un servo.
- Sistemas Pan-Tilt para cámaras – Mover cámaras para vigilancia o fotografía.
- Automatización del hogar inteligente – Controlar palancas, cerraduras y interruptores de forma remota.
Solución de problemas
-
¿El servo no se mueve?
- Asegúrate de la conexión correcta (VCC, GND y GPIO18 para señal).
- Si usas múltiples servos, utiliza una fuente de alimentación externa de 5V.
-
¿Movimientos erráticos?
- Asegura una alimentación estable; usa condensadores (100µF) si es necesario.
- Usa control PWM de mayor precisión, como un módulo PCA9685 PWM para múltiples servos.
-
¿Error de Permiso Denegado?
- Ejecuta el script con
sudo:sudo python3 servo_control.py
- Ejecuta el script con
Conclusión
El SG90 servo motor es una excelente manera de añadir control de movimiento a proyectos con Raspberry Pi. Usando señales PWM, puedes controlar con precisión la posición del servo para robótica, automatización y aplicaciones IoT. ¡Experimenta con diferentes ángulos y aplicaciones para desbloquear todo su potencial! 🚀


1 comentario
Hi,
I’m considering buying some servos for a robotics and I keep seeing “analogue” and “digital” servos. If I’m using analogue servos do I need an ADC for each one, or can I plug them straight into the pi? is there even any difference? I assume this guide is for digital servos, but the pictures don’t have the “digital” label some do online