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!