Library Driver Motor Ponte H L298N – Arduino

logo

Se você usa ou já usou o Driver Motor Ponte H L298N, já deve ter se perguntado se não existe uma library. Para tornar mais legível, eficiente e simples na utilização desse driver, como outros drives ponte H possuem. Se não? Foi isso que indaguei recentemente, e o resultado foi a construção de uma lib. para os requisitos anteriores. Vejamos:

Código sem o uso da biblioteca.

//Consiste em ligar o motor no sentido horário, anti-horário e desligar.

//motor A
int IN1 = 2 ;
int IN2 = 4 ;
int velocidadeA = 3;
 
//motor B
int IN3 = 6 ;
int IN4 = 7 ;
int velocidadeB = 5;
 
//Inicializa Pinos
void setup(){
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
pinMode(velocidadeA,OUTPUT);
pinMode(velocidadeB,OUTPUT);
}
 
void loop(){
 
//Sentido Horario
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(velocidadeA, 100);
 
//Sentido Horario
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
analogWrite(velocidadeB, 100);

delay(5000);

//Deliga motores
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
 
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
 
delay(5000);

//Sentido antihorario
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
analogWrite(velocidadeA, 100);
 
//Sentido antihorario
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(velocidadeB, 100);

delay(5000);

//Deliga motores
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
 
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);

delay(5000);

}

Código usando a biblioteca (mesma função anterior).

//Consiste em ligar o motor no sentido horário, anti-horário e desligar.

#include <DMPH.h>

/**
 * Instancia um objeto chamado motor, passando por parâmetros os pinos de conexão 
 * onde esta ligado o motor (motor, motor, Pino velocidade).
 */
 DMPH motor1(2, 4, 3);
 DMPH motor2(6, 7, 5);

 void setup(){}

 void loop() { // Obs.: velocidade motor 0 á 255
 	motor1.move(100); // valor positivo liga motor no sentido horário com velocidade 100.
 	motor2.move(100);
 	delay(5000); // espera 5 segundos
 	
 	motor1.move(0);
 	motor2.move(0);
 	delay(5000);

 	motor1.move(-100); // valor negativo liga motor no sentido anti-horário com velocidade 100.
 	motor2.move(-100);
 	delay(5000);
 	
 	motor1.move(0);
 	motor2.move(0);
 	delay(5000);
 }

Mais informações sobre a library aqui. E então, o que você acha, é útil? deixe seu comentário, se gostou não deixe de compartilhar.

Francisco de Assis

Servo de DEUS, Mestrando em Ciências da Computação (UFPE) Pós-Graduado em Docência do Ensino Superior (IDJ/UVA), Graduando em Automação Industrial (IFCE), Graduado em Analise e Desenvolvimento de Sistemas (UNILEÃO), casado com a mulher mais maravilhosa, Tamires Alencar e amante Python, Java, Games, Eletrônica, Robótica, Violão, Aviação...

19 thoughts on “Library Driver Motor Ponte H L298N – Arduino

  1. Parabéns Francisco. Muito útil sua Lib. Estava me batendo para usar o L298N e agora ficou mais fácil. Valeu mesmo. Que Deus continue te abençoando. Um abraço.

  2. tenho uma pergunta. o controle da logica na sua biblioteca passa para 6 pinos é isso? os pinos da do PWM liga aonde? tem esquema de ligacao? grato

    1. Opa! Ednardo os pinos são com mostra o código, nessa sequencia mesmo:
      /**
      * Instancia um objeto chamado motor, passando por parâmetros os pinos de conexão
      * onde esta ligado o motor (motor – , motor + , Pino velocidade PWM).
      */
      DMPH motor1(2, 4, 3);
      DMPH motor2(6, 7, 5);

      ou seja o PWM é o 3 e 5, um para cada motor.

  3. ola, estou com dificuldade para da os comandos para a ponte h pelo teclado,
    como posso fazer no programa para ter os resultados que preciso!
    alguém poderia me ajuda

    1. Flávio, quando você envia comando pelo teclado, ou seja pelo monitor serial os dados possivelmente estão indo como tipo string, você tem que receber os dados e converter para o tipo inteiro depois enviar para a função que liga o motor.

  4. Francisco, boa tarde,

    Tenho utilizado o driver L298N para controlar um motor de passo bipolar, entretanto, tenho tido alguns problemas para controlar a velocidade dos passos. Eu fiquei interessado de testar sua biblioteca para tentar solucionar esse problema. Você poderia me dizer que alterações devo realizar em seu código para controlar o sentido, precisão e velocidade do motor de passo com a biblioteca DMPH? E a onde as portas PWM do arduino são conectadas no driver L298N?

      1. Eu que agradeço sua ajuda. Você poderia me dizer em que entrada do driver devo conectar as saidas PWM 3 e 5 do arduino? Se eu souber isso, poderei realizar alguns testes e, se obtiver sucesso, posso postar o resultado aqui.

  5. Francisco, parabéns pelo trabalho realmente ficou legal.

    Uma duvida que surgiu pois fiz as ligações tudo certinho e ainda não esta funcionando, somente liga os motores quando eu coloco o jumper… será que é defeito da placa, ou teria alguma outra forma de fazer?

  6. Olá amigo, admiro seus trabalhos e gostaria de sua ajuda,

    Estou com um código e não está funcionando, nesse caso só gira os motores de uma lado de forma bastante fraca, trata-se de um carrinho com 4 motores (dois de cada lado), ele é aquele projeto para desviar dos obstáculos.

    #include //servo library
    Servo myservo; // create servo object to control servo
    int Echo = A4;
    int Trig = A5;
    int in1 = 6;
    int in2 = 7;
    int in3 = 8;
    int in4 = 9;
    int ENA = 5;
    int ENB = 10;
    int ABS = 110;
    int rightDistance = 0,leftDistance = 0,middleDistance = 0 ;
    void _mForward()
    {
    analogWrite(ENA,ABS);
    analogWrite(ENB,ABS);
    digitalWrite(in1,LOW);
    digitalWrite(in2,HIGH);
    digitalWrite(in3,LOW);
    digitalWrite(in4,HIGH);
    Serial.println(“go forward!”);
    }

    void _mBack()
    {
    analogWrite(ENA,ABS);
    analogWrite(ENB,ABS);
    digitalWrite(in1,HIGH);
    digitalWrite(in2,LOW);
    digitalWrite(in3,HIGH);
    digitalWrite(in4,LOW);
    Serial.println(“go back!”);
    }

    void _mleft()
    {
    analogWrite(ENA,ABS);
    analogWrite(ENB,ABS);
    digitalWrite(in1,LOW);
    digitalWrite(in2,HIGH);
    digitalWrite(in3,HIGH);
    digitalWrite(in4,LOW);
    Serial.println(“go left!”);
    }

    void _mright()
    {
    analogWrite(ENA,ABS);
    analogWrite(ENB,ABS);
    digitalWrite(in1,HIGH);
    digitalWrite(in2,LOW);
    digitalWrite(in3,LOW);
    digitalWrite(in4,HIGH);
    Serial.println(“go right!”);
    }
    void _mStop()
    {
    digitalWrite(ENA,LOW);
    digitalWrite(ENB,LOW);
    Serial.println(“Stop!”);
    }
    /*Ultrasonic distance measurement Sub function*/
    int Distance_test()
    {
    digitalWrite(Trig, LOW);
    delayMicroseconds(2);
    digitalWrite(Trig, HIGH);
    delayMicroseconds(20);
    digitalWrite(Trig, LOW);
    float Fdistance = pulseIn(Echo, HIGH);
    Fdistance= Fdistance/58;
    return (int)Fdistance;
    }

    void setup()
    {
    myservo.attach(3);// attach servo on pin 3 to servo object
    Serial.begin(9600);
    pinMode(Echo, INPUT);
    pinMode(Trig, OUTPUT);
    pinMode(in1,OUTPUT);
    pinMode(in2,OUTPUT);
    pinMode(in3,OUTPUT);
    pinMode(in4,OUTPUT);
    pinMode(ENA,OUTPUT);
    pinMode(ENB,OUTPUT);
    _mStop();
    }

    void loop()
    {
    myservo.write(90);//setservo position according to scaled value
    delay(500);
    middleDistance = Distance_test();
    #ifdef send
    Serial.print(“middleDistance=”);
    Serial.println(middleDistance);
    #endif

    if(middleDistanceleftDistance)
    {
    _mright();
    delay(180);
    }
    else if(rightDistance<leftDistance)
    {
    _mleft();
    delay(180);
    }
    else if((rightDistance<=20)||(leftDistance<=20))
    {
    _mBack();
    delay(180);
    }
    else
    {
    _mForward();
    }
    }
    else
    _mForward();
    }

  7. Olá Francisco,
    usei a biblioteca para controlar dois motores, eles estão funcionando corretamente mas não consigo controlar a velocidade. Eles só se movem quando coloco uma velocidade >= 150.
    Devo ligar os pinos PWM de velocidade em uma porta digital, certo? O que devo estar fazendo errado?
    Valeu!!

    1. verifique se você está conectando os pinos corretamente
      /**
      * onde esta ligado o motor (pino motor, pino motor, Pino velocidade).
      */
      DMPH motor1(2, 4, 3);
      DMPH motor2(6, 7, 5);

      Me passa um email com um print de sua montagem e cópia do código fonte “parte que você está tendo problemas”.

Deixe um comentário para gabriel Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *


Deprecated: Creation of dynamic property Daisy_Blog_Google_Local::$files is deprecated in /home2/clube692/public_html/wp-content/themes/daisy-blog/inc/blocks/font-family/inc/class-fonts-google-local.php on line 77

Deprecated: Creation of dynamic property Daisy_Blog_Google_Local::$files is deprecated in /home2/clube692/public_html/wp-content/themes/daisy-blog/inc/blocks/font-family/inc/class-fonts-google-local.php on line 77