Além da tradicional biblioteca Stepper do Arduino, uma outra biblioteca bastante utilizada para controle de motores de passo, e que vamos utilizar com o motor de passo 28BYJ-48 e driver ULN2003, é a CustomStepper, que tem funções como rotacionar o motor determinado número de vezes, rotacionar apenas em um ângulo específico, ou rotacionar até que um novo comando seja enviado ao motor.
Atenção: Para mais informações sobre o funcionamento do 28BYJ-48, assim como a utilização do mesmo com a biblioteca Stepper, consulte o artigo Ligando Motor de passo 28BYJ-48 e ULN2003.
O download da biblioteca CustomStepper pode ser feito nesse link, e a instalação segue o procedimento da maioria das bibliotecas do Arduino: descompacte o arquivo zip e coloque a pasta CustomStepper na pasta LIBRARIES da IDE do seu Arduino. Não esqueça de reiniciar a IDE para que a biblioteca seja carregada corretamente.
Conexão do motor de passo no Arduino
Vamos demonstrar as funções desta biblioteca utilizando dois programas diferentes. Primeiramente, monte o circuito abaixo, que utiliza o motor de passo 28BYJ-48 e o driver ULN2003 juntamente com o Arduino Uno:
O primeiro exemplo é o controle do número de rotações do motor. Carregue o programa abaixo, que rotaciona o motor 3 vezes no sentido horário, aguarda 2 segundos e rotaciona 2 vezes no sentido anti-horário:
// Programa : Controle motor de passo 28BYJ-48 - Rotacoes
// Autor : Arduino e Cia
#include <CustomStepper.h>
//Define os parametros de ligacao do motor de passo
CustomStepper stepper(8, 9, 10, 11, (byte[]){8, B1000, B1100, B0100,
B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);
boolean rotate1 = false;
boolean rotatedeg = false;
boolean crotate = false;
void setup()
{
//Define a velocidade do motor
stepper.setRPM(12);
//Define o numero de passos por rotacao
stepper.setSPR(4075.7728395);
}
void loop()
{
if (stepper.isDone() && rotate1 == false)
{
delay(2000);
//Define o sentido de rotacao (CW = Horario)
stepper.setDirection(CW);
//Define o numero de rotacoes
stepper.rotate(3);
rotate1 = true;
}
if (stepper.isDone() && rotate1 == true)
{
delay(2000);
//Define o sentido de rotacao (CCW = Anti-horario)
stepper.setDirection(CCW);
//Define o numero de rotacoes
stepper.rotate(2);
rotate1 = false;
}
//Comando obrigatorio para funcionamento da biblioteca
stepper.run();
}
O segundo exemplo é o controle do motor de passo pelo ângulo de rotação. A cada 2 segundos, o motor rotaciona 90 graus:
// Programa : Controle motor de passo 28BYJ-48 - Angulo
// Autor : Arduino e Cia
#include <CustomStepper.h>
//Define os parametros iniciais de ligacao do motor de passo
CustomStepper stepper(8, 9, 10, 11, (byte[]){8, B1000, B1100, B0100,
B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);
void setup()
{
//Define a velocidade do motor
stepper.setRPM(12);
//Define o numero de passos por rotacao
stepper.setSPR(4075.7728395);
}
void loop()
{
if (stepper.isDone())
{
//Intervalo entre acionamentos
delay(2000);
//Define o sentido de rotacao (CW = Horario)
stepper.setDirection(CW);
//Define o angulo de rotacao
stepper.rotateDegrees(90);
}
stepper.run();
}
Você pode adaptar esse programa para outros motores de passo observando a sintaxe do comando CustomStepper no inicio do programa:
CustomStepper stepper(8, 9, 10, 11, (byte[]){8, B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW)
onde:
8, 9, 10 e 11 : são as portas utilizadas para ligação ao motor/driver
byte[]){8, B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001}
Refere-se à sequência de ativação das bobinas do motor. O número 8 corresponde ao número de passos, que no caso do 28BYJ-48 segue a tabela abaixo:
4075.7728395 = Numero de passos necessários para uma rotação completa do motor. O valor refere-se ao motor de passo 28BYJ-48, e deve ser ajustado para outros tipos de motores.
12 = Velocidade de rotação
CW = O último parâmetro é o sentido de rotação, que pode ser CW = Horário, CCW = Anti-horário, ou STOP = Parado
Como vimos, a utilização da biblioteca CustomStepper é bem simples e se mostra uma boa alternativa para controle de motores de passo.
Gostou? Confira outros posts usando motor de passo aqui mesmo no Arduino e Cia!