BUILDBOT Blog

Movimentar seu robô com Arduino.

Movimentar robô com ArduinoMotores de passo e servo motores são alguns dos componentes mais comuns encontrados em vários tipos de projetos envolvendo robôs. Podemos utilizar alguns tipos de chaves tipo push-button, joysticks e até mesmo o acelerômetro do celular para controlar esses motores.

No Arduino, movimentar um motor de passo ou um servo motor  é uma tarefa simples, que podemos executar utilizando uma das placas mais utilizadas, como o Arduino UNO e sem a necessidade de bibliotecas especiais, apenas as bibliotecas Stepper e Servo que já vem embutidas na IDE do Arduino.

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.

Conexões, motor de passoEm 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:

Sequencia Ativacao, 8 passos

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:

Sequencia Ativacao, 4 Passos

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.

Micro Servo Motor, detahes

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 :

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 :

Motor de Passo e Servo Motor com ArduinoComo 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.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
//Programa : Controle de motor de passo e servo motor
//Autor : Adilson Thomsen  

//Carrega as bibliotecas
#include <Stepper.h>
#include <Servo.h> 

Servo servo1;

//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
int passos = 50;
//Aramazena o valor lido do potenciometro
int leitura = 0; 
//Armazena o valor lido do push-button
int leitura2 = 0;

//Define o numero de passos por volta
//(Ajuste de acordo com o seu motor)
const int stepsPerRevolution = 500;   
 
// Inicializa a biblioteca utilizando as portas de 8 a 11 para  
// ligacao ao motor  
Stepper motor_passo1(stepsPerRevolution, 8,9,10,11);        
   
void setup()   
{ 
  //Define os pinos dos botoes e potenciometro como entrada
  pinMode(pino_pot, INPUT);  
  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);
}  
   
void loop()  
{ 
  //Efetua a leitura do potenciometro
  leitura = analogRead(pino_pot);
  //Gira o motor no sentido horario
  if (leitura >600)
  {
    motor_passo1.step(passos);   
  }  

  //Gira o motor no sentido anti-horario  
  if (leitura <400)  
  {  
    motor_passo1.step(-passos);   
  }
  
  //Efetua a leitura do valor do push-button
  leitura2 = digitalRead(pinobotao_servo);
  if (leitura2 != 0)
  {
    //Caso o botao seja acionado, movimenta o 
    //servo em 90 graus
    servo1.write(90);
  }
  else
  {
    //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.

Category: Artigos

Your email address will not be published. Required fields are marked *

*