collapse

* Posts Recentes

Limitador de corrente simples por vasco
[07 de Dezembro de 2019, 17:07]


Baterias Lipo Potentes por jm_araujo
[07 de Dezembro de 2019, 16:03]


Empresas que bobinem alto-falastes ou motores? por fergas
[06 de Dezembro de 2019, 20:12]


Eixo "SEXTAVADO" por senso
[06 de Dezembro de 2019, 17:17]


Fake's, ICs e transistores por vasco
[03 de Dezembro de 2019, 18:19]


Vídeo: Ferramenta (e 'cartão' preso em pen 3G) por SerraCabo
[02 de Dezembro de 2019, 00:06]


Medidor de indutâncias por SerraCabo
[30 de Novembro de 2019, 23:08]


teste - fotos - funcionou mas agora não consigo apagar o post. por SerraCabo
[30 de Novembro de 2019, 22:42]


Circuito de proteção para ferro de soldar. por vasco
[26 de Novembro de 2019, 10:59]


Esquema electrico de uma tv-box android? por Hugu
[21 de Novembro de 2019, 21:54]

Autor Tópico: Robot + IR  (Lida 5726 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.619
  • Helpdesk do sitio
Re: Robot + IR
« Responder #15 em: 03 de Junho de 2011, 23:24 »
Podes filtrar os valores, por exemplo ler 8 vezes ou 16 vezes cada sensor e dividir por 8 ou 16 vezes respectivamente, isto vai eliminar as pequenas oscilações, depois dás uma margem de 10 ou 20 para cima e para baixo.
Avr fanboy

Offline Pirex

  • Mini Robot
  • *
  • Mensagens: 10
Re: Robot + IR
« Responder #16 em: 04 de Junho de 2011, 00:18 »
Podes filtrar os valores, por exemplo ler 8 vezes ou 16 vezes cada sensor e dividir por 8 ou 16 vezes respectivamente, isto vai eliminar as pequenas oscilações, depois dás uma margem de 10 ou 20 para cima e para baixo.

e como faço isso?

Offline Pirex

  • Mini Robot
  • *
  • Mensagens: 10
Re: Robot + IR
« Responder #17 em: 08 de Junho de 2011, 13:13 »
Não sei porque razão, mas os 4 sensores todos ligados ao mesmo tempo alteram os valores.
Com todos ligados os valores são:

Infra-vermelhos:
Tem obstáculo: >130
Não tem obstáculo: <130

Luz:
Tem luz: > 700
Não tem luz: <700

Com isto, já fiz o código, ainda não sei se funciona porque ainda tenho o arduino ligado ao PC (depois é a pilhas), mas espero que com os IF's, o carro não ande sempre aos rabiosques.

Aqui fica o código:

Citar
byte sensorIR1=1;  //define o pino 1 para o sensor de infra-vermelhos do lado esquerdo
byte sensorIR2=2;  // define o pino 2 para o sensor de infra-vermelhos do lado direito
byte sensorLUZ1=3;  //define o pino 3 para o sensor de luz do lado esquerdo
byte sensorLUZ2=4;  //define o pino 4 para o sensor de luz do lado direito


int ValorIR1;  // valor do infra-vermelho do lado esquerdo
int ValorIR2;  // valor do infra-vermelho do lado direito
int ValorLUZ1; //  valor da luz do lado esquerdo
int ValorLUZ2;  // valor da luz do lado direito

 int PWMA=10; //pino pwm do motor esquerdo
 int PWMB=11; //pino pwm do motor direito



void setup() {
  Serial.begin(9600);   
  analogWrite(PWMA,255); //definir PWM do motor 1 para velocidade máxima (0 a 255)
  analogWrite(PWMB,255); //definir PWM do motor 2 para velocidade máxima (0 a 255)
}

void loop() {
 
  ValorIR1 = analogRead(sensorIR1);
 
  Serial.print(" Valor do IR Esquerdo: ");
  Serial.println(ValorIR1); 

 ValorIR2 = analogRead(sensorIR2);
 
  Serial.print(" Valor do IR Direito: ");
  Serial.println(ValorIR2); 
 
 
  ValorLUZ1 = analogRead(sensorLUZ1);
 
  Serial.print(" Valor da LUZ do lado esquerdo: ");
  Serial.println(ValorLUZ1); 
 
    ValorLUZ2 = analogRead(sensorLUZ2);
 
  Serial.print(" Valor da LUZ do lado direito: ");
  Serial.println(ValorLUZ2);
  Serial.print("");
   
 {
   
   if ((ValorIR1 < 130) && (ValorIR2 < 130) && (ValorLUZ1 < 700) && (ValorLUZ2 < 700))
    {
      frente();  //1
    }
 
  if ((ValorIR1 < 130) && (ValorIR2 < 130) && (ValorLUZ1 < 700) && (ValorLUZ2 > 700))
    {
     direita(); //2
    }
   
   if ((ValorIR1 < 130) && (ValorIR2 < 130) && (ValorLUZ1 > 700) && (ValorLUZ2 < 700))
  {
    esquerda(); //3
  }
 
  if ((ValorIR1 < 130) && (ValorIR2 < 130) && (ValorLUZ1 > 700) && (ValorLUZ2 > 700))
  {
    frente(); //4
  }
 
  if ((ValorIR1 < 130) && (ValorIR2 > 130) && (ValorLUZ1 < 700) && (ValorLUZ2 < 700))
  {
    esquerda(); //5
  }
 
  if ((ValorIR1 < 130) && (ValorIR2 > 130) && (ValorLUZ1 < 700) && (ValorLUZ2 > 700))
  {
    esquerda(); // 6
  }
 
  if ((ValorIR1 < 130) && (ValorIR2 > 130) && (ValorLUZ1 > 700) && (ValorLUZ2 < 700))
  {
    esquerda(); // 7
  }
   
  if ((ValorIR1 < 130) && (ValorIR2 > 130) && (ValorLUZ1 > 700) && (ValorLUZ2 > 700))
  {
    esquerda(); //8
  }
 
  if ((ValorIR1 > 130) && (ValorIR2 < 130) && (ValorLUZ1 < 700) && (ValorLUZ2 < 700))
  {
    direita(); //9
  }
 
  if ((ValorIR1 > 130) && (ValorIR2 < 130) && (ValorLUZ1 < 700) && (ValorLUZ2 > 700))
  {
    direita(); //10
  }
 
  if ((ValorIR1 > 130) && (ValorIR2 < 130) && (ValorLUZ1 > 700) && (ValorLUZ2 < 700))
  {
    direita(); //11
  } 
 
  if ((ValorIR1 > 130) && (ValorIR2 < 130) && (ValorLUZ1 > 700) && (ValorLUZ2 > 700))
  {
    direita(); //12
  }
 
  if ((ValorIR1 > 130) && (ValorIR2 > 130) && (ValorLUZ1 < 700) && (ValorLUZ2 < 700))
  {
    stop(); //13
  }
 
  if ((ValorIR1 > 130) && (ValorIR2 > 130) && (ValorLUZ1 < 700) && (ValorLUZ2 > 700))
  {
    stop(); //14
  }
 
  if ((ValorIR1 > 130) && (ValorIR2 > 130) && (ValorLUZ1 > 700) && (ValorLUZ2 < 700))
  {
    stop(); //15
  }
 
  if ((ValorIR1 > 130) && (ValorIR2 > 130) && (ValorLUZ1 > 700) && (ValorLUZ2 > 700))
  {
    stop(); //16
  }
  }
   
  delay(300);

}

void frente()
{
analogWrite(PWMA, 255);
analogWrite(PWMB, 255);
}

void stop()        // Esta funçao define o PWM a 0 para que o carro pare.
{
analogWrite(PWMA, 0);
analogWrite(PWMB, 0);
}
/*
void reduzir()    // esta função define o PWM a 133 para o carro reduzir a velocidade.
{
analogWrite(PWMA, 133);
analogWrite(PWMB, 133);
}*/

void esquerda()
{
  analogWrite(PWMA, 0);
  analogWrite(PWMB, 133);

}

void direita()
{
 analogWrite(PWMB, 0);
 analogWrite(PWMA, 133);
}