En este pequeño tutorial veremos cómo conectar un motor a pasos a una tarjeta Raspberry Pi, también encontrarás un código de programación para tus primeras pruebas.
Este ejemplo está pensado para usar un motor a pasos de imanes permanentes bipolar, ya que estos son los más comunes en proyectos pequeños de electrónica. Si deseas saber más sobre como se clasifican los motores a pasos te recomendamos: Motores a pasos… ¿unipolares o bipolares?
En este caso utilizaremos el Motor a pasos 5v – 28BYJ-48, dicho motor es del tipo unipolar, sin embargo al utilizar solo 4 de sus terminales y omitir el uso de una de ellas el motor puede funcionar como bipolar.
Un motor a pasos bipolar cuenta con 2 bobinas, 2 cables/terminales para cada una. Debido a la configuración de las bobinas la corriente puede fluir en ambos sentidos por lo que se requiere de una etapa de potencia que permita esto. Nosotros utilizaremos el puente H L293D.
Componentes Necesarios
- Motor a pasos 5v – 28BYJ-48
- Raspberry Pi
- Puente H L293D
- Jack de 2.1mm Terminal de Barril a Terminal de Tornillo
- Eliminador 5V, mínimo 1A – Terminal de Barril 2.1mm
- Protoboard chica
- Cables para conexión M-M y H-M
Diagrama de Conexiones

Código de Python3
Copiamos el siguiente código de ejemplo de Adafruit a un script de Python y lo ejecutamos con Python3 para observar el movimiento del motor según los parámetros a ingresar.
import time
import board
import digitalio
enable_pin = digitalio.DigitalInOut(board.D18)
coil_A_1_pin = digitalio.DigitalInOut(board.D15)
coil_A_2_pin = digitalio.DigitalInOut(board.D14)
coil_B_1_pin = digitalio.DigitalInOut(board.D23)
coil_B_2_pin = digitalio.DigitalInOut(board.D24)
enable_pin.direction = digitalio.Direction.OUTPUT
coil_A_1_pin.direction = digitalio.Direction.OUTPUT
coil_A_2_pin.direction = digitalio.Direction.OUTPUT
coil_B_1_pin.direction = digitalio.Direction.OUTPUT
coil_B_2_pin.direction = digitalio.Direction.OUTPUT
enable_pin.value = True
def forward(delay, steps):
i = 0
while i in range(0, steps):
setStep(1, 0, 1, 0)
time.sleep(delay)
setStep(0, 1, 1, 0)
time.sleep(delay)
setStep(0, 1, 0, 1)
time.sleep(delay)
setStep(1, 0, 0, 1)
time.sleep(delay)
i += 1
def backwards(delay, steps):
i = 0
while i in range(0, steps):
setStep(1, 0, 0, 1)
time.sleep(delay)
setStep(0, 1, 0, 1)
time.sleep(delay)
setStep(0, 1, 1, 0)
time.sleep(delay)
setStep(1, 0, 1, 0)
time.sleep(delay)
i += 1
def setStep(w1, w2, w3, w4):
coil_A_1_pin.value = w1
coil_A_2_pin.value = w2
coil_B_1_pin.value = w3
coil_B_2_pin.value = w4
while True:
user_delay = input("Delay between steps (milliseconds)?")
user_steps = input("How many steps forward? ")
forward(int(user_delay) / 1000.0, int(user_steps))
user_steps = input("How many steps backwards? ")
backwards(int(user_delay) / 1000.0, int(user_steps))
¡Sigue explorando!
Referencias: