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

Sensores Opticos

Started by cenario10, 29 de July de 2014, 12:52

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

cenario10

A saída é digital os sensores são QRE1113 Line Sensor Breakout - Digital. Peço desculpa se dei entender que eram analógicos.

senso

Avr fanboy

Hugu

tens a plaquinha ligada desta forma ao arduino?

cenario10

Boas novamente pessoal, Estou com um problema acho que pode ser relativamente a pista ou aos sensores. Relembro que os sensores são digitais, peço desculpa se perceberam o contrário
O robô já detecta a linha branca mas não a consegue seguir. Ele fica quase parado, as vezes dá os avanços pequenos mas nada de especial.
Os motores estão a funcionar, a bateria esta carregada, ele já andou em cima da pista sem seguir a linha.
A linha branca é uma fita espelhada branca sobre um fundo preto.
Apliquei o que tá neste site também, desde já obrigado deu muito jeito
http://bildr.org/2011/06/qre1113-arduino/


O código é este, o robô tem o objectivo de seguir a linha:

#include <L293D.h>

L293D motores(11,9,8,10,7,6);
int pinSensorMeio = 3;
int pinSensorDireita = 2;
int pinSensorEsquerda = 4;
int valueSM, valueSD, valueSE, state;

void setup(){
  Serial.begin(9600);
}

void loop(){
  state = estadoBarra();
  switch(state){
  case 1:
    Serial.println("1");
    motores.frente(255,255);
    break;
  case 2:
    Serial.println("2");
    motores.frente(255,128);
    break;
  case 3:
    Serial.println("3");
    motores.frente(255,128);
    break;
  case 4:
    Serial.println("4");
    motores.frente(128,255);
    break;
  case 5:
    Serial.println("5");
    motores.frente(128,255);
    break;
  case 6:
    Serial.println("6");
    motores.stop();
    break;
  case 7:
    Serial.println("7");
    motores.stop();
    break;
  case 8:
    Serial.println("8");
    motores.tras(255,255);
    break;
  }
  delay(250);
}

int readSensorDigital(int pinNumber){
  pinMode(pinNumber, OUTPUT );
  digitalWrite(pinNumber, HIGH ); 
  delayMicroseconds(10);
  pinMode(pinNumber, INPUT );

  long time = micros();

  while (digitalRead(pinNumber) == HIGH && micros() - time < 3000);
  int diff = micros() - time;
  return diff;
}

int estadoBarra(){
  int estado;
  valueSM = readSensorDigital(pinSensorMeio);
  valueSD = readSensorDigital(pinSensorDireita);
  valueSE = readSensorDigital(pinSensorEsquerda);

  if(valueSE > 2000 && valueSM < 800 && valueSD > 2000){
    estado = 1;
  }
  else if(valueSE > 2000 && valueSM < 800 && valueSD < 800){
    estado = 2;
  }
  else if(valueSE > 2000 && valueSM > 2000 && valueSD < 800){
    estado = 3;
  }
  else if(valueSE < 800 && valueSM < 800 && valueSD > 2000){
    estado = 4;
  }
  else if(valueSE < 800 && valueSM > 2000 && valueSD > 2000){
    estado = 5;
  }
  else if(valueSE < 800 && valueSM < 800 && valueSD < 800){
    estado = 6;
  }
  else if(valueSE > 2000 && valueSM > 2000 && valueSD > 2000){
    estado = 7;
  }
  else{
    estado = 8;
  }
  return estado;
}





senso

#19
Se o sensor é digital ou dá zero ou um, como é que estás a comparar com 2000, 200 e afins?
Estou a ver que estás a ler de um lado que usa analogReads e estás a tentar fazer o mesmo com os digitalRead.
Esses sensores, sendo digitais ou não, terás sempre uma resposta analógica, e mais, passa para o porto analógico, faz analogReads e faz prints para a consola serial, e mexe o sensor em cima da linha, vais ver que os valores variam.
Avr fanboy

FCarvalho5555

Boas,

Penso que a versão digital desse sensor não permite que ele seja lido através de um digitalread(), tens de cronometrar o tempo que o capacitor que a board tem leva a descarregar.
http://bildr.org/2011/06/qre1113-arduino/
Vê este link tens ai dois exemplos, para sensor analógico e para o digital.

andnobre

boa tarde
onde aconselhavam para comprar sensores de linha?
ebay ja andei também em algumas lojas portuguesas.

senso

Enquanto não mostrarem o sensor usado, chega de tiros ao prato..
Tenha ou não condensador, isso terá sempre uma saida analógica..
Avr fanboy

FCarvalho5555

Quote from: senso on 08 de August de 2014, 13:37
Enquanto não mostrarem o sensor usado, chega de tiros ao prato..
Tenha ou não condensador, isso terá sempre uma saida analógica..

Se medires a saída do sensor com um multímetro, ela a variar entre 0.15V e 0.2V esta variação depende se está a ler branco ou preto. 

Hugu