21 julho 2014

Controlando motores 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 (foto abaixo).

Atualizado : Controle também servo motores com o Motor Shield L293D. Veja no artigo  Controlando servo motor com o Motor Shield L293D.

Motor de passo 5v 28BYJ-48


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.

"Peraí, modo de ativação de 4 passos ? O que é isso ?"

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 :

Motor de passo - bobinas

Motor de passo - Modo de ativação de 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 :

Motor de passo - Modo de ativação de 4 passos

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 :

Motor Shield L293D - Detalhe conectores


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.

Circuito Arduino Motor de passo 28BYJ-48 e Motor Shield
 
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.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// 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 :



Falta agora o controle de Servo Motor com esse shield. Assunto para um próximo post. Até lá !


32 comentários:

  1. É possível implementar o projeto com Arduíno Uno?

    ResponderExcluir
    Respostas
    1. 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 !

      Excluir
  2. amigo! para fazer uma plotter com esses dois motores o adruino eo ol293 onde consigo o programma?

    ResponderExcluir
    Respostas
    1. 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 !

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

    ResponderExcluir
    Respostas
    1. 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 !

      Excluir
  4. Boa tarde
    Qual programação eu faço para dois motores dc normais, e um sensor infravermelho sharp. Me ajude!!!

    ResponderExcluir
    Respostas
    1. Boa noite,

      Que tipo de circuito você está montando ? Que movimento vai fazer com os motores quando o sensor for acionado ?

      Abraço.

      Excluir
  5. Quando que vocês vão fazer o tutorial para controlar os servos com esse shield?

    ResponderExcluir
    Respostas
    1. Bom dia Eric,

      Sai na próxima semana, dia 25. Aguardo sua visita ! :)

      Abraço.

      Excluir
  6. Boa tarde,parabéns pelo site, eu gostaria de saber qual é o valor máximo de velocidade que pode ser colocado no programa?

    ResponderExcluir
    Respostas
    1. 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 !

      Excluir
  7. Olá. Ótimo tutorial.
    Quero fazer algo parecido, porém o motor que tenho a tensão é 12VDC.
    Como posso fazer a ligação?

    ResponderExcluir
    Respostas
    1. 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 !

      Excluir
  8. Ola. Gostaria de saber, como faço para os dois motores funcionarem simultaneamente?

    ResponderExcluir
    Respostas
    1. 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 !

      Excluir
  9. 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!

    ResponderExcluir
    Respostas
    1. Bom dia Eduardo !

      Ainda não testei isso com esse shield, mas creio que não tenha problemas.

      Abraço !

      Excluir
  10. Gostaria de saber como ligar um motor de passo 6 fios nesse sield

    ResponderExcluir
    Respostas
    1. 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 !

      Excluir
  11. 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.

    ResponderExcluir
    Respostas
    1. 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 !

      Excluir
  12. Gostaria de comandar um Motor de Passos com Rfid, é possível? se é possível como fazer?

    ResponderExcluir
    Respostas
    1. 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 !

      Excluir
  13. 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 !!!!

    ResponderExcluir
  14. 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?

    ResponderExcluir
  15. 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?

    ResponderExcluir
    Respostas
    1. Oi Richard,

      Você tem o kit motor + ULN2003 ? Basta comprar mais um kit e alterar as portas na programação.

      Abraço!

      Excluir
  16. Bom dia, existe algum software para controle deles, tipo o grbl? que seja compativel com o l293d

    ResponderExcluir
  17. 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 :D

    ResponderExcluir
  18. 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

    ResponderExcluir
    Respostas
    1. Oi Silvano!

      Obrigado. Infelizmente vou ficar te devendo essa resposta, pelo menos até arrumar um desses motores pra testar. :)

      Abraço!

      Excluir