Ir ao conteúdo
  • Cadastre-se
Italo Resende

Carro arduino seguidor de linha que desvia de obstáculos.

Recommended Posts

Pessoal, bom dia.

 

Estou com um grande problema e queria ver se alguém já passou por isso aqui. Vamos lá!

 

Estou realizando a programação de um carro seguidor de linha e que desvia de obstáculos, o que acontece é o seguinte, estava tudo funcionando corretamente, o seguidor de linha ok, as baterias estão com uma duração satisfatória, até que resolvi colocar o ultrassônico. Após colocar o sensor ultrassônico, adicionei algumas coisas ao código que já estava pronto e percebi que ele estava obedecendo os comandos, pelo serial monitor, pude notar que estava medindo as distâncias corretamente e então decidi começar as comparações, primeiramente, decidi colocar que se a distância fosse maior que 10cm ele iria seguir a linha normalmente, caso contrário, quando chegasse a 10cm ou menos do objeto ele ia voltar pra trás, realizei apenas para testes, se tudo corresse bem eu iria realizar a rota para desvio.

 

Ao realizar a programação e testar na bancada, percebi que estava ok, eu passava um papel abaixo dos sensores de linha e eles reagiam, quando colocava um obstáculo o sensor ultrassônico também reagia, resolvi tirar da bancada e testar no chão, foi aí que veio o problema, ao remover o cabo USB do arduino, ele simplesmente parou de andar, parou de rodar ou realizar qualquer ação. Rapidamente me veio a cabeça que era bateria, coloquei duas baterias novas, de 3.7V, 8800mah, nada de funcionar, coloquei mais duas baterias em paralelo, duas para o arduino e duas para a ponte, nada de funcionar, deixei apenas duas baterias novamente, voltei com o carro pra bancada, deixei todas as linhas referente ao ultrassom comentadas no código e voltei a testar, o carro seguiu linha normalmente, com as mesmas baterias, voltei de novo pra bancada, apliquei o código do ultrassom de novo e nada, mesmo problema, quando está na bancada, o serial monitor faz a medição, o comando obedece à distância, mas quando tiro o cabo USB que liga o arduino no computador, ele para de funcionar na hora. Estou iniciando agora no arduino, queria uma ajuda se possível, o modelo do ultrassônico é o HC-SR04. Abaixo estou enviando o código.



#define ir_dir 4 //configura o sensor direito no pino 4
#define ir_esq 2 //configura o sensor esquerdo no pino 2
#define echo_pin 8 //recebe o pulso do echo pino 8
#define trig_pin 7 //envia o pulso para gerar o echo pino 7

long distanciag = 0;

int sensor_ir_esq;
int sensor_ir_dir;
int MR1 = 5;  //ligado pino 5 arduino
int MR2 = 6;  //ligado pino 6 arduino
int ML1 = 12;  //ligado pino 12 arduino
int ML2 = 13;  //ligado pino 13 arduino
int speedpinA = 11;  //define ENA pino 11 (aceleracao)
int speedpinB = 10; //define ENB pino 10 (aceleracao)

void setup ()

 {
  
   Serial.begin(9600);
   pinMode(echo_pin, INPUT); //entrada recebe
   pinMode(trig_pin, OUTPUT); //saída envia

   //configura sensores
   pinMode (ir_esq, INPUT);
   pinMode (ir_dir, INPUT);
  
   //configura motores
   pinMode (MR1, OUTPUT); //pino 5
   pinMode (MR2, OUTPUT); //pino 6
   pinMode (ML1, OUTPUT); //pino 12
   pinMode (ML2, OUTPUT); //pino 13
   pinMode (speedpinA, OUTPUT); //pino 11
   pinMode (speedpinB, OUTPUT); //pino 10

 }

void loop ()   

 {

   distanciag = distancia();

   Serial.print("Distância em CM: ");
   Serial.println(distanciag); 


  if(distanciag < 10)
  {    //andar pra tras
       digitalWrite (MR1, HIGH);
       digitalWrite (MR2, LOW);
       digitalWrite (ML1, HIGH);
       digitalWrite (ML2, LOW);  
  }

  else
  {

   sensor_ir_esq = digitalRead (ir_esq);
   sensor_ir_dir = digitalRead (ir_dir);
  
   if((sensor_ir_esq==1)&&(sensor_ir_dir==1)) //frente
     {
      frente();
      analogWrite (speedpinA, 70);
      analogWrite (speedpinB, 70);
     }
  
   if((sensor_ir_esq==0)&&(sensor_ir_dir==1)) //esquerda
     {
       esquerda();
       analogWrite (speedpinA, 200);
       analogWrite (speedpinB, 200);
     }
  
   if((sensor_ir_esq==1)&&(sensor_ir_dir==0)) //direita
     {
       direita();
       analogWrite (speedpinA, 200);
       analogWrite (speedpinB, 200);
     }
  
   if((sensor_ir_dir==0)&&(sensor_ir_esq==0)) //parar
     {
       analogWrite (speedpinA, 0);
       analogWrite (speedpinB, 0);
     }
  }


 }


// Funcoes

long distancia()

{
   digitalWrite(trig_pin, LOW); //seta o pino como desligado
   //delayMicroseconds(2);
   digitalWrite(trig_pin, HIGH); //seta o pino como ligado
   //delayMicroseconds(10);
  
   long duration = pulseIn(echo_pin, HIGH); //pulseIn lê o tempo entre a chamada e o pino entrar em high
   long distancia = duration /29 /2; //calculo baseado em s=v.t, tempo dobrado pois é ida e volta do ultrasom

   return(distancia);
}

int frente()
{
       digitalWrite (MR1, LOW);
       digitalWrite (MR2, HIGH);
       digitalWrite (ML1, LOW);
       digitalWrite (ML2, HIGH);
}

int direita()
{
       digitalWrite (MR1, HIGH);
       digitalWrite (MR2, LOW);
       digitalWrite (ML1, LOW);
       digitalWrite (ML2, HIGH);
}

int esquerda()
{
       digitalWrite (MR1, LOW);
       digitalWrite (MR2, HIGH);
       digitalWrite (ML1, HIGH);
       digitalWrite (ML2, LOW);
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×