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