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
- Computador
- Arduino UNO
- Cabo USB A/B
- GP2Y0A21
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