Magos do Arduino

Módulo L298N

Aprenda a utilizar módulo L298N com o Arduino

Magos do Arduino

Módulo L298N

Circuito integrado baseado no CI L298N de ponte H duplo, capaz de controlar dois motores DC ao mesmo tempo.

Ponte H é um circuito eletrônico que permite controlar o sentido de rotação de um motor DC, e também sua velocidade (quando combinado com PWM).

O nome "ponte H" vem do formato do circuito, que lembra a letra "H".

Suporta entre 5v e 35v para os motores DC.

Funciona com 5v para alimentação da lógica interna, possuindo um regulador 5v embutido.

Permite controle de velocidade (via PWM) e direção de rotação dos motores.

Os pinos IN1, IN2, IN3 e IN4 definem a direção da rotação.

Os pinos ENA e ENB habilitam cada ponte H e podem receber PWM.

OUT1, OUT2, OUT3 e OUT4 são utilizados para conectar os motores DC.

GND e 12v são os pinos de entrada, e 5v é de saída e pode alimentar o Arduino caso necessário.

Módulo L298N

Neste projeto você criará um circuito que faz o uso de módulo L298N com o Arduino.

Para a criação deste circuito serão necessários os seguintes componentes:

  • 1x Breadboard
  • 1x Arduino UNO
  • 1x Módulo L289N
  • 1x Push Button
  • 1x Potenciômetro de 10k
  • 1x Motor DC de 3v-6v
  • 1x Fonte de entrada de 5v-12v
  • Jumpers

Circuito módulo L298N

Para montar o circuito, visualize na imagem a seguir como conectar os componentes entre a placa Arduino e a breadboard.

Circuito módulo L298N

Código fonte para o circuito do módulo L298N

Uma vez criado o circuito, use o código fonte a seguir no Arduino IDE para fazer o upload dele na placa Arduino e assim ver o resultado do circuito em funcionamento.

/**
 * Código do curso Magos do Arduino para controlar um motor dc 
 * com o módulo L298N no Arduino.
 * 
 * Controle de um motor dc de ~5v utilizando o módulo L298N.
 * Permite controle de velocidade com um potenciômetro e rotacionar o motor 
 * em ambas as direções ao pressionar um push button.
 *
 * (c) Copyright KazaleIT
 * @kazaleitoficial no YouTube
 **/

#define PINO_POTENCIOMETRO A0
#define PINO_BOTAO_DIRECAO 2
#define PINO_VELOCIDADE 3
#define PINO_MOTOR_1 6
#define PINO_MOTOR_2 7

// mantém a direção da rotação do motor, que pode ser 1 ou -1
int direcao = 1;

void setup() {
  pinMode(PINO_POTENCIOMETRO, INPUT);
  pinMode(PINO_BOTAO_DIRECAO, INPUT_PULLUP);
  pinMode(PINO_VELOCIDADE, OUTPUT);
  pinMode(PINO_MOTOR_1, OUTPUT);
  pinMode(PINO_MOTOR_2, OUTPUT);

  // inicializa a rotação padrão do motor
  digitalWrite(PINO_MOTOR_1, LOW);
  digitalWrite(PINO_MOTOR_2, HIGH);
}

void loop() {
  // controla a velocidade do motor
  int valorPotenciometro = analogRead(PINO_POTENCIOMETRO);
  int velocidade = map(valorPotenciometro, 0, 1023, 0, 255);
  analogWrite(PINO_VELOCIDADE, velocidade);
  delay(200);

  // controla a rotação do motor
  int estadoBotao = digitalRead(PINO_BOTAO_DIRECAO);
  if (estadoBotao == LOW) {
    inverterDirecao();
    delay(200);
  }
}

// inverte a direção de rotação do motor
void inverterDirecao() {
  if (direcao == 1) {
    digitalWrite(PINO_MOTOR_1, HIGH);
    digitalWrite(PINO_MOTOR_2, LOW);
  } else {
    digitalWrite(PINO_MOTOR_1, LOW);
    digitalWrite(PINO_MOTOR_2, HIGH);
  }

  // alterna o valor entre 1 e -1
  direcao *= -1;
}