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.

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.

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:

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.

Detalhe conectores

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.

Circuito Arduino Motor de passo 28BYJ-48 e Motor Shield

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!

5/5 - (1 vote)