Controle de motores DC com arduino e módulo de ponte H



Para controlar o sentido de rotação de dois motores DC e também suas velocidades, utilizei o módulo de ponte H da Figura 1.



Figura 1 - Keys L298
A ligação entre os pinos do arduino e do módulo é bem simples e está representada na Figura 2. O terminal negativo da bateria deve ser ligado ao GND do módulo. O terminal positivo, ao VMS do módulo. Assim, os motorre receberão 12 V (se a bateria for 12 V) e o arduino vai ser alimentado com 5V através da saída de 5v do Keys L298.
Figura 2 - Ligação entre o arduino e o módulo de ponte H


Figura 3 - Visão geral

Figura 4 - Leds mostram para qual direção o robô iria caso estivesse no chão

Figura 5 -Ligações entre o módulo e o arduino.
Figura 6 -Ligações entre a bateria, os motores e o módulo de ponte H
O código abaixo deve ser copiado e colado na IDE do Arduino. Inicialmente, os dois motores rotacionam no mesmo sentido e com a mesma velocidade. Após 10 segundos, é simulada uma curva à esquerda, o que é feito reduzindo a velocidade da roda esquerda e mantendo a velocidade da roda direita. Em seguida, simula-se uma curva à direita, que usa o mesmo princípio só que a roda que tem a velocidade reduzida é a roda direita.


#define Left_mot 10
#define Right_mot 3
int in1 = 9, in2 = 8;
int in3 = 4, in4 = 5;
int ledL = 2, ledR = 1;

void setup() {
  pinMode (ledL, OUTPUT);
  pinMode (ledR, OUTPUT);
 
  // put your setup code here, to run once:
  pinMode (Left_mot, OUTPUT);
  pinMode (Right_mot, OUTPUT);
     
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);

  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);

  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
}

void virarDireita(){
  digitalWrite(ledL, LOW);
  digitalWrite(ledR, HIGH);
  analogWrite(Left_mot,255);
  analogWrite(Right_mot,50);
}

void virarEsquerda(){
  digitalWrite(ledR, LOW);
  digitalWrite(ledL, HIGH);
  analogWrite(Left_mot,50);
  analogWrite(Right_mot,255);
}

void paraFrente(){
  digitalWrite(ledR, HIGH);
  digitalWrite(ledL, HIGH);
  analogWrite(Left_mot,255);
  analogWrite(Right_mot,255);
}
void loop() {
  paraFrente();
  delay(10000);
  virarEsquerda();  
  delay(10000);
  virarDireita();
  delay(10000);
}





Comentários