26 maio 2015

Como ligar o motor de passo 28BYJ-48 no Raspberry Pi 2

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


como ligar o motor de passo 28BYJ-48 no Raspberry Pi 2

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 2 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. Para alimentação do motor/placa, vamos utilizar o pino 2 (5V)  e o pino 6 (GND).

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

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:



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).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#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 do 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

8 comentários:

  1. Fiz o experimento, porém o motor está girando tão lento, que é quase imperceptível ver o eixo girar. Isso é normal?????

    ResponderExcluir
    Respostas
    1. Boa noite Fábio,

      É o mesmo motor que eu usei no post ?

      Abraço!

      Excluir
  2. Boa noite, É sim... eu tentei modificar o tempo, mas não deu certo, para qualquer valor que eu colocava a velocidade parecia a mesma.
    eu tinha achado um post usando o windows IOT, com outra forma de programação, ai deu certo, ficou mais veloz.

    ResponderExcluir
  3. Boa noite! o experimento está reiniciando, o cartão de memoria é de 8 gb. Alguém sugestão?

    ResponderExcluir
  4. pode ser a alimentaçao. No meu estava assim tbm. ai eu troquei a fonte e melhorou

    ResponderExcluir
    Respostas
    1. amigo bom dia, por favor qual fonte voce esta usando para funcionar esse motor ?? parece que o meu fica reiniciando !! meu Raspberry pi 2

      Excluir
  5. Olá! Fiz o experimento mas quando executei a programaçao o motor não girou.

    ResponderExcluir
  6. É possivel ligar o motor em uma fonte externa?

    ResponderExcluir