Neste artigo vou mostrar os passos básicos de como conectar um motor de passo 28BYJ-48 na Raspberry Pi sem o uso de bibliotecas, apenas acionando os pinos de controle do motor.

Raspberry Pi 2 e motor de passo 28BYJ-48

O Raspberry Pi 2 Model B é o modelo mais recente da linha Raspberry, com maior poder de processamento graças ao chip Broadcom quad-core BCM2836 de 900 MHz e 1 GB de memória. Na versão anterior, o Raspberry B+, o chip é single-core, BCM2835 rodando a 700 Mhz com memória de 512 MB.

Externamente, praticamente não há diferença entre a nova placa e a versão anterior, já que os conectores USB, ethernet, alimentação, HDMI e áudio seguem o mesmo layout.

Circuito Raspberry Pi e motor de passo 28BYJ-48

O motor de passo que vamos utilizar é o 28BYJ-48 com driver ULN2003. Esse driver utiliza transistores Darlington, permitindo que os pinos do Raspberry, que fornecem uma corrente muito baixa, possam controlar o motor de passo cuja exigência em termos de corrente é muito maior.

Assim, podemos ligar diretamente os pinos da  placa do motor de passo no Raspberry, na seguinte sequência:

  • IN1 no pino 40 (GPIO21) do Raspberry Pi 2
  • IN2 no pino 38 (GPIO20)
  • IN3 no pino 36 (GPIO16)
  • IN4 no pino 32 (GPIO12)

Você pode utilizar outras portas da GPIO do Raspberry para controlar o motor, mas não se esqueça de configurar essas portas no programa.

Circuito Raspberry Pi 2 e motor de passo 28BYJ-48 ULN2003

Para alimentação do motor/placa, vamos utilizar o pino 2 (5V)  e o pino 6 (GND).

Programa Controle de motor de passo – Python

O programa é baseado no original do site http://www.raspberrypi-spy.co.uk/ e não utiliza nenhuma biblioteca exclusiva para o motor, controlando diretamente os pinos da placa ULN2003 seguindo a sequência de ativação do motor em 8 passos, que já vimos em outros posts:

Motor de passo 28BYJ-48 Sequencia de ativação

Esta sequência está configurada entre as linhas 28 e 35 do programa. Nessa sequência, o motor gira no sentido horário. Invertendo a ordem (por meio da variável StepDir, linha 40), o motor gira no sentido anti-horário. Você pode controlar a velocidade alterando a linha 44 (WaitTime).

#Programa: Motor de passo 28BYJ-48 e Raspberry Pi 2
#Alteracoes e adaptacoes : Arduino e Cia
#
#Baseado no codigo original de Matt Hawkins
#http://www.raspberrypi-spy.co.uk/

#Carrega bibliotecas
import sys
import time
import RPi.GPIO as GPIO

#Utiliza numeros da GPIO ao inves
#da numeracao dos pinos
GPIO.setmode(GPIO.BCM)

#Pinos de conexao ao motor
#Pinos 40, 38, 36, 32
#GPIO21,GPIO20,GPIO16,GPIO12
StepPins = [21,20,16,12]

#Define os pinos como saida
for pin in StepPins:
  print "Setup pins"
  GPIO.setup(pin,GPIO.OUT)
  GPIO.output(pin, False)

#Sequencia de ativacao
Seq = [[1,0,0,0],
       [1,1,0,0],
       [0,1,0,0],
       [0,1,1,0],
       [0,0,1,0],
       [0,0,1,1],
       [0,0,0,1],
       [1,0,0,1]]
       
StepCount = len(Seq)-1

#Configura sentido de giro
StepDir = 2 # 1 ou 2 para sentido horario
            # -1 ou-2 para sentido anti-horario

#Tempo de espera
WaitTime = 1/float(1000)

#Inicializa variaveis
StepCounter = 0

while True:
  #Movimenta o motor e envia os dados de ativacao
  #para o display
  for pin in range(0, 4):
    xpin = StepPins[pin]
    print StepCounter
    print pin
    if Seq[StepCounter][pin]!=0:
      print " Step %i Enable %i" %(StepCounter,xpin)
      GPIO.output(xpin, True)
    else:
      GPIO.output(xpin, False)

  StepCounter += StepDir

  #Ao final da sequencia, reinicia o processo
  if (StepCounter>=StepCount):
    StepCounter = 0
  if (StepCounter<0):
    StepCounter = StepCount

  #Delay para movimentar o motor
  time.sleep(WaitTime)

Caso utilize outras portas da Raspberry para controle do motor, altere a linha 19 (StepPins) colocando o número das portas GPIO (não confundir com o número dos pinos). Em caso de dúvidas, verifique a disposição dos pinos na imagem abaixo:

GPIO Raspberry Pi 2

Gostou? Confira outros posts usando Raspberry Pi aqui mesmo no Arduino e Cia!

Avalie este post!