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...

Você pode gostar...

19 Resultados

  1. gabriel disse:

    ola essa biblioteca foi muito util, muito obrigado, mas eu gostria de saber quais sao as suas funcoes e o q significam, muito obrigado !

  2. Marcelo da Rosa disse:

    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.

  3. ednardo disse:

    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

    • 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.

  4. flavio disse:

    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

    • Francisco disse:

      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.

  5. Eduardo disse:

    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?

  6. Vinicius Almeida disse:

    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?

  7. james aguiar disse:

    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();
    }

  8. Andre disse:

    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!!

    • 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”.

  9. anderson disse:

    e pra usar um joystck ???e controlar o sentido e a velocidade

Deixe um comentário para Francisco de Assis Cancelar resposta

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