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

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 :

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.

Posts Relacionados

41 Comentários

  1. Muito bom esse post bem explicativo!

    1. Ficamos felizes em ajudar 🙂
      Grato!

  2. 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 FILIPEFLOP

  3. 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 FILIPEFLOP

  4. 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 FILIPEFLOP

  5. 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 FILIPEFLOP

      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”

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

    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 FILIPEFLOP

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

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

  8. 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 FILIPEFLOP

  9. 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 FILIPEFLOP

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

  11. 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 á 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!

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

  12. 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 FILIPEFLOP

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

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

  14. 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.filipeflop.com/pd-6b7fd-motor-de-passo-driver-uln2003-arduino.html

      Fizemos alguns testes com o Raspberry e funcionou sem problemas.

      Abraço.

      Adilson – Equipe FILIPEFLOP

  15. 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.filipeflop.com/pd-13a7ce-servo-motor-shield-16-canais-para-arduino.html

      Abraço

      Adilson – Equipe FILIPEFLOP

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

  17. Ó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!

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

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

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

Trackbacks and Pingbacks

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

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *