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.
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:
- 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.
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
- “A” grande referência https://www.arduino.cc/
- Leia antes: Programe com Arduino
- Usando o módulo L298N
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie