Tutorial – L298N Módulo controlador de 2 motores e Arduino
Adptação do site: http://tronixlabs.com/news/tutorial-l298n-dual-motor-controller-module-2a-and-arduino/ Posted by John Boxall on November 22, 2014
Neste tutorial vamos explicar como usar o Módulo Controlador L298N H- ponte para controlar 2 motores com o Arduíno. Isto permite controlar a velocidade e a direção de dois motores de corrente contínua, ou controlar um motor passo a passo bipolar com facilidade. O módulo de ponte-H L298N pode ser usado com motores que têm uma tensão de alimentação entre 5 e 35V DC.
O módulo tem também um regulador de 5V, se a tensão de alimentação for até 12V é possível ter uma fonte de 5V no módulo.
Primeiro vamos identificar as ligações, em seguida, explicar como controlar motores DC , e por fim, um motor de passo.
Pins de saída do módulo
Observa a imagem seguinte – os números da imagem correspondem à relação da lista a seguir à imagem:

- Terminal + do Motor 1 DC ou A+ do motor passo a passo
- Terminal – do Motor 1 DC ou A- do motor passo a passo
- Jumper de 12V – se estiver a aplicar-se uma tensão de alimentação com mais de 12V DC deve remover-se o jumper . Isso permite ativar o regulador de 5V no módulo.
- Aqui liga-se a tensão de alimentação do motor, o valor máximo é de 35V DC . Remova o jumper 12V se a tensão for maior do que 12V DC
- GND – Ground
- 5V de saída se o jumper de 12V estiver colocado, ideal para alimentar o Arduino (etc )
- Jumper para ativar o motor 1 DC. Deixe no lugar o jumper quando se utiliza um motor passo a passo . Conectar-se a saída de PWM para controle de velocidade do motor 1 DC.
- IN1
- IN2
- IN3
- IN4
- Jumper para ativar o motor 2 DC. Deixe no lugar o jumper quando se utiliza um motor passo a passo . Conectar-se a saída de PWM para controle de velocidade do motor 2 DC.
- Terminal + do Motor 2 DC ou B+ do motor passo a passo
- Terminal – do Motor 2 DC ou B- do motor passo a passo
Controlando os Motores DC
Para controlar um ou dois motores DC é bastante fácil. Primeiro ligar cada um dos motores às conexões A e B no módulo L298N. Se por exemplo estiver usar dois motores para um robô assegure-se de que a polaridade dos motores é a mesma, caso contrário, é preciso trocá-las garantido que ambos os motores rodam para afrente ou para trás e não um para a frente e outro para trás!
Em seguida, ligar a fonte de alimentação: o positivo para no pino 4 do módulo e o negativo / GND no pino 5. Se você fornecer uma tensão até 12V deve deixar o jumper nos 12V ( ponto 3 na imagem de cima) e 5V estará disponível do pino 6 do módulo . Desta forma pode alimentar-se o pino de 5V do Arduino ligando-o da fonte de alimentação dos motores. Não se esqueça de ligar Arduino GND ao pino 5 no módulo , para completar a alimentação do circuito.
Agora precisa de seis pinos de saída digitais do Arduino , dois destes têm de ser PWM ( modulação por largura de pulso). PWM pinos são indicadas pela til ( “~” ) ao lado do número de pinos, como na figura seguinte:

Por fim, ligam-se os pinos de saída digital do Arduino ao módulo L298N. Consideramos por exemplo que temos dois motores de corrente contínua, os pins digitais D9, D8, D7 e D6 serão conectados aos pinos IN1 , IN2 , IN3 e IN4 respectivamente. Em seguida, liga-se o D10 ao módulo no pino 7 (mas primeiro tem de se remova o jumper) e D5 ao módulo no pino 12 (nesta situação também é necessário remova o jumper).
A direcção do motor é controlada através do envio de um sinal de HIGH ou LOW para cada motor (ou canal). Por exemplo para o motor um, um HIGH para IN1 e uma LOW para IN2 fará com que ele vire para uma direção, e uma LOW e HIGH fará com que ele gire na outra direcção.
No entanto, os motores não vão virar até que um sinal HIGH seja aplicado no pino (7 para o motor um, 12 para motor de dois). E eles podem ser desligados com um sinal LOW ao(s) mesmo(s) pino(s) . No entanto, se for preciso controlar a velocidade dos motores, o sinal PWM do pino digital ligado ao pino respectivo permite garantir a mesma.
Os passos anteriores devem ser executados para demonstrar a forma de controlar um motor DC. No exemplo utilizamos dois motores de corrente contínua e um Arduino UNO ligados de acordo com o descrito em cima, juntamente com uma fonte de alimentação externa. Em seguida, tem de se fazer o upload do programa seguinte para o Arduíno:
PROGRAMA
/* Clube de ROBÓTICA ESGC - 2017 Autor Prof. Ramiro Martins Estudo do controlador de velocidade L298N e ensaio dos movimentos dos motores Foram utilizados 2 demos um para os movimentos básicos(frente, trás, direita e esquerda) e outro para a acelraração e desacelaração */ // Ligar os pins da controladora aos pins digitais do Arduino // Motor A da esquerda int enA = 10; int in1 = 9; int in2 = 8; // Motor B da direita int enB = 5; int in3 = 7; int in4 = 6; void setup() { // definir todos os pinos de saída da controladora dos motores pinMode(enA, OUTPUT); pinMode(enB, OUTPUT); pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); } void demoUm() { // esta função irá fazer rodar os motores no mesmo sentido a uma velocidade fixa // liga o motor A digitalWrite(in1, HIGH); digitalWrite(in2, LOW); // a velocidade é definida para 200 o intervalo é de 0 a 255 analogWrite(enA, 200); // liga o motor B digitalWrite(in3, HIGH); digitalWrite(in4, LOW); // a velocidade é definida para 200 o intervalo é de 0 a 255 analogWrite(enB, 200); // as funções anteriores serão executadas durante 2 segundos delay(2000); // agora troca-se as direções dos motores A e B // mas primeiro desligam-se os motores digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); // as funções anteriores serão executadas durante 0,2 segundos delay(200); //agora sim o motores começam a rodar em sentido contrário digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); // as funções anteriores serão executadas durante 2 segundos delay(2000); // agora desligam-se os motores digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); // as funções anteriores serão executadas durante 2 segundos delay(2000); // rodar para a esquerda seguindo em frente // liga o motor A digitalWrite(in1, HIGH); digitalWrite(in2, LOW); // a velocidade é definida para 20 rodando mais devagar analogWrite(enA, 20); // liga o motor B digitalWrite(in3, HIGH); digitalWrite(in4, LOW); // a velocidade é definida para 200 rodando mais depressa que o A - deslocamento para a esquerda analogWrite(enB, 200); // as funções anteriores serão executadas durante 2 segundos delay(2000); // rodar para a direita seguindo em frente // liga o motor A digitalWrite(in1, HIGH); digitalWrite(in2, LOW); // a velocidade é definida para 200 rodando mais depressa que o A - deslocamento para a direita analogWrite(enA, 200); // liga o motor B digitalWrite(in3, HIGH); digitalWrite(in4, LOW); // a velocidade é definida para 20 rodando mais devagar analogWrite(enB, 20); // as funções anteriores serão executadas durante 2 segundos delay(2000); } void demoDois() { // esta função irá ligar os motores em toda a gama de velocidades possíveis acelerando e desacelerando // nota que a velocidade máxima é determinada pelo próprio motor e a tensão aplicada // os valores PWM enviados pelo analogWrite () são frações da velocidade máxima possível do hardware // Liga os motores digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); // acelera de zero até a velocidade máxima for (int i = 0; i < 256; i++) { analogWrite(enA, i); analogWrite(enB, i); delay(20); } // desacelera da velocidade máxima até a zero for (int i = 255; i >= 0; i--) { analogWrite(enA, i); analogWrite(enB, i); delay(20); } // agora desligam-se os motores digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); } void loop() { // Teste subprograma demoUm demoUm(); // tempo de espera entre o demoUm e o demoDois delay(1000); // Teste subprograma demoDois demoDois(); // tempo de espera após o demoDois delay(1000); }
VIDEO
Video de demonstração: https://youtu.be/5YmEfjjvolU
SITE PARA CONSULTA
Também pode visitar outro site com um exemplo sobre a aplicação desta controladora.
http://blog.filipeflop.com/motores-e-servos/motor-dc-arduino-ponte-h-l298n.html
Lá podem encontrar os esquemas de ligação para os dois tipos de tensões de alimentação.
Também deve consultar o artigo de Arduíno Portugal: Ponte H L298N – Aprenda a controlar a velocidade de um motor DC

