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!