Site icon AranaCorp

Usar o sensor de distância GP2Y0A21 com o Arduino

infrared sensor scheme

O sensor de distância GP2Y0A21 é um sensor infravermelho da Sharp que pode detectar obstáculos localizados a distâncias entre 10 e 80cm.
Este sensor infravermelho existe em várias versões com características e desempenhos diferentes. O tutorial a seguir é válido para a maioria delas, desde que se modifique a regra de conversão (Exemplo de versão: GP2Y0A02, GP2Y0A710).

Material

Princípio de funcionamento

Os sensores de distância por infravermelho utilizam luz infravermelha para calcular a distância de um objeto por triangulação. Um LED infravermelho envia um sinal luminoso invisível a olho nu, que é refletido na presença de um objeto. Uma faixa fotorresistente capta a luz refletida e deduz a partir dela o ângulo de reflexão e, por consequência, a distância. O sensor devolve um valor analógico entre 0 e 5V.

Esquema

O sensor de distância GP2Y0A21 é alimentado por 5V. O pino Vcc do sensor pode ser ligado ao pino 5V do microcontrolador; o pino GND, à terra do microcontrolador; e o sinal é ligado a uma entrada analógica do microcontrolador.
O GP2Y0A21 pode ser ligado conforme o diagrama a seguir.

Código

Para exibir o valor físico do sensor, é preciso conhecer a regra de conversão. A fim de ter um código limpo e legível, é preferível inseri-lo numa subfunção. Assim, criamos uma função que se encarrega de ler o valor do sensor e convertê-lo num valor físico.
Em seguida, lemos o valor bruto do sensor usando a função analogRead(), e depois convertemos este valor em centímetros para informação. Para determinar a presença de um obstáculo, definimos um limite de 200 abaixo do qual um objeto é considerado detectado.

Para utilizar o objeto GP2Y0A21, utilizamos o seguinte código:

//Parameters
const int gp2y0a21Pin  = A0;

//Variables
int gp2y0a21Val  = 0;

void setup() {
  //Init Serial USB
  Serial.begin(9600);
  Serial.println(F("Initialize System"));
  //Init ditance ir
  pinMode(gp2y0a21Pin, INPUT);
}

void loop() {
  testGP2Y0A21();
}

void testGP2Y0A21( ) { /* function testGP2Y0A21 */
  ////Read distance sensor
  gp2y0a21Val = analogRead(gp2y0a21Pin);
  Serial.print(gp2y0a21Val); Serial.print(F(" - ")); Serial.println(distRawToPhys(gp2y0a21Val));
  if (gp2y0a21Val < 200) {
    Serial.println(F("Obstacle detected"));
  } else {
    Serial.println(F("No obstacle"));
  }
}

int distRawToPhys(int raw) { /* function distRawToPhys */
  ////IR Distance sensor conversion rule
  float Vout = float(raw) * 0.0048828125; // Conversion analog to voltage
  int phys = 13 * pow(Vout, -1); // Conversion volt to distance

  return phys;
}


Aplicações

Fontes

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie

Exit mobile version