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.
ola essa biblioteca foi muito util, muito obrigado, mas eu gostria de saber quais sao as suas funcoes e o q significam, muito obrigado !
Você pode verificar na documentação, recentemente sofreu algumas alterações. Segue link: https://github.com/rodriguesfas/DMPH_L298N
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.
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.
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
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.
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?
Amigo, nunca testei usar a biblioteca com motor de passo, apena com motores DC, em breve farei esse teste e postarei as configurações caso necessário. Desde já agradeço, abraços.
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.
Da para usar a biblioteca no motor de passo.
De uma olhada nesse tutorial que pode lhe ajudar muito.
http://www.arduinoecia.com.br/2014/08/ponte-h-l298n-motor-de-passo.html
http://blog.vidadesilicio.com.br/arduino/modulo-ponte-h-l298n-arduino/
Em breve estarei fazendo um tutorial usado a biblioteca com o motor de passo, outra coisa se você conseguir podemos postar aqui o seu modelo.
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?
Depende amigo, o Jumper que você está falando é o do PWM ou da Alimentação 6V/12V?
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();
}
Olá, recomendo que use a biblioteca citada: https://github.com/rodriguesfas/DMPH_L298N
Ela facilitará muito na compreensão do que você está fazendo, antes de verificar seu código preciso conhecer sua montagem, geralmente o problema é a nível de hardware, manda a descrição dos componentes que esta usando e de preferencia o desenho esquemático da montagem no Fritzing. Abraço.
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”.
e pra usar um joystck ???e controlar o sentido e a velocidade
Da uma olhada nesse tutorial: http://clubedosgeeks.com.br/programacao/arduino/arduino-controlando-um-servo-motor-com-joystick