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

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

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 : MakerHero

#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? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

65 Comentários

  1. Bom dia Adilson Tudo bem?

    Vou utilizar um motor de passo em um relógio de esferas, você teria um programa para girar contínuo em 1RPM no sentido horário?

    Não tenho conhecimento nenhum sobre esse tipo de programação e gostaria de vosso apoio se possível.

    Obrigado.

    1. Olá.

      Para definir a velocidade em rotações por minuto, depende do tamanho do eixo, tensão no motor, carga e etc.

      Então, no geral, o valor de RPM deve ser encontrado na “tentativa e erro”. Deve-se basicamente colocar o sistema para rodar e ajustar no código bom base na velocidade que o motor está rodando. Ou seja, ir ajustando conforme o necessário.

      Att.
      Vitor Mattos.
      MakerHero.

  2. O uso de dois motores de passo simultâneos ultrapassa a corrente máxima que o arduino pode fornecer certo? Nesse caso basta apenas remover o jumper e alimentar o VCC do módulo externamente?

    1. Olá Nathan,

      Isso, retirar os jumpers e alimentar os pinos EXT_P`WR com uma fonte externa.

      Abraço!
      Rosana – Equipe MakerHero

  3. Como faço a ligação de um motor de 6 fios no motor shield?

  4. Quantos quilos eu consigo erguer com esse motor?
    queria fazer um projeto simples para erguer um varal.

  5. Boa noite estou com problemas na minha programaçao .. o botao q eu aperto só gira o motor pra um lado mas qnd eu aperto de novo ele nao troca de lado

  6. onde consigo a biblioteca abaixo, ela ja vem no arduino.?

    include

    1. Olá, Alessandro,

      Qual biblioteca você está falando?

      Abraços!
      Diogo – Equipe MakerHero

  7. Olá, bom dia!
    Posso controlar 3 motores de passo SM1.8-D18-MN ? Que placas e software eu uso? Tenho 4 motores desses e gostaria de aproveitá0los para uma CNC.

    1. Olá,

      Para controlar 4 motores de passo, você teria que optar por um shield-CNC: https://www.makerhero.com/produto/cnc-shield-v3-para-arduino-impressora-3d/
      Além dele, vai precisar dos drivers: https://www.makerhero.com/produto/driver-motor-de-passo-a4988/

      Abraços!
      Diogo – Equipe MakerHero

  8. Olá, achei um vídeo que explica como transformar o motor 5V 28BYJ-48 de unipolar em bipolar, removendo a interligação do meio das bobinas. Desta maneira, ele praticamente duplica o torque dele.

    Segue o vídeo: https://www.youtube.com/watch?v=jHLyJbNgcDo&feature=youtu.be

    Assim, ele se transforma em um motor bipolar com 4 fios. Minha dúvida é se o código deste tutorial precisa de algum ajuste para trabalhar com esta nova configuração do motor.

    Obrigado pela atenção.

    1. Olá Marcelo,

      Acredito que não. O motor bipolar possui uma ativação diferente.

      Abraço!
      Rosana – Equipe MakerHero

  9. very useful and helpful post. Thanks for your sharing!

  10. BOA NOITE
    NÃO ESTOU CONSEGUINDO PROGRAMAR 2 MOTORES DE PASSO AO MESMO TEMPO, PROGRAMEI AQUI MAIS PRIMEIRO UM ROTACIONA DEPOIS O OUTRO, SERÁ SE DA DE ROTACIONAR OS DOIS AO MESMO TEMPO?

    1. Olá Thiago!

      A princípio é possível rotacionar os dois ao mesmo tempo.

      Você pode colocar esse problema com mais detalhes? Que placa está usando, qual motor e o programa.

      Abraços!

      André – Equipe MakerHero

      1. Estou usando uma Arduino 2560 e o drive eu mesmo fis com LM122

        1. Olá, João!

          Peço que se tiver alguma dúvida, favor encaminhar com mais detalhes para nosso fórum, lá poderemos ajudar com mais detalhes 😉

          Abraços!
          Diogo – Equipe MakerHero

  11. Bom dia,

    no caso de um motor de passo simples de 4 fios, como seria o sistema?

  12. Amigo, parabéns pelo belo post. Sou mestrando em mecatrônica pela Universidade Federal da Bahia, porém minha graduação é engenharia mecânica. Estou usando muito o arduino por hobby, pois meu orientador não está querendo que utilizo ele no meu projeto de pesquisa. Me tira uma dúvida, eu posso usar meio passo no codigo do arduino para conseguir mais torque neste motor de passo mencionado. Muito obrigado pela atenção.

    Alberto Pires De Carvalho Neto
  13. Gostei muito, vai ajudar no desenvolvimento meu projeto

  14. Highly descriptive post, I enjoyed that bit. Will there be a part 2?|
    cartier collier love imitation http://www.welljasey.com/fr/

    1. Dear Friend, post site which we can visit. Your site canot be visit, what hapenned?

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

  16. 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á
    [email protected]

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

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

  19. Ó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.

    1. Boa tarde!
      Quando voce retira a alimentação USB é necessário colocar o”jumper” no shield.
      Não será isso?

      1. E não precisa alimentar o arduino!

  20. 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!

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

    1. Boa tarde Victor,

      Essa placa tem 2 conectores para servo motores. Para utilizar mais servos, você tem a opção da Adafruit Servo Shield: https://www.makerhero.com/pd-13a7ce-servo-motor-shield-16-canais-para-arduino.html

      Abraço

      Adilson – Equipe MakerHero

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

    1. Boa tarde David,

      Você pode adquirir esse motor de passo já com o driver ULN2003: https://www.makerhero.com/pd-6b7fd-motor-de-passo-driver-uln2003-arduino.html

      Fizemos alguns testes com o Raspberry e funcionou sem problemas.

      Abraço.

      Adilson – Equipe MakerHero

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

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

    1. 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 MakerHero

      1. Oi Adilson.
        Sabe se o pino ARef é usado pelo shield?

  25. 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!

    1. 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 á MakerHero.
      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!

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

  26. 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!

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

    1. 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 MakerHero

  28. 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?

    1. Boa tarde Luiz,

      Me parece algum erro na instalação da biblioteca.

      Abraço.

      Adilson – Equipe MakerHero

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

    1. Boa tarde Tiago,

      Esse motor vai exceder a corrente suportada pelo shield.

      Abraço.

      Adilson – Equipe MakerHero

  30. 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 um tópico no forum da Arduino.cc, mas não entedi especificamente que comando devo utilizar para desligar o motor. Alguma sugestão?

    1. Bom dia Thomaz,

      Tente o seguinte comando :

      motor.run(RELEASE); //Desliga o motor

      Utilizamos esse comando para parar um motor DC, veja se funciona com o seu motor de passo, por favor.

      Abraço

      Adilson – Equipe MakerHero

      1. Tente o comando; ” arduino.release( ); delay(2000);

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

    1. Boa tarde Francielly,

      Que erro ele apresenta ?

      Abraço.

      Adilson – Equipe MakerHero

      1. 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”

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

    1. Boa tarde Ana,

      Exatamente. Obrigado.

      Adilson – Equipe MakerHero

  33. 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?

    1. Boa noite Nelson,

      Teoricamente sim, você já procurou pelo datasheet do motor ?

      Grato.

      Adilson – Equipe MakerHero

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

    1. 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 MakerHero

    1. Ficamos felizes em ajudar 🙂
      Grato!

Trackbacks and Pingbacks

  1. […] Os motores de passo podem ser facilmente controlados através de um microcontrolador como o Arduino através de drivers específicos para motor de passo ou drivers de motor DC. Para saber mais, acesse os posts post do nosso blog “Controlando um Motor de Passo 5v com Arduino” e “Controlando motor de passo 5V 28BYJ-48 com Arduino Motor Shield L293D”. […]

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