Cómo conectar un Motor a Pasos a Raspberry Pi

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

Raspberry Pi – L293D – 28BYJ-48

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!