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.
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:
Para montar o circuito, visualize na imagem a seguir como conectar os componentes entre a placa Arduino e a breadboard.
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;
}