• Welcome to LusoRobótica - Robótica em Português.
 

Robot + IR

Started by Pirex, 09 de February de 2011, 15:20

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

senso

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

Pirex

Quote from: senso on 03 de June 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.

e como faço isso?

Pirex

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:

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