Controlando motor de passo 28BYJ-48 com o Arduino Motor Shield L293D
Conforme prometido no artigo Controlando motores DC com o Arduino Motor Shield L293D, hoje vou apresentar o esquema de funcionamento desse shield com o nosso também já conhecido Motor de Passo 28BYJ-48 Arduino (imagem abaixo).
Atualizado: Controle também servo motores com o Motor Shield L293D. Veja no artigo Controlando servo motor com o Motor Shield L293D.
O motor de passo 28BYJ-48 funciona com alimentação de 5V e possui uma redução de 1/64. Essa redução faz com que o número de passos necessários para que o motor dê uma volta completa seja de 4096, ou no modo de ativação de 4 passos, esse número cai pela metade, para 2048.
Modo de ativação de 8 e de 4 passos
O motor de passo pode funcionar em 2 modos de ativação: 8 passos (half-mode) ou 4 passos (full step).
No modo de ativação de 8 passos, a sequência de acionamento das bobinas segue a tabela abaixo. Primeiro é acionada uma bobina, depois duas, depois uma, depois duas novamente, e assim por diante, até se completarem os 8 passos:
Já no modo de 4 passos, são acionadas 2 bobinas de cada vez, o que reduz o número de acionamentos necessários para movimentar o motor:
O modo de acionamento de 4 passos é utilizado pela biblioteca padrão do Arduino, e teoricamente imprime mais força ao motor, já que sempre teremos duas bobinas sendo acionadas ao mesmo tempo.
Relembrando um pouco sobre o funcionamento do Motor Shield L293D, vimos que ele pode controlar 2 servos, e até 4 motores DC ou 2 motores de passo.
Para controlar motores de passo, utilizamos os conectores laterais, os mesmos usados para controlar motores DC.
Conexão dos motores no Arduino Motor Shield
Vamos ligar não só um, mas dois motores de passo 28BYJ-48 nessa placa (muito útil para um robô, não ?). Atenção para a ordem de ligação dos fios desse motor, que deve ser a mesma do circuito abaixo.
A alimentação será feita por meio dos 5V do próprio Arduino Uno que usaremos nos testes, por isso vamos manter o jumper PWR na placa.
Programa e biblioteca AFMotor
A biblioteca utilizada para controlar os motores de passo é a AFMotor, que você pode baixar nesse link. Descompacte o arquivo, renomeie a pasta para AFMotor e coloque-a dentro da pasta LIBRARIES da IDE do seu Arduino.
Para controle de motor de passo, os principais comandos do programa são :
- AF_Stepper nome(passos, porta) – Define o nome dado ao motor de passo, o número total de passos desse motor (para dar uma volta completa) e a porta à qual esse motor está ligado. A porta pode ter o valor 1 para motores ligados no conector do lado esquerdo (M1 / GND / M2), ou o valor 2 para motores ligados no conector do lado direito (M3 / GND / M4)
- nome.step(numero_passos, direção, tipo_passo) – São os comandos de movimentação do motor identificado por nome. Numero_passos é a quantidade de passos que o motor vai girar ao executar o comando. Os comandos de direção podem ser o FORWARD (gira o motor no sentido horário) ou BACKWARD (gira o motor no sentido anti-horário). Tipo_passo determina de que maneira as bobinas serão acionadas, sendo que pode ser definido como SINGLE (uma bobina por vez), DOUBLE (duas bobinas por vez), INTERLEAVE (alternando entre 1 e 2 bobinas, aumentando a precisão) e MICROSTEPPING, que rotaciona o motor de uma forma mais suave e precisa. Não são todos os motores de passo que aceitam os modos INTERLEAVE e o MICROSTEPPING.
O programa gira os dois motores de passo, alternadamente, um em cada direção. A cada ciclo, o motor se move na quantidade de graus definida na variável angulo, no início do programa.
// Programa : Controlando 2 motores de passo 28BYJ-48 com // Arduino Motor Shield L293D // Autor : Arduino e Cia // Carrega a biblioteca AFMotor #include <AFMotor.h> //Numero de passos para 1 rotacao total double passos_total = 2048; // Define as portas para os motores // Valor 1 para motor em M1/M2 e 2 para motor em M3/M4 int porta_motor_1 = 1; int porta_motor_2 = 2; // Angulo de rotacao do eixo int angulo = 45; // Armazena o numero de passos que o motor vai girar double numero_de_passos = 0; // Define os parametros do motor 1 AF_Stepper motor_de_passo_1(passos_total, porta_motor_1); // Define os parametros do motor 2 AF_Stepper motor_de_passo_2(passos_total, porta_motor_2); void setup() { // Define a velocidade de rotacao do motor 1 motor_de_passo_1.setSpeed(10); // Define a velocidade de rotacao do motor 2 motor_de_passo_2.setSpeed(10); // Inicializa a serial Serial.begin(9600); } void loop() { //Calcula a quantidade de passos, baseado no angulo determinado numero_de_passos = angulo / (360 / passos_total); //Mostra no serial monitor o numero de passos calculados Serial.print("Numero de passos : "); Serial.println(numero_de_passos); //Move o motor 1. Use FORWARD para sentido horario, //BACKWARD para anti-horario motor_de_passo_1.step(numero_de_passos, FORWARD, SINGLE); motor_de_passo_1.release(); delay(10); //Move o motor 1. Use FORWARD para sentido horario, //BACKWARD para anti-horario motor_de_passo_2.step(numero_de_passos, BACKWARD, SINGLE); motor_de_passo_2.release(); delay(500); }
O funcionamento dessa ligação e do programa apresentados você confere no vídeo abaixo:
Gostou? Confira outros posts usando motores aqui mesmo no Arduino e Cia!
É possível implementar o projeto com Arduíno Uno?
Boa tarde,
Sim, este é um shield que funciona com o Arduino Uno. Agora se você quer o mesmo controle de 2 motores sem usar o shield, pode conferir o post em que eu uso a biblioteca CustomStepper :
http://www.arduinoecia.com.br/2014/04/controlando-motor-de-passo-28byj-48.html
Abraço !
amigo! para fazer uma plotter com esses dois motores o adruino eo ol293 onde consigo o programma?
Boa tarde Marcone,
Eu não tenho nenhum projeto ainda nesse sentido. Talvez esses motores sejam um pouco fracos, dependendo do que você quer montar.
Abraço !
Boa tarde,
Gostaria de saber onde eu encontro esses suportes para os motores de passo. Estou fazendo meu trabalho de conclusão de curso e seu site está sendo muito útil pra mim. Abraço
Bom dia Maurício,
Fico contente em ajudar. Esse suporte eu mesmo faço e vendo. Por favor entre em contato comigo utilizando o formulário de contato no lado direito da página.
Abraço e obrigado !
Boa tarde
Qual programação eu faço para dois motores dc normais, e um sensor infravermelho sharp. Me ajude!!!
Boa noite,
Que tipo de circuito você está montando ? Que movimento vai fazer com os motores quando o sensor for acionado ?
Abraço.
Quando que vocês vão fazer o tutorial para controlar os servos com esse shield?
Bom dia Eric,
Sai na próxima semana, dia 25. Aguardo sua visita ! 🙂
Abraço.
Boa tarde,parabéns pelo site, eu gostaria de saber qual é o valor máximo de velocidade que pode ser colocado no programa?
Boa tarde Vitor,
Obrigado. O valor máximo da velocidade é definido pela capacidade do motor, já que o comando define quantos RPM o motor suporta :
motor.setSpeed(10) //10 RPM
motor.setSpeed(20) //20 RPM
Abraço !
Olá. Ótimo tutorial.
Quero fazer algo parecido, porém o motor que tenho a tensão é 12VDC.
Como posso fazer a ligação?
Boa tarde Marcus,
A ligação é a mesma. Apenas retire o jumper e ligue a fonte de 12V ao conector EXT_PWR (próximo ao jumper).
Abraço !
Ola. Gostaria de saber, como faço para os dois motores funcionarem simultaneamente?
Bom dia Gustavo,
Ainda não testei nessa configuração, você já tentou colocar os comandos para acionamento dos motores um logo após o outro, mais ou menos dessa maneira ?
motor_de_passo_1.step(numero_de_passos, FORWARD, SINGLE);
motor_de_passo_2.step(numero_de_passos, BACKWARD, SINGLE);
Abraço !
Encontrei a resposta, na biblioteca AFMotor.h tem a função
Motor1.onestep(FORWARD, DOUBLE);
diferente da step ele não precisa terminar a rotação pra começar a outra. Então tem como executar uma logo após a outra.
motor1.onestep(BACKWARD, DOUBLE);
motor2.onestep(BACKWARD, DOUBLE);
No site da Adafruit tem toda a explicação de como usar a biblioteca.
https://learn.adafruit.co…f-stepper-class
Oi Gabriel!
Show! Obrigado! 🙂
Abraço.
Adilson
Olá, parabéns pelo site!!
É possível fazer com que movimente os dois motores ao mesmo tempo, como se fosse um carrinho?
Desde já agradeço!
Bom dia Eduardo !
Ainda não testei isso com esse shield, mas creio que não tenha problemas.
Abraço !
Gostaria de saber como ligar um motor de passo 6 fios nesse sield
Boa tarde,
Eu ainda não testei esse tipo de motor, mas esse tutorial aqui pode te ajudar :
http://www.instructables.com/id/Arduino-6-wire-Stepper-Motor-Tutorial/all/?lang=pt
Abraço !
Favor esclarecer se o fio vermelho do Motor vai ligado em 5V, conforme indicado na tabela de Fios, ou no GND conforme mostra a figura do shield? Obrigado e parabens pelo artigo.
Boa noite,
Não sei informar qual é a "mágica" que o shield faz, ou se é algum outro esquema de ligação que ele usa internamente, mas tanto o esquema na tabela como a ligação no shield estão corretas. O pino utilizando é realmente o GND.
Abraço !
Gostaria de comandar um Motor de Passos com Rfid, é possível? se é possível como fazer?
Boa tarde,
Eu tenho um projeto com RFID utilizando servo motor, você pode utilizar o programa como base e alterá-lo para acionar o motor de passo :
http://www.arduinoecia.com.br/2014/12/controle-de-acesso-modulo-rfid-rc522.html
Abraço !
Boa tarde, preciso de uma ajuda… Eu tenho um projeto e nele tenho que fazer o controle de 2 motores DC e 2 motores de passo, poderia me ajudar ? Qual hardware necessário ? o que é mais viável, ou mais simples de executar por alguém que está iniciando com Arduíno ?
Desde de já agradeço !!!!
Legal, usando essa shield posso ligar uma bateria externa, se eu liga um moto que suporte 12v e uma bateria para a mesma, seria preciso a programação para gira velozmente o motor?
Oi por favor pode me ajudar tenho um arduino mega2560 e preciso fazer funcionar dois motores de passo do modelo ULN2003 já possuo um vou comprar mais um o que mais precisarei pode me indicar?
Oi Richard,
Você tem o kit motor + ULN2003 ? Basta comprar mais um kit e alterar as portas na programação.
Abraço!
Bom dia, existe algum software para controle deles, tipo o grbl? que seja compativel com o l293d
amigo como eu faria pra ligar esse motor no CNC SHILD ja que a ligação dos motores eles precisam de 4 fios e esse motor tem 5. qual seria a ligação obrigado 😀
Olá, amigo, boa noite! Primeiramente, parabéns pelo seu site. Pretendo fazer um projeto, utilizando motor de passo encontrado em dvd. Saberia me dizer se as conexões podem ser feitas do mesmo modo do mostrado no seu projeto? ele tem 4 fios.Obrigado
Oi Silvano!
Obrigado. Infelizmente vou ficar te devendo essa resposta, pelo menos até arrumar um desses motores pra testar. 🙂
Abraço!
Você tem algum tutorial sobre como controlar motores de passo com o shield cnc e driver A4988?
Olá. No caso de precisar controlar 4 motores de passo. Você sabe se isso é possível? Conseguiria ligar dois Shield desses no mesmo arduino e controlar os 4?
Queria Saber se alem dos dois motores de passo, ainda consigo incrementar um servo motor com esse shild
Oi Francisco,
Tranquilamente. Esse shield tem conectores para até 2 servo motores. 🙂
Abraço!
Adilson
Boa tarde, se eu for utilizar apenas o l293D puro, consigo utilizar essa biblioteca ? Obg
Bom dia, posso fazer uso dessa biblioteca utilizando apenas um L293D puro ? Sem ser o shield. Obg
Oi Diego,
Para uso do chip L293D, eu recomendo que você dê uma olhada nesse post aqui:
http://www.arduinoecia.com.br/2014/04/controle-de-motor-cc-com-o-l293d-ponte-h.html
Abraço!
Adilson
Boa tarde, estou precisando montar um programa para fazer com que um motor de passo puxe uma corda com um comando por bluetooth usando o Arduino pro mini, esse programa pode ser adaptado para esse propósito?
Boa noite,
Tenho alguns posts sobre utilização de Bluetooth com Arduino, creio que tenha o que vc precisa.
Abraço!
Adilson
Olá,
Existe alguma solução para controlar 6 motores de passo? Preciso que desçam 6 caixas de som quando acionado o home theater, simultaneamente.
Obrigado
Oi Leandro,
Desconheço algum shield que aceite vários motores de passo, mas tem um shield da Adafruit que aceita vários servo motores, não sei se serviria para o seu projeto: https://www.makerhero.com/produto/servo-motor-shield-16-canais-para-arduino/
Abraço!
Adilson
ola Como posso fazer uma sequência de 2 motores? com o exemplo do tempo. parte do motor 1 por 2 segundos, em seguida, pare e parte do motor 2. para e parte do motor 1 e o turno é invertido
hola
necesito ayuda , como puedo hacer la programación, soy aprendiz y necesito hacer que funcione el motor 1, y luego de 3 seg, que parta el motor 2 y así sucesivamente
gracias
Boa noite tem como colocar quatro noto de passo, acionar ao mesmo tempo a cada 60minutos avança assim por diante com um relógio
COMO FAÇO PARA PROGRAMAR 2 MOTORES DE PASSO ROTACIONE AO MESMO TEMPO
BOA TARDE!
COMO FAÇO PARA O MOTOR DE PASSO SER ACIONADO QUANDO O SENSOR DETECTAR NA SEGUNDA VEZ E O MOTOR GIRAR 90 GRAUS QUANDO O SENSOR ESTIVER EM NIVEL ALTO E O MOTOR RETORNAR PARA POSIÇAO INICIAL QUANDO O SENSOR ESTIVER EM NIVEL BAIXO ?? ME AJUDADEM POR FAVOR!!
Bom dia,
Que tipo de sensor vc está usando?
Abraço!
Adilson