Etiquetas: , , , ,

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

  • Computador
  • Placa Arduino UNO
  • Cabo USB para conectar a placa Arduino ao PC
  • 1 x SN754410
  • 1 x Breadboard
  • 1 x Motor CC
  • Cabos de conexão

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.

dcmotor-robotbase-ttgm Controlar um motor CC com Arduino

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.

h-bridge-sn754410 Controlar um motor CC com Arduino
pont-h Controlar um motor CC com Arduino

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.

sn754410-connections-500x500 Controlar um motor CC com Arduino

Relembremos essas funções:

  • Os pinos GND conectam-se entre si e devem estar ligadas à terra do projecto.
  • O pino +5V alimenta o circuito lógico e pode ser ligado ao terminal +5V da placa Arduino.
  • M1 Enable e M2 Enable permitem ativar as duas pontes correspondentes. Elas recebem um sinal digital ALTO ou BAIXO do Arduino.
  • M1/M2 Forward, M1/M2 Reverse permitem enviar uma tensão ao pino do motor, para controlá-lo nas duas direções. Eles recebem um sinal PWM para modular a velocidade de rotação.
  • O pino +Motor Power IN recebe a tensão de alimentação dos motores (5,6, 7V às vezes até 24V)
  • Os pinos restantes, Motor 1 e Motor 2, são ligados aos pinos dos motores.

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.

dcmotor-sketch-bb-1 Controlar um motor CC com Arduino

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