Skip to Content

Como usar um sensor de distância IR SHARP GP2Y0A21YK0F com Arduino

Como usar um sensor de distância IR SHARP GP2Y0A21YK0F com Arduino

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

Arduino Uno

USB Data Sync cable Arduino

Cabo USB para Arduino UNO

Dupont wire set

Conjunto de fios Dupont

Half_breadboard56a

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.

How an IR distance sensor works light emitter and detector PSD
Sensor de distância IR

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.

How an IR distance sensor works
Note a mudança no ângulo do feixe refletido e na posição do ‘ponto óptico’ no PSD.

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.

GP2Y0A21YK0F Output Characteristics
Características de medição de distância (saída)

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.

SHARP GP2Y0A21YK0 with Arduino Wiring Diagram
Diagrama de ligação do sensor de distância IR GP2Y0A21YK0F com 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).

SHARP GP2Y0A21YK0F Pinout
Pinout do sensor de distância IR SHARP GP2Y0A21YK0F

Agora que ligaste o sensor, é hora de ver algum código de exemplo.

Instalar a biblioteca SharpIR para Arduino

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.

Installing an Arduino library ZIP
Instalar uma biblioteca Arduino em .ZIP.

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):

SHARP GP2Y0A21YK0F serial monitor output
Saída do monitor serial

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.

Se tiveres alguma dúvida, sugestão, ou achares que falta algo neste tutorial, deixa um comentário abaixo.