Controlando motor de passo 5V 28BYJ-48 com Arduino Motor Shield L293D

Controlando motor de passo 5V 28BYJ-48 com Arduino Motor Shield L293D

Aqui no blog  já falamos sobre Como controlar um motor de passo 5v utilizando o driver de controle ULN2003.

O post de hoje vai utilizar o mesmo motor de passo 5v, o 28BYJ-48, mas desta vez controlado pelo Arduino Motor Shield L293D. Este Arduino Motor Shield é muito prático, e pode controlar até 4 motores DC, 2 servos e 2 motores de passo. Já mostramos a utilização deste shield no artigo Controlando motor DC 12v com Arduino Motor Shield.

O Motor de passo 5v Arduino é muito utilizado para controle de robôs e posicionamento de braços mecânicos, suportes e outros dispositivos.  Tem um bom torque, graças à caixa de redução, e trabalha em baixa velocidade.

Motor de passo 5V 28BYJ-48

Este motor é alimentado por 5v, possui uma redução de 1/64 e segundo o datasheet , são necessários 64 passos para que o motor dê uma volta completa (5,625º / 64 passos ), isso em modo “puro” (sem redução). Com a redução de 1/64 ,o número de passos aumenta para 4096 (64 * 64 = 4096). Esses valores são válidos se utilizarmos o esquema de ativação das bobinas em 8 passos (half-mode, ou meio-passo).  Se utilizarmos o esquema de ativação de 4 passos (full-step, ou passo inteiro), que é o padrão utilizado pela biblioteca do Arduino, o número de passos necessários cai pela metade, para 2048.

Para entendermos essa diferença, vamos dar uma olhada na tabela abaixo, que mostra o acionamento das bobinas do motor em 8 etapas :

Motor de passo 28BYJ-48 - Conexoes

Sequencia de ativacao - 8 passos

Nesse modo, primeiro é acionada uma bobina, depois duas, depois uma novamente, depois duas,  e assim por diante, em 8 etapas. 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 girar o motor :

Sequencia de ativacao - 4 passos

Também no modo 4 passos, teoricamente teremos mais força no motor, pois estamos acionando duas bobinas ao mesmo tempo.

Muitas vezes queremos que o motor de passo gire apenas um determinado número de graus. Tendo em mãos o número total de passos utilizados pelo motor para dar uma volta completa, fica fácil calcular o ângulo de cada passo. Basta dividir 360 graus pelo número de passos. No caso do nosso motor de passo 5v 28BYJ-48, fica assim :

360 º / 2048 passos = 0,17578125 graus/passo

Dessa forma, se quisermos movimentar o motor 90 graus, por exemplo, dividimos 90 pelo valor que obtivemos anteriormente :

90 º / 0,17578125 graus/passo = 512 passos

É importante destacar que algumas bibliotecas já fazem isso automaticamente, com funções onde você apenas fornece o ângulo de deslocamento e a biblioteca se encarrega de movimentar o eixo do motor até o ponto desejado.

O shield motor utilizado nos testes tem a capacidade de controlar 2 motores de passo ao mesmo tempo. Para isso, utilizamos os conectores M1, GND e M2 do lado esquerdo da placa, ou os conectores M3, GND e M4 do lado direito. No programa, isso é referenciado como Porta 1 (motor de passo ligado ao M1/M2), e Porta 2 (motor de passo ligado ao M3/M4). Não é necessária alimentação externa, pois os 5v serão fornecidos pelo Arduino, assim podemos manter o jumper no conector PWR, confome indicado :

Motor Shield com motor de passo 2BYJ-48

No programa vamos utilizar a biblioteca AFMotor, específica para este motor shield. Baixe a biblioteca em formato ZIP, descompacte a pasta, renomeie para AFMotor, e coloque essa pasta dentro da pasta LIBRARIES do programa (IDE) do seu Arduino.

Para definirmos o motor que está sendo utilizado, usamos o comando

AF_Stepper nome(passos_total, porta_motor)

Onde nome será utilizado para se referir ao motor que estamos definindo, e pode ser um nome qualquer, para facilitar a identificação (ex. motor1, motor2,  motorprincipal, motorsecundario, etc) , passos_total se refere ao número de passos que o motor necessita para dar uma volta completa no eixo, e porta_motor se refere ao conector onde foi ligado fisicamente o motor de passo. (Relembrando : 1 para motor de passo no conector M1/M2 e 2  para conector M3/M4). No circuito acima, estamos utilizando o motor na porta 2.

O movimento do motor de passo 5v, propriamente dito, é determinado pelo comando

nome.step(numero_de_passos, direção, tipo_de_passo)

onde direção pode ter os valores FORWARD (giro do motor no sentido horário), ou BACKWARD (sentido anti-horário). A variável tipo_de_passo determina o modo como as bobinas serão acionadas, e pode ter o valor SINGLE (uma bobina por vez), DOUBLE (duas bobinas, aumentando o torque), INTERLEAVE (alternando entre 1 e 2 bobinas, aumentando a precisão), e MICROSTEPPING, que gera um movimento mais suave e preciso. Esses dois últimos métodos, entretanto, podem não funcionar com qualquer tipo de motor.

Juntando todas essas informações, temos um programa que move o motor no sentido horário, calculando o número de passos baseado no ângulo fornecido no início do programa :

//Programa : Motor de passo 5v 28BYJ-48 com Arduino Motor Shield L293D
//Autor : FILIPEFLOP

#include <AFMotor.h>
double passos_total = 2048; //Numero de passos para 1 rotacao total

int porta_motor = 2; //1 para motor em M1/M2 e 2 para motor em M3/M4
int angulo = 30; //Angulo de rotacao do eixo

double numero_de_passos = 0; //Armazena o numero de passos que o motor vai girar

AF_Stepper arduino(passos_total, porta_motor); //Define os parametros do motor

void setup()
{
arduino.setSpeed(10); //Define a velocidade de rotacao
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.println(numero_de_passos);

//Move o motor. Use FORWARD para sentido horario,
//BACKWARD para anti-horario
arduino.step(numero_de_passos, FORWARD, SINGLE);
arduino.release();

delay(2000);
}

Gostou? Ajude-nos a melhorar o blog atribuindo uma nota a este tutorial (estrelas no final do artigo). Já conhece a loja virtual FILIPEFLOP? Não? Então confira um pouco sobre Quem somos e nossa confiável trajetória de vendas.

6
Controlando motor de passo 5V 28BYJ-48 com Arduino Motor Shield L293D
39 votos, 4.75 classificação média (95% pontuação)

Formado em Ciência da Computação pela Universidade de Mogi das Cruzes, atualmente responsável pelo departamento técnico da FILIPEFLOP.

Compartilhe este Post

41 Comentários

  1. leonardo clavell - 19 de junho de 2017

    Olá, esse blog ainda está ativo? eu preciso de ajuda…

  2. Adilson - 15 de novembro de 2016

    Boa noite , gostaria de comandar Boa bluetooth o motor de passo 28BYJ-48, alguém sabe me dizer se dá é de poder me mandar um tutoria agradeço desde já
    adilsonboliveira.77@gmail.com

  3. Bruno Gomes da SIlva - 13 de outubro de 2016

    Da para controlar 2 motores de passa e um servo? obs: os motores de passo são aqueles de DRIVES CD/DVD

  4. jairo francis - 28 de setembro de 2016

    Eu posso utilizar esse servo e esta instalação em câmera de CFTV?

  5. Daniele - 1 de novembro de 2015

    Ótimo site, está me ajudando muito.
    Estou com um problema, enquanto o arduino está ligado ao pc, o motor gira normalmente. Mas ao retirar o usb, o motor pára.
    Acredito que não seja um problema de energia, pois estou alimentando o arduino com uma bateria de 9v e o driver com alimentação externa em uma bateria de 12v.
    Estou usando exatamente a mesma programação descrita por vocês.
    Será que vocês conseguem pensar em algum motivo para isto acontecer?

    Grata.

  6. David - 28 de setembro de 2015

    Boa Tarde!
    Antes de tudo gostaria de parabenizar pelo post,muito bom!
    Sou iniciante na matéria, e apenas um curioso. Tenho um motos de passo que tem 6 fios e cores diferentes.Como faço para ligar neste shield?
    Grato!

  7. Victor Colacelli - 28 de agosto de 2015

    Ola, gostaria de saber, se com o Motor Shield L293D, consigo controlar 3 servo motores e 2 motores de passo, pois estava vendo e percebi que ele só tem entrada para 2 servo.
    Muito Obrigado

  8. David - 15 de junho de 2015

    Olá,

    Gostaria de usar este drive e motor em um projeto que valoriza ao máximo a portabilidade com raspberry devido as suas dimensões pequenas. O circuito solicita niveis logicos de 5V, mas a raspberry fornece apenas 3.3V. Saberia me informar um circuito confiável para fazer essa conversão de níveis lógicos (de preferencia um CI já pronto)? Ou alguma outra alternativa de motores de passo para raspberry? (Visto que meu principal requisito são dimensões pequenas ao máximo).

    Obrigado

  9. Fred - 5 de junho de 2015

    com pic 18f452 com esse motor de passono proteus , 512 passos da varias voltas, não era pra ser 90ª duvida” valeu

  10. Kelhium - 19 de março de 2015

    Olá, gostaria de tirar uma duvida, utilizando essa Shield, eu acabo perdendo todas as portas Digitais ou posso usa-las normalmente? Quais portas essa shield utiliza para comunicação com o Arduino UNO? Pois eu vi que as analogias eu tenho como colocas os pinos ali na Shield mesmo, mas e as digitais? Agradeço a atenção

    • FILIPEFLOP - 31 de março de 2015

      Boa noite,

      De acordo com o fabricante, as seguintes portas são utilizadas pelo shield :

      Pinos utilizados para controle de motores DC : Pinos 11, 3, 5 e 6
      Pinos utilizados para controle de motores de passo : Pinos 4, 7, 8 e 12
      Pinos utilizados para controle de servo motores : Pinos 9 e 10

      Desta forma, você pode usar os pinos livres, inclusive o pino 0 (RX) e 1 (TX) no Arduino Uno, para controlar o módulo bluetooth.

      Abraço !

      Adilson – Equipe FILIPEFLOP

  11. Diego - 25 de fevereiro de 2015

    Estou tentando usar esse driver com o Motor de Passo 3-20V NEMA 17 Impressora 3D de vocês e não funciona.

    Mudei o número de passos para 200. E usei alimentação externa (3-20VDC para o motor e 4,5-36V para o módulo) conforme o especificado no site de vocês.

    Ele fica girando com um torque desprezível (para segunrando levemente com a ponta dos dedos) ou nem gira. Quando passei a tensão de alimentação para 15 V, um dos lados do módulo parou de funcionar.

    Lembrando que esse módulo foi dica de vocês para o motor escolhido.

    Gostaria de ajuda. Obrigado!

    • Antonio - 5 de dezembro de 2016

      Faço das minhas palavras, as palavras do Diego. Apresenta o mesmo tipo de problemas. Tanto o Motor Shield L293D, como o Motor de Passo 3-20V NEMA 17 Impressora 3D, foram adquiridos á Filipeflop.
      Também preciso de ajuda e gostaria que fossem fornecidas as conexões entre o Motor Shield L293D e o Motor de Passo 3-20V NEMA 17.
      Obrigado!

    • Antonio - 5 de dezembro de 2016

      Diego, tive o mesmo problema que o seu. Para o resolver deverá conectar o GND ao corpo do Motor de Passo.
      Abraço.

  12. Waglio - 16 de janeiro de 2015

    Amigo, poderia me ajudar com um projeto, tenho um motor de passo, mas porem os fios dele é de outra cor, e eu teria que executar numa placa Beaglebone Black. teria como me ajudar com dicas, eu preferia que criassem um projeto e postassem no site, que dai ajudaria não só a me como outras pessoas também!

  13. Pires - 9 de janeiro de 2015

    Boas desde já parabéns pelo site, venho por este meio perguntar se é possivel controlar um motor passo a passo com potenciometro usando o shield se sim podiam enviar me para o meu mail a ligação e se possivel o código tambem ficaria muito agradecido.
    Sem mais assunto me despeço.
    Cumprimentos Luis Pires.

    • FILIPEFLOP - 12 de janeiro de 2015

      Boa noite Luis,

      Não temos ainda nenhum exemplo utilizando potenciômetro junto com o shield, mas você pode utilizar as informações dos nossos artigos para realizar essa ligação.

      Abraço.

      Adilson – Equipe FILIPEFLOP

  14. Luiz - 20 de novembro de 2014

    amigo, estou com o mesmo problema descrito pela Francielly e pelo Vinicius, o erro que aparece é esse
    “sketch_sep05a:12: error: ‘AF_Stepper’ does not name a type
    sketch_sep05a.ino: In function ‘void setup()':
    sketch_sep05a:16: error: ‘arduino’ was not declared in this scope
    sketch_sep05a.ino: In function ‘void loop()':
    sketch_sep05a:30: error: ‘arduino’ was not declared in this scope
    sketch_sep05a:30: error: ‘FORWARD’ was not declared in this scope
    sketch_sep05a:30: error: ‘SINGLE’ was not declared in this scope”
    você pode ajudar?

  15. Tiago - 11 de novembro de 2014

    Boa tarde, comprei à algum tempo o shield acima, e fiquei com duvida se poderia usar nesse motor de passo, do link abaixo, e se poderia me ajudar com as ligações.
    http://www.neoyama.com.br/site/uploads/sap/MOTOR%20DE%20PASSO%20-%20NEMA:%2023%20-%20Torque:%2010%2000%20kgfcm%20-%20Corrente:%201%2040%20A%20-%20dat-I000982.pdf

  16. Controlando um Motor de Passo 5v com Arduino | Blog FILIPEFLOP - 9 de julho de 2014

    […] Se você tiver um Arduino Motor Shield, confira este post sobre Como conectar o Motor de Passo 28BYJ-48 com Arduino Motor Shield L293D. […]

  17. Thomaz Borges - 16 de junho de 2014

    Boa tarde!

    Comprei a algum tempo de voces este motor shield, e estou com uma dúvida.

    Estou controlando um motor de passo de impressora epson, EM-463. Utilizo potencia externa, 12V de uma fonte atx de computador. Depois que o movimento é realizado em minha montagem, as bobinas do motor seguem energizadas desnecessariamente, o que faz um dos chips do motor shield esquentar bastante. Busquei na internet alguma forma de fazer isso, e encontrei esse (http://forum.arduino.cc/index.php?topic=76695.0;wap2) tópico, mas não entedi especificamente que comando devo utilizar para desligar o motor. Alguma sugestão?

  18. Francielly Novais - 6 de junho de 2014

    Peguei essa programação pra testar o meu motor de passo pelo serial, só que está dando erro nesse comando: AF_Stepper arduino(passos_total, porta_motor); //Define os parametros do motor
    Sou nova na plataforma e autodidata, vc poderia me explicar oq está errado?
    Obrigada

    • FILIPEFLOP - 9 de junho de 2014

      Boa tarde Francielly,

      Que erro ele apresenta ?

      Abraço.

      Adilson – Equipe FILIPEFLOP

      • Vinicius Blazak - 5 de setembro de 2014

        OI! Estou com o mesmo problema descrito pela Francielly, o erro que aparece é esse
        “sketch_sep05a:12: error: ‘AF_Stepper’ does not name a type
        sketch_sep05a.ino: In function ‘void setup()':
        sketch_sep05a:16: error: ‘arduino’ was not declared in this scope
        sketch_sep05a.ino: In function ‘void loop()':
        sketch_sep05a:30: error: ‘arduino’ was not declared in this scope
        sketch_sep05a:30: error: ‘FORWARD’ was not declared in this scope
        sketch_sep05a:30: error: ‘SINGLE’ was not declared in this scope”

  19. Ana Flávia - 23 de maio de 2014

    Bom dia,

    Para movimentar em ambos sentidos´, basta colocar ‘ arduino.step(numero_de_passos, BACKWARD, SINGLE); ‘ no código após quando diz ‘arduino.step(numero_de_passos, FORWARD, SINGLE); ‘?

    obrigada.
    Ana.

  20. Nelson - 1 de maio de 2014

    Olá, Felipe.

    Comprei uma shield 293D e gostaria que vc me ajudasse a botar pra funcionar um motor de passos de 4 fios.
    Ele é de impressora laserjet.
    É possivel essa façanha?

  21. Rodrigo - 13 de abril de 2014

    Uma dúvida, então o motor de passo utiliza somente uma velocidade? Ou a velocidade é controlada pela velocidade que vc envia a sequencia de ativação? Sei que posso controlar a velocidade através dos forma que aciono as bobinas ( de uma em uma, de duas em duas, hibrido ), mas variando a frequência com que insiro os passos, consigo variar integralmente a velocidade? Digo isso pois farei um projeto em o robô não é guiado pelo número de rotações que cada motor tem que fazer, mas sim pela variação da rotação de cada roda do robô sendo reajustada a todo momento.

    • FILIPEFLOP - 13 de maio de 2014

      Boa noite Rodrigo,

      Exato, dependendo da frequencia com que os comandos de ativação são enviados, a velocidade do motor será alterada.

      Abraço.

      Adilson – Equipe FILIPEFLOP

Deixe uma resposta