Como ligar o motor de passo 28BYJ-48 na Raspberry Pi
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.
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.
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:
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:
Gostou? Confira outros posts usando Raspberry Pi aqui mesmo no Arduino e Cia!
Fiz o experimento, porém o motor está girando tão lento, que é quase imperceptível ver o eixo girar. Isso é normal?????
Boa noite Fábio,
É o mesmo motor que eu usei no post ?
Abraço!
tbm usei o mesmo motor. Estou com o mesmo problema
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.
a minha velocidade tbm ficou assim… vc conseguiu ajeitar?
Boa noite! o experimento está reiniciando, o cartão de memoria é de 8 gb. Alguém sugestão?
pode ser a alimentaçao. No meu estava assim tbm. ai eu troquei a fonte e melhorou
amigo bom dia, por favor qual fonte voce esta usando para funcionar esse motor ?? parece que o meu fica reiniciando !! meu Raspberry pi 2
Testei com minha fonte de bancada que fornece até 5A e funcionou bem.
Olá! Fiz o experimento mas quando executei a programaçao o motor não girou.
É possivel ligar o motor em uma fonte externa?
Boa tarde, a linha Stepdir vai controlar o sentido da rotação do motor de passos, mas se por acaso eu quiser ligar um segundo motor, eu poderia colocar um stepins2 com os novos endereços e então ligar esse motor, mas o stepdir serviria para os dois motores? Ou posso criar um stepdir2?
Boa tarde, a linha Stepdir vai controlar o sentido da rotação do motor de passos, mas se por acaso eu quiser ligar um segundo motor, eu poderia colocar um stepins2 com os novos endereços e então ligar esse motor, mas o stepdir serviria para os dois motores? Ou posso criar um stepdir2?
Boa noite!
Estou a fazer um projecto escolar e pretendo controlar motor de passo 28BYJ-48 com raspberry pi 3 model B. Como configurar e automatizar a movimentação do motor de passos.
ola, preciso sair do laço do while e fazer o motor parar quando for False
como faço ?
Oi Jocemir,
Mas você quer usar alguma tecla para sair do laço? Ou setar alguma condição?
Adilson