Ir ao conteúdo
  • Cadastre-se

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


Posts recomendados

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

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!