O SHARP GP2Y0A21YK0F é um sensor de distância IR fácil de usar com um alcance de 10 a 80 cm. É um ótimo sensor para usar em robôs autónomos ou interruptores ópticos sem contacto.
Neste tutorial, vais aprender como o sensor funciona e como usá-lo com Arduino. Incluí um diagrama de ligação e código de exemplo para que possas começar a experimentar com o teu sensor.
Peças necessárias

Sensor de distância GP2Y0A21YK0F

Arduino Uno

Cabo USB para Arduino UNO

Conjunto de fios Dupont

Breadboard

Condensador( ≥ 10 µF)
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
Como funciona um sensor de distância IR?
Um sensor de distância IR usa um feixe de luz infravermelha que reflete num objeto para medir a sua distância. A distância é calculada usando triangulação do feixe de luz. O sensor é composto por um LED IR e um detector de luz ou PSD (Dispositivo de Sensoriamento de Posição). Quando o feixe de luz é refletido por um objeto, o feixe refletido alcança o detector de luz e forma-se um ‘ponto óptico’ no PSD.

Quando a posição do objeto muda, o ângulo do feixe refletido e a posição do ponto no PSD também mudam. Veja o ponto A e o ponto B na imagem abaixo.

O sensor tem um circuito de processamento de sinal incorporado. Este circuito processa a posição do ponto óptico no PSD para determinar a posição (distância) do objeto refletor. Ele fornece um sinal analógico que depende da posição do objeto em frente ao sensor.
Como ler um sensor de distância IR?
Sensores de distância IR fornecem um sinal analógico, que varia conforme a distância entre o sensor e um objeto. Pelo datasheet, podes ver que a tensão de saída do SHARP GP2Y0A21YK0F varia de 2,3 V quando um objeto está a 10 cm até 0,4 V quando um objeto está a 80 cm. O gráfico também mostra porque o intervalo útil de deteção começa aos 10 cm. Repara que a tensão de saída para um objeto a 2 cm é igual à tensão para um objeto a 28 cm. Portanto, o intervalo útil de deteção começa após o pico, aproximadamente aos 10 cm ou 2,3 V.

O gráfico também mostra a desvantagem destes sensores: a resposta é não linear. Ou seja, uma grande mudança na tensão de saída nem sempre corresponde a uma grande mudança na distância. Para determinar a distância entre o sensor e um objeto, precisas encontrar uma função que converta a tensão de saída num valor de distância.
Isto pode ser feito usando o MS Excel e resulta na seguinte fórmula para distâncias > 10 cm:
Distância (cm) = 29.988 X POW(Volt , -1.173)
Esta é a função usada na biblioteca SharpIR, que usaremos mais tarde. Note que esta função é baseada apenas nos dados do datasheet da SHARP. As características de saída do sensor podem variar ligeiramente de sensor para sensor, por isso podes obter leituras imprecisas.
Se quiseres melhorar a precisão das tuas leituras, podes tentar medir e plotar muitos pontos de dados no Excel e ajustar uma curva a esses pontos. Depois de teres uma nova função para o teu sensor específico, precisarás alterar a fórmula usada no ficheiro SharpIR.cpp.
Especificações do GP2Y0A21YK0F
| Tensão de funcionamento | 4,5 a 5,5 V |
| Corrente de funcionamento | 30 mA |
| Intervalo de medição | 10 a 80 cm |
| Tipo de saída | Analógica |
| Dimensões | 29,5 x 13 x 13,5 mm |
| Orifícios de montagem | 2x 3,2 mm, espaçamento de 37 mm |
| Custo | Check price |
Para mais informações podes consultar o datasheet aqui.
Ligação do sensor IR GP2Y0A21YK0F ao Arduino
O diagrama de ligação abaixo mostra como ligar o sensor de distância IR GP2Y0A21YK0F a um Arduino.

Este tipo de sensores de distância tende a ser um pouco ruidoso, por isso é recomendado adicionar um condensador entre Vcc e GND. O datasheet sugere um condensador de 10 µF ou mais (eu usei 220 µF). Liga o terminal positivo do condensador ao fio Vcc e o terminal negativo ao fio GND (ver imagem). Os condensadores costumam ter uma faixa que indica o terminal negativo. O terminal positivo é geralmente mais longo que o negativo.
Ligações do GP2Y0A21YK0F
| GP2Y0A21YK0F | Arduino |
|---|---|
| 1 (Amarelo) | A0 |
| 2 (Preto) | GND |
| 3 (Vermelho) | 5V |
Se o teu sensor vier com fios de cores diferentes, certifica-te de verificar o pinout abaixo. O pino Vo está ligado à entrada analógica do Arduino (A0).

Agora que ligaste o sensor, é hora de ver algum código de exemplo.
Instalar a biblioteca SharpIR para Arduino
A SharpIR biblioteca escrita por Guillaume Rico e Thibaut Mauon facilita muito o trabalho com sensores IR SHARP. Inclui as fórmulas necessárias para converter a tensão de saída medida numa distância em centímetros. Atualmente, a biblioteca suporta os seguintes sensores: GP2Y0A02YK0F, GP2Y0A21YK0F, GP2Y0A710K0F e GP2YA41SK0F. A versão mais recente da biblioteca pode ser descarregada em GitHub ou clica no botão abaixo.
Podes instalar a biblioteca indo a Sketch > Include Library > Add .ZIP Library no Arduino IDE.

O autor da biblioteca reparou que as leituras do sensor podem oscilar bastante. A biblioteca resolve este problema fazendo múltiplas leituras seguidas, descartando valores fora do padrão e calculando a média para obter uma leitura de distância mais estável. Atualmente, a biblioteca calcula a média de 25 leituras, o que demora cerca de 53 ms.
Código de exemplo para o sensor de distância IR SHARP GP2Y0A21YK0F com Arduino
O código de exemplo abaixo pode ser usado com o sensor GP2Y0A21YK0F e mostra a distância medida em centímetros no monitor serial.
Podes copiar o código clicando no botão no canto superior direito do campo de código.
/*SHARP GP2Y0A21YK0F IR distance sensor with
Arduino and SharpIR library example code.
More info: https://www.makerguides.com */
// Include the library:
#include "SharpIR.h"
// Define model and input pin:
#define IRPin A0
#define model 1080
// Variable to store the distance
int distance_cm;
/* Model :
GP2Y0A02YK0F --> 20150
GP2Y0A21YK0F --> 1080
GP2Y0A710K0F --> 100500
GP2YA41SK0F --> 430
*/
// Create a new instance of the SharpIR class:
SharpIR mySensor = SharpIR(IRPin, model);
void setup() {
// Serial communication at a baudrate of 9600
Serial.begin(9600);
}
void loop() {
// Get a distance measurement and store it as distance_cm
distance_cm = mySensor.distance();
// Print the measured distance to the serial monitor
Serial.print("Mean distance: ");
Serial.print(distance_cm);
Serial.println(" cm");
delay(1000);
}
Note que neste exemplo chamámos o sensor de mySensor. Se quiseres usar vários sensores de distância IR, podes criar outro objeto sensor com um nome diferente: SharpIR mySensor2 = SharpIR(IRPin2, model); Note que nesse caso também usas um pino de entrada diferente para o segundo sensor.
Deverás obter a seguinte saída no monitor serial (Ctrl + Shift + M):

Conclusão
Neste artigo mostrei como o sensor de distância IR SHARP GP2Y0A21YK0F funciona e como podes usá-lo com Arduino.
Se procuras um sensor de distância mais acessível ou à prova de água, dá uma vista de olhos ao HC-SR04 ou JSN-SR04T. Nos artigos abaixo explico como estes sensores de distância/proximidade funcionam e como podes usá-los com Arduino.
- How to use an HC-SR04 Ultrasonic Distance Sensor with Arduino
- Waterproof JSN-SR04T Ultrasonic Distance Sensor with Arduino Tutorial
- How to use a SHARP GP2Y0A710K0F IR Distance Sensor with Arduino
- TOF10120 Distance Sensor with Arduino
- VL53L1X/TOF400C Distance Sensor with Arduino
- VL53L0X Distance Sensor with Arduino
Se tiveres alguma dúvida, sugestão, ou achares que falta algo neste tutorial, deixa um comentário abaixo.

