Accionamento de Servos Usando Arduino

Introdução

Tal como tenho vindo a fazer nas últimas edições, vou continuar a mostrar algumas das capacidades do micro-controlador Arduino.

Nesta edição apresento um artigo que aborda a movimentação e controlo de servos através do Arduino, algo muito útil para quem quer abordar mais a parte física de um projecto de robótica e electrónica.

Material necessário

Para a implementar o exemplo que irei dar ao longo deste artigo é necessário utilizar o seguinte material:

  • Arduino
  • Ponte H-L293D
  • Breadboard
  • Jack DC
  • Cablagem de conexão

Esquema Eléctrico

A implementação e controlo de um servo usando Arduino já envolve um pouco mais de electrónica do que os exemplos mostrados nas edições anteriores, mas ainda assim é possível de ser realizado por pessoas sem grande experiência em electrónica e programação.

O exemplo que irei apresentar foi baseado no seguinte esquema eléctrico que eu elaborei para a conexão e controlo de dois motores servo ao Arduino de modo a conseguir obter movimento numa base do tipo Polulu RP5 Tracked Chassis.

Arduino/servos: esquema eléctrico

Arduino/servos: esquema eléctrico

O que é uma Ponte H–L293D?

Uma ponte H–L293D é um circuito integrado especialmente desenhado para facilitar a utilização de servos DC.

Olhando para o esquema acima podemos facilmente explicar o funcionamento de uma ponte H-L293D. Basicamente o que acontece é que quando queremos que o servo rode para um dos lados fechamos o circuito T1 e T2, fluindo então uma corrente de 9V a 12V pelo motor até ao GND, sendo que a reversão do servo é feita da mesma forma, mas agora fechando o circuito em T4 e T5.

A ponte H–L293D possui dois esquemas destes, um de cada lado do circuito integrado, o que permite a utilização de dois servos em simultâneo.

Como podem ver no esquema eléctrico que desenhei, o circuito eléctrico é igual para os dois servos, ou seja com a ponte H–L293D ao centro a comandar e a receber a informação do Arduino e a distribuí-la correctamente para os servos.

A energia necessária é proveniente de uma bateria de 9.2V que entra pela entrada Jack DC do Arduino, e deve ser sempre enviada pelo Jack DC devido a este ter alguns sistemas de protecção contra picos de corrente que em caso de sobrecarga poderão proteger o Arduino de problemas.

Arduino e a sua Programação

Após a implementação do esquema eléctrico é necessário programar a parte lógica para que possa existir informação a ser enviada para a ponte H-L293D e respectivamente para os servos.

Neste artigo irei apenas abordar uma pré-programação do Arduino de modo a que o movimento seja autónomo, sem qualquer influência do utilizador, mas no próximo artigo pegarei novamente neste exemplo e mostrarei como controlar os servos utilizando o teclado do computador como método de input.

O código que usei para a programação do Arduino foi o seguinte:

//Definição dos Pinos de Input do Arduino
int motorPin1 = 4;
int motorPin2 = 5;
int motorPin3 = 10;
int motorPin4 = 11;
int delayTime = 500;

void setup()
{
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
}

void loop()
{
  //Aplicação do Código a uma sucessão de movimentos
  frente();
  delay(1000);
  direita();
  delay(1000);
  esquerda();
  delay(1000);
  tras();
  delay(1000);
  esquerda();
  delay(1000);
  direita();
  delay(1000);
  parado();
  delay(1500);
} 

//Função de Movimento para a Frente
void frente()
{
  analogWrite(motorPin1, 80);
  analogWrite(motorPin2, 0);
  analogWrite(motorPin3, 80);
  analogWrite(motorPin4, 0);
}

//Função de Movimento para a Trás
void tras()
{
  analogWrite(motorPin1, 0);
  analogWrite(motorPin2, 80);
  analogWrite(motorPin3, 0);
  analogWrite(motorPin4, 80);
}

//Função de Movimento para a Direita
void direita()
{
  analogWrite(motorPin1, 100);
  analogWrite(motorPin2, 0);
  analogWrite(motorPin3, 0);
  analogWrite(motorPin4, 100);
} 

//Função de Movimento para a Esquerda
void esquerda()
{
  analogWrite(motorPin1, 0);
  analogWrite(motorPin2, 100);
  analogWrite(motorPin3, 100);
  analogWrite(motorPin4, 0);
} 

//Função Sem Movimento
void parado()
{
  analogWrite(motorPin1, 0);
  analogWrite(motorPin2, 0);
  analogWrite(motorPin3, 0);
  analogWrite(motorPin4, 0);
}

Conclusão

Neste pequeno tutorial expliquei de uma forma bastante simples como usar uma ponte H–L293D para controlar servos usando o Arduino como micro-controlador. Usando este esquema poderão criar pequenos carros comandados (numa fase seguinte irei explicar como fazer o input dos dados via teclado) ou qualquer outra coisa com movimento que o utilizador imagine.

O micro-controlador Arduino permite criar um sem número de invenções, sendo facilmente programado para quem já tenha algumas noções base sobre a linguagem de programação C/C++.

Publicado na edição 39 (PDF) da Revista PROGRAMAR.