Site icon AranaCorp

Controlar um motor CC com Arduino

3.3
(3)

Um dos principais objectivos da robótica é fazer objectos se moverem por si sós. Para isso, é muito comum utilizar motores elétricos de corrente contínua, em especial no caso de plataformas móveis. Neste artigo, veremos como controlar um motor CC com uma placa Arduino e uma ponte H.

Leia antes: Programar com Arduino

Equipamento

Motor CC

É comum que os motores de corrente contínua tenham uma caixa de redução, para aumentar o seu torque tomando menos espaço. O motor CC é muito fácil de utilizar. Para fazê-lo funcionar, basta aplicar uma tensão elétrica aos seus terminais. O sinal e o nível da tensão determinarão o sentido e a velocidade da rotação.

Para controlar a tensão aplicada aos terminais de um motor de corrente contínua, pode-se utilizar um relé ou uma ponte H.

Ponte H

A ponte H transmite a potência elétrica ao motor e modula a tensão em função dos comandos da placa Arduino. Ela pode ser representada por quatro interruptores que dirigem a corrente de acordo com os comandos da placa e modulam a direção e a velocidade de rotação do motor.

A solução que utilizamos aqui é o componente SN754410NE. Ele pode controlar dois motores de corrente contínua e possui diversos pinos com funções próprias.

Relembremos essas funções:

Ao escolher um componente, preste sempre atenção aos limites de corrente e de tensão para funcionamento.

N.B.: Existem cartões disponíveis para facilitar a conexão, como o módulo L298N.

Esquema de ligação

A placa Arduino pode ser alimentada pelo computador por entrada USB.

Programa

Código básico

Para controlar o motor, é preciso ativar a ponte H correspondente e aplicar um comando PWM ao terminal Forward ou Reverse, que correspondem aos dois sentidos de rotação do motor. Utilizamos o pino 2 para ativar a ponte H com um estado alto ou baixo e os pinos 3 e 5, que podem gerar um sinal PWM, para administrar a velocidade e o sentido de rotação do motor.

// Constants
const int enableBridge1 = 2;
const int MotorForward1 = 3;
const int MotorReverse1 = 5;

// Variables
int Power = 80; //Motor velocity between 0 and 255

void setup(){
  pinMode(MotorForward1,OUTPUT);
  pinMode(MotorReverse1,OUTPUT);
  pinMode(enableBridge1,OUTPUT);
}

void loop(){
  digitalWrite(enableBridge1,HIGH); // Active pont en H

  // Tourne dans le sens direct pendant 2 secondes
  
  analogWrite(MotorReverse1,0);
  analogWrite(MotorForward1,Power);
  delay(2000);
  
  // Tourne dans le sens indirect pendant 3 secondes
  analogWrite(MotorForward1,0);
  analogWrite(MotorReverse1,Power);
  delay(3000);
  
  //Arrête le moteur pendant 1 seconde
  analogWrite(MotorForward1,0);
  analogWrite(MotorReverse1,0);
  digitalWrite(enableBridge1,LOW); 
  delay(1000);
}

Funções

Quando um robô tem muitos componentes, costuma ser interessante criar subfunções para tornar o código principal mais legível.

// Constants
const int enableBridge = 2;
const int MotorForward = 3;
const int MotorReverse = 5;

// Variables
int Power = 80; //Vitesse du moteur entre 0 et 255

void setup(){
  dcBegin();
}

void loop(){
  dcForward(Power);
  delay(2000);
  
  dcReverse(Power);
  delay(3000);
  
  dcStop();
  delay(1000);
}

void dcBegin(){
  // Initialise les pines utilisées pour le moteur
  pinMode(MotorForward,OUTPUT);
  pinMode(MotorReverse,OUTPUT);
  pinMode(enableBridge,OUTPUT);
  }

void dcForward(int P){
  digitalWrite(enableBridge,HIGH); // Active pont en H
  // Tourne dans le sens Forward à la vitesse spécifiée par P
  analogWrite(MotorReverse,0);
  analogWrite(MotorForward,P);
}

void dcReverse(int P){
  digitalWrite(enableBridge,HIGH); // Active pont en H
  // Tourne dans le sens Reverse à la vitesse spécifiée par P
  analogWrite(MotorForward,0);
  analogWrite(MotorReverse,P);
}

void dcStop(){
  // Arrête le moteur et désactive le pont en H
  analogWrite(MotorForward,0);
  analogWrite(MotorReverse,0);
  digitalWrite(enableBridge,LOW); 
}

.A partir de agora, já pode controlar qualquer motor de corrente contínua com este código simples.

Referências

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie

How useful was this post?

Click on a star to rate it!

Average rating 3.3 / 5. Vote count: 3

No votes so far! Be the first to rate this post.

Exit mobile version