Prezados, bom dia!
Estou trabalhando em um projeto de robô o qual utiliza o controlador L298N para acionar dois motores DC. Estou utilizando o esquema da imagem em anexo porém estou utilizando as entradas de 2 a 5 no Arduino Uno R3 e também estou utilizando uma fonte externa (bateria Li-po 11,1 V, 2,2 A) que também alimenta o Arduino através da saída 5V do controlador e da porta Vin do Arduino. Já tentei todos os métodos que encontrei na internet e utilizei 5 controladores mas nada faz com que os motores funcionem. Segue abaixo o código, ainda incompleto, que estou utilizando:
int obstaculoPin = 7;
int obstaculo = HIGH;
int IN1 = 2;
int IN2 = 3;
int IN3 = 4;
int IN4 = 5;
void setup() {
// put your setup code here, to run once:
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(obstaculoPin, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
// haObstaculo();
andarFrente();
}
// Verifica se há obstáculo a frente e retorna true caso exista e false caso não tenha.
boolean haObstaculo() {
boolean x;
obstaculo = digitalRead(obstaculoPin);
if (obstaculo == LOW) {
Serial.println("OBSTACULO!");
x = true;
}
else {
Serial.println("limpo");
x = false;
}
delay(200);
return x;
}
void andarFrente() {
//Gira o Motor A no sentido horario
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
delay(2000);
//Para o motor A
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
delay(500);
//Gira o Motor B no sentido horario
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
delay(2000);
//Para o motor B
digitalWrite(IN3, HIGH);
digitalWrite(IN4, HIGH);
delay(500);
//Gira o Motor A no sentido anti-horario
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
delay(2000);
//Para o motor A
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
delay(500);
//Gira o Motor B no sentido anti-horario
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
delay(2000);
//Para o motor B
digitalWrite(IN3, HIGH);
digitalWrite(IN4, HIGH);
delay(500);
}
Caso alguém possa me ajudar, desde já agradeço muito.
Tags:
As respostas para este tópico estão encerradas.
Dá uma olhada neste post, acabo de colocar o código fonte de um carrinho lá:
http://labdegaragem.com/forum/topics/gentileza-amigos-projeto-de-um...
Caro professor Francesco, perdoe a minha falta de habilidade em navegar pelos posts deste forum, mas não localizei o código que me indicou. Acredito também que o problema não seja o meu código já que é um código de exemplo utilizado em todos os exemplos de funcionamento do L298N que vi pela internet a fora. Creio que seja algo relacionado à forma que liguei os componentes.
Boa noite,
Primeira recomendação : - não use o regulador de 5V do driver L298 para alimentar o seu Arduino.
Ele possivelmente não esta suportando a carga. E tem também o problema de ruidos elétricos provocados pleo motor.
Use a bateria para alimentar o Arduino, usando um conector de 12V .
Qual sensor de obstáculo esta usando na porta 7 ?
Achei na WEB , essa informação sobre o seu sensor :
Nível lógico da saída quando obstáculo detectado: Nível lógico BAIXO
Não entendi essa rotina de obstáculo. Esta sempre dando delay.
Na verdade ela esta desativada.
boolean x;
obstaculo = digitalRead(obstaculoPin);
i f (obstaculo == LOW)
{
Serial.println("OBSTACULO!");
x = true;
}
else
{
Serial.println("limpo");
x = false;
}
delay(200);
return x;
}
Essa rotina ainda não está pronta, o sensor nem está conectado à placa ainda. No momento estou pelejando para fazer com que os motores funcionem.
Dê uma estudada nesse manual do L298 (anexado) .
Andei olhando o manual e estou utilizando o mesmo esquema indicado na página 9, a diferença é que estou utilizando a saída 5V para alimentar o Arduino. Irei tentar com fontes diferentes para cada componente para verificar a sua hipótese da sobrecarga e dos ruídos elétricos. Quaisquer novidades postarei aqui.
Encontrei o seu erro ! Jogo dos 7 erros !
No seu Sketch :
int IN1 = 2;
int IN2 = 3;
int IN3 = 4;
int IN4 = 5;
Mas no diagrama esta usando outros pinos ! Mande o link da sua placa.
int IN1 = 4;
int IN2 = 5;
int IN3 = 6;
int IN4 = 7;
O diagrama é genérico, somente o utilizei para mostrar como fiz, porém como disse anteriormente, e o senhor citou, utilizei os pinos de 2 a 5.
Informe como estão todos os jumpers do seu módulo. Era para funcionar.
Tire uma foto.
Mande o link da sua placa.
Qual motor CC esta usando (é para 12V) ? Se conectar diretamente na bateria, os motores giram ?
Boa tarde senhor José Gustavo. Encontrei o problema em meu projeto. Foi uma coisinha besta, erro de iniciante. Eu estou utilizando pinos PWM para controlar a velocidade do meu robô mas não estava definindo a velocidade. Refiz o projeto que ficou desta forma:
/*Pinagem do arduino*/
//motor A
int
IN1 = 2 ;
int
IN2 = 4 ;
int
velocidadeA = 3;
//motor B
int
IN3 = 6 ;
int
IN4 = 7 ;
int
velocidadeB = 5;
//variavel auxiliar
int
velocidade = 0;
//Inicializa Pinos
void
setup(){
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
pinMode(velocidadeA,OUTPUT);
pinMode(velocidadeB,OUTPUT);
}
void
loop(){
/*Exemplo de velocidades no motor A*/
//Sentido Horario
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
//Alta
analogWrite(velocidadeA,230);
//Intermediaria
analogWrite(velocidadeA,150);
//Baixa
analogWrite(velocidadeA,80);
/*Exemplo de variacao de velocidade no motor B*/
//Sentido Horario
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
//velocidade de 0 a 255
while
(velocidadeB < 255){
analogWrite(velocidadeB,velocidade);
velocidade = velocidade + 10;
delay(50);
}
//velocidade de 255 a 0
while
(velocidadeB > 0){
analogWrite(velocidadeB,velocidade);
velocidade = velocidade - 10;
delay(50);
}
}
/*Pinagem do arduino*/
//motor A
int
IN1 = 2 ;
int
IN2 = 4 ;
int
velocidadeA = 3;
//motor B
int
IN3 = 6 ;
int
IN4 = 7 ;
int
velocidadeB = 5;
//variavel auxiliar
int
velocidade = 0;
//Inicializa Pinos
void
setup(){
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
pinMode(velocidadeA,OUTPUT);
pinMode(velocidadeB,OUTPUT);
}
void
loop(){
/*Exemplo de velocidades no motor A*/
//Sentido Horario
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
//Alta
analogWrite(velocidadeA,230);
//Intermediaria
analogWrite(velocidadeA,150);
//Baixa
analogWrite(velocidadeA,80);
/*Exemplo de variacao de velocidade no motor B*/
//Sentido Horario
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
//velocidade de 0 a 255
while
(velocidadeB < 255){
analogWrite(velocidadeB,velocidade);
velocidade = velocidade + 10;
delay(50);
}
//velocidade de 255 a 0
while
(velocidadeB > 0){
analogWrite(velocidadeB,velocidade);
velocidade = velocidade - 10;
delay(50);
}
}
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por