FUNCIONAMENTO BÁSICO DE UM MOTOR DE PASSO
O funcionamento de um motor de passo baseia-se no acionamento das bobinas em uma sequência pré-determinada, onde definimos se o motor vai rodar em sentido horário ou anti-horário e em qual velocidade isso irá acontecer.
Em um motor de passo como esse que vamos utilizar no post, podemos ter dois modos de acionamento : modo de 8 passos (half-mode) ou modo de 4 passos (full step). No modo de ativação de 8 passos, o acionamento segue a tabela abaixo, onde uma bobina é acionada, depois duas, depois uma novamente e assim por diante, até se completarem os 8 passos, isso faz com que possamos ter uma maior precisão no movimento do motor:
Já no modo de 4 passos, são acionadas duas bobinas de cada vez, isso representa um maior torque mas menor precisão nos movimentos:
Podemos controlar um motor de passo ligando os fios das bobinas diretamente nas portas do Arduino. Entretanto, pela limitação de corrente de cada uma das portas (50 mA no Arduino Uno), recomenda-se utilizar um CI driver de corrente, como o ULN2003 (datasheet) que suporta motores que exigem uma corrente maior, até 500 mA.
FUNCIONAMENTO BÁSICO DE UM SERVO MOTOR
O servo motor é utilizado quando queremos uma maior precisão nos movimentos, já que o circuito de controle embutido no motor monitora a sua posição por meio de um potenciômetro. Um sistema composto por um motor DC (corrente contínua), em casos especiais AC (corrente alternada) e várias engrenagens sãos responsáveis pela movimentação do eixo.
Da mesma forma que os motores de passo, também podemos ligar os servo motores diretamente no Arduino, já que o circuito de controle do servo se encarrega de interpretar os sinais enviados pelo pino de sinal. Por outro lado, um servo motor costuma exigir muita corrente do Arduino, por isso, se for usar mais de um servo, opte por alimentar o servo com uma fonte externa.
MOTOR DE PASSO E SERVO MOTOR COM ARDUINO
Neste post vamos construir um circuito utilizando um motor de passo 28BYJ-48 com driver ULN2003 e um servo motor TowerPro 9G, simulando o uso desses motores em algum tipo de garra ou guindaste, onde o motor de passo teria a função de rotacionar a base e o servo motor de acionar a garra ou algum outro dispositivo.
Para esse circuito, vamos utilizar o seguinte material :
Servo motor microservo TowerPro 9G SG90
Resistor de 10 K
Potenciômetro de 50 K (pode ser utilizado outro valor)
Monte o circuito ligando os pinos do driver ULN2003 às portas 8, 9, 10 e 11 do Arduino, conforme mostrado na imagem e o pino de dados do servo motor à porta digital 7. O potenciômetro deve ser ligado à uma porta de entrada analógica, para isso vamos usar a porta analógica A3.
O botão que vai acionar o servo movimentará o motor em 90 graus, e tem apenas o estado ligado (1 ou HIGH), ou desligado (0 ou LOW) , assim podemos utilizar uma porta digital para o botão :
Como comentamos anteriormente, vamos utilizar as bibliotecas Stepper e Servo, já presentes na IDE do Arduino, assim você não irá precisar efetuar o download de nenhuma nova biblioteca.
O programa é configurado para ler os dados do potenciômetro e caso o valor lido esteja acima de 600 o motor de passo é rotacionado no sentido horário. Caso o valor esteja abaixo de 400 o motor será rotacionado no sentido anti-horário. Dessa maneira, com um valor entre 401 e 599 o motor de passo não executa nenhum movimento.
//Programa : Controle de motor de passo e servo motor
//Autor : Adilson Thomsen
//Definicao de pinos para botoes, potenciometro e servo
int pino_pot = A3;
int pinobotao_servo = 5;
int pino_servo = 7;
//Passos a cada acionamento pelo potenciometro
//Aramazena o valor lido do potenciometro
//Armazena o valor lido do push-button
//Define o numero de passos por volta
//(Ajuste de acordo com o seu motor)
Stepper motor_passo1(stepsPerRevolution, 8,9,10,11);
//Define os pinos dos botoes e potenciometro como entrada
pinMode(pinobotao_servo, INPUT);
//Define o pino do servo como saida
pinMode(pino_servo, OUTPUT);
//Determina a velocidade inicial do motor de passo
motor_passo1.setSpeed(60);
//Determina que o servo1 esta ligado ao pino pino_servo
servo1.attach(pino_servo);
//Efetua a leitura do potenciometro
leitura = analogRead(pino_pot);
if (leitura >600)
motor_passo1.step(passos);
if (leitura <400)
motor_passo1.step(-passos);
//Efetua a leitura do valor do push-button
leitura2 = digitalRead(pinobotao_servo);
//Caso o botao seja acionado, movimenta o
//servo em 90 graus
//Retorna a posicao inicial caso o push-button
//nao esteja sendo acionado
servo1.write(-90);
No caso do servo motor o acionamento do push-button (entrando em estado HIGH, ou 1) movimenta o motor em 90 graus e caso o botão não seja acionado (estado LOW, ou 0), retorna à posição original (movimentando o motor em -90 graus).
Como vimos o Arduino vem pronto para trabalhar com muita coisa, mas fique atento quanto a corrente de consumo do que esta ligando, em projetos um pouco mais elaborados se faz necessários utilizar fontes externas, shields ou modulos de acionamento.