Hoje o assunto é motor de passo. Já fazia um tempo que eu queria escrever sobre motores de passo, que é um item quase que obrigatório na montagem de robôs. Vamos ver como utilizar o motor de passo 28BYJ-48 com arduino, controlando a rotação do motor. Outros usos incluem relógios, mostradores, painéis ou outros dispositivos que exijam algum tipo de deslocamento.
Vamos utilizar este conjunto Motor de passo 28BYJ-48 com driver ULN2003, que contém tudo o que você precisa para dar os primeiros passos (ops!) no assunto “motores”.
Como funciona um motor de passo
Um motor de passo funciona aplicando-se tensões específicas a cada uma das bobinas do motor, o que faz com que ele rode no sentido horário ou anti-horário, com maior ou menor velocidade, etc.
No datasheet do motor você tem (quase) todas as informações sobre o componente, como por exemplo a disposição das bobinas:
Esse experimento utiliza o módulo controlador com o chip driver ULN2003 (datasheet), um CI Driver de corrente que permite que, com o Arduino (que suporta corrente máxima de 50 mA por porta), sejam controlados motores que exijam correntes maiores, de até 500 mA. Este módulo aceita alimentação de 5 a 12 volts e possui leds indicadores que mostram o acionamento das bobinas.
Note que o ULN2003 somente auxilia no gerenciamento da tensão e corrente para as portas. Assim, toda a lógica de programação e sequência de bobinas que devem ser acionadas, é controlada pelo Arduino (ou outro microcontrolador que você esteja usando).
Circuito motor de passo 28BYJ-48 com arduino
Para testes, montei um circuito utilizando dois push-buttons para controlar a rotação do motor. O botão da esquerda move o motor no sentido anti-horário, e o botão da direita, no sentido horário, sem alterar a velocidade:
E finalmente o programa, utilizando como base o exemplo da biblioteca Stepper com algumas alterações para tratamento das funções dos botões:
//Programa: Controle de sentido de rotacao de motor de passo //Autor: Arduino e Cia #include <Stepper.h> int pinobotao_ah = 3; //Porta botao sentido anti-horario int pinobotao_h = 2; //Porta botao sentido horario int passos = 50; //Passos a cada acionamento do botao int leitura = 0; //Armazena o valor lido do botao horario int leitura2 = 0; //Armazena o valor lido do botao anti-horario const int stepsPerRevolution = 500; //Inicializa a biblioteca utilizando as portas de 8 a 11 para //ligacao ao motor Stepper myStepper(stepsPerRevolution, 8,9,10,11); void setup() { pinMode(pinobotao_h, INPUT); pinMode(pinobotao_ah, INPUT); myStepper.setSpeed(60); //Determina a velocidade do motor } void loop() { //Gira o motor no sentido horario leitura = digitalRead(pinobotao_h); if (leitura != 0) { myStepper.step(-passos); } //Gira o motor no sentido anti-horario leitura2 = digitalRead(pinobotao_ah); if (leitura2 != 0) { myStepper.step(passos); } }
Por último uma observação: este motor possui uma caixa de redução embutida (daí o eixo aparente do motor não estar no centro do mesmo). A falta de algumas especificações das engrenagens da redução geram uma certa confusão na definição dos parâmetros, principalmente no número de passos para uma volta completa, o que exige atenção se você for utilizar este motor em tarefas mais precisas.
No vídeo abaixo você confere o projeto em funcionamento:
Confira outros posts usando motor de passo 28BYJ-48 aqui mesmo no Arduino e Cia!