sábado, 20 de outubro de 2012

Código para sensor IR QRE1113 Digital


//Código para sensor IR QRE1113 Digital 
//A saída no terminal serial - baixos valores refletem 3000 ou mais refletido

int QRE1113_Pin = 2; //conectar ao pino digital 2

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

void loop(){

  int QRE_Value = readQD();
  Serial.println(QRE_Value); 

}

int readQD(){
  //Retorna o valor QRE1113 
  pinMode( QRE1113_Pin, OUTPUT );
  digitalWrite( QRE1113_Pin, HIGH );
  delayMicroseconds(10);
  pinMode( QRE1113_Pin, INPUT );

  long time = micros();

  //o tempo medido  HIGH, que acaba 3 segundos depois
  while (digitalRead(QRE1113_Pin) == HIGH && micros() - time < 3000);
  int diff = micros() - time;

  return diff;
}
fonte: http://bildr.org/2011/06/qre1113-arduino/

Fotos do sensor em teste:


As leituras no Serial Monitor: 3000 linha preta, valores abaixo cores sendo que, dependendo da altura do sensor, o valor mais baixo corresponde a branco. Uma das coisas que notamos é que, conforme a superfície, o sensor costuma dar falsos positivos e portanto, o robô endoida. Isso pode estar relacionado com o tipo de programa que usamos nos robôs, e vamos mudar inserindo mais filtros para evitar este problema.
Outro detalhe: este sensor não filtra muito bem a luz infravermelha emitida por luzes artificiais e pela luz solar. Precisamos isolá-lo, como fizemos com os sensores anteriores.


Aplicação dos sensores de IR em um robô seguidor de linha:




Nenhum comentário:

Postar um comentário