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.

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

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.

15 respostas

  1. gabriel

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

    Responder
  2. Marcelo da Rosa

    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.

    Responder
  3. ednardo

    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

    Responder
    • Francisco de Assis

      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.

      Responder
  4. flavio

    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

    Responder
    • Francisco

      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.

      Responder
  5. Eduardo

    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?

    Responder
  6. Vinicius Almeida

    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?

    Responder
  7. james aguiar

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

    Responder

Deixe uma resposta

Seu e-mail não será publicado.