Sensor de Distância Infravermelho Sharp GP2Y0A21YK0F

Ao desenvolvermos projetos voltados a robótica ou sistemas para detecção de corpos, precisamos sempre utilizar sensores de distância. Estes dispositivos nos permitem detectar obstáculos que possam estar no caminho do nosso robô, ou até mesmo identificar se alguém, ou algum objeto passou, pelo local.  Já vimos em outro tutorial que é possível medir distancias através som, usando, por exemplo, o famoso sensor ultrassônico HC-SR04. Além do som, podemos usar a luz infravermelha para medir distancias, usando, por exemplo, o Sensor Sharp GP2Y0A21YK0F, que é pequeno, robusto e capaz de medir distância com precisão e velocidade surpreendentes. Outra vantagem desse sensor é o fato de sua implementação junto ao Arduino ou outro microcontrolador ser muito simples. Dessa forma, neste tutorial você aprenderá a utilizar o sensor de distância infravermelho da Sharp (10cm a 80cm) em conjunto com um Arduino.

[toc]

kit robotica educacional com Arduino ESP ou Microbit

Sensor infravermelho Sharp GP2Y0A21YK0F

O sensor infravermelho Sharp GP2Y0A21YK0F é um sensor de distância voltado a projetos em que precisamos de uma boa precisão na distância com resposta rápida.

Com uma interface de comunicação bem simples, esse sensor conta com apenas três pinos, sendo dois para alimentação e um para saída. O módulo Sharp GP2Y0A21YK0F é capaz de medir distâncias de 10 cm até 80 cm, fornecendo como saída de dados um valor analógico que é inversamente proporcional a distância lida ( quanto mais longe menor a tensão ).

  • Especificações:
    • Alimentação: 4,5 V até 5,5 Volts
    • Distância: 10 até 80cm
    • Sinal de Saída: Analógico
    • Consumo: Aproximadamente 30 mA

 

Sensor de distância infravermelho Sharp GP2Y0A21YK0F
Sensor infravermelho Sharp GP2Y0A21YK0F

Funcionamento do sensor

O sensor Sharp GP2Y0A21YK0F é composto por basicamente três componentes:

  • Unidade de controle do emissor infravermelho: Responsável por emitir a luz infravermelha. Este conjunto é composto pela unidade de controle e o led emissor. Unidade de processamento de sinais: Responsável por ler o sinal emitido pela unidade emissora. Este conjunto é composto pela unidade  de cálculo de distância e receptor infravermelho.
  • Circuito de saída analógica: Circuito responsável por converter o sinal vindo da unidade de processamento em uma onda analógica equivalente a distância lida.
Estrutura física do circuito responsável por calcular a distância

Para calcular a distância, executa-se o seguinte processo:

  • Inicialmente o módulo de controle do emissor infravermelho é ativo e o led infravermelho dispara um feixe de luz ( invisível ao olho humano) no objeto em questão
Processo de emissão
  • Quando a luz chega até um determinado objeto, uma parte costuma ser absorvida e uma outra parte refletida, sabendo disso, a unidade de processamento de  sinais é capaz de medir a distância baseada na quantidade de luz que foi refletida pelo objeto.
Reflexão
  • Através de cálculos com a luminosidade recebida pelo receptor e algoritmos de triangulação, a unidade de processamento de sinais é capaz de aferir a distância e com o auxílio de um circuito de saída, retornar um valor analógico equivalente a distância lida.
Distancia em valor analógico

 


Mãos à obra – Acionamento de leds baseado na distância

Para ilustrar o funcionamento desse sensor, vamos construir uma aplicação bem simples, onde utilizando dois leds ( azul e vermelho ) iremos definir se um objeto está próximo ou não.

Componentes Necessários

Montando o projeto

A montagem deste projeto é bem simples, pois neste tutorial iremos apenas utilizar duas portas digitais e uma analógica de nosso Arduino. Sabendo disso, a montagem será feita com base no o seguinte esquema de ligação:

Vejam só como ficou a montagem final :)

 

Antes de ligar o seu circuito, verifique se todas as conexões foram feitas corretamente. Um curto circuito causado por uma ligação errada pode danificar todo o seu projeto.

 

Programando

Agora que montamos o nosso projeto, iremos partir para a parte do código. Nesta versão não será necessário o uso de nenhuma biblioteca de terceiros, já que o sensor fornece uma saída analógica que pode ser lida através do método AnalogRead(). Porém, teremos  que fazer um pequeno estudo sob o comportamento do sinal analógico resultante da leitura do sensor, estimando com base em sua onda uma formula fechada que nos informe a distância aproximada com base na leitura realizada. O código abaixo ilustra todo o processo de leitura dos dados.

/* Nome: Acionamento de leds com sensor de distância IR
 * Feito por: Danilo Almeida
 * Data: 20/12/2017
 */

#define pinoAnalogico A0          // Definição do pino Analógico utilizado na leitura do sensor de distância
#define ledAzul 2                 // Definição do pino digital onde iremos ligar o led azul
#define ledVermelho 3             // Definição do pino digital onde iremos ligar o led vermelho
void setup() {
  Serial.begin(9600);             // Inicialização da comunicação serial ( Caso queira ver a distância em cm )
  pinMode(ledAzul,OUTPUT);        // Inicialização do led azul como saída
  pinMode(ledVermelho,OUTPUT);    // Inicialização do led vermelho como saída
  digitalWrite(ledAzul,LOW);      // Inicia o led azul em nível lógico baixo ( desligado )
  digitalWrite(ledVermelho,LOW);  // Inicia o led vermelho em nível lógico alto ( desligado)
}

void loop() {
   // Obtenção do valor em Volts através da formula ( valorAnalógico * (5/1023) )
   double valorVolts = analogRead(pinoAnalogico) * 0.0048828125; 

   // Formula para cálculo da distância levando em consideração o valor em volts
   double distancia = 4800/(valorVolts*200 - 20 ); 
  

   Serial.print(distancia);
   Serial.println(" CM");
   // Se a distância for maior que 20 CM ligamos o led azul e desligamos o led Vermelho
   if (distancia>=20){ 
     digitalWrite(ledAzul,HIGH);
     digitalWrite(ledVermelho,LOW);
   }
   // Caso contrário ligamos o led vermelho e desligamos o azul
   else{ 
     digitalWrite(ledAzul,LOW);
     digitalWrite(ledVermelho,HIGH);
   }

   // Bloqueio de execução por 100 ms
   delay(100); 

}

Colocando pra funcionar

 


Entendendo a Fundo

Software

– Declaração de pinos utilizados

Inicialmente  declaramos todos os pinos que utilizaremos, tanto para leitura do sensor quanto para ligar e delisgar leds. O trecho de código abaixo ilustra a definição dada a cada pino utilizado.

#define pinoAnalogico A0      // Definição do pino Analógico utilizado na leitura do sensor de distância
#define ledAzul 2             // Definição do pino digital onde iremos ligar o led azul
#define ledVermelho 3         // Definição do pino digital onde iremos ligar o led vermelho

– Função Setup

Na função setup iremos configurar os pinos utilizados para ligar e desligar os leds. Iremos também inicializar a comunicação serial para fins de depuração da distância calculada.

void setup() {
  Serial.begin(9600);            // Inicialização da comunicação serial ( Caso queira ver a distância em cm )
  pinMode(ledAzul,OUTPUT);       // Inicialização do led azul como saída
  pinMode(ledVermelho,OUTPUT);   // Inicialização do led vermelho como saída
  digitalWrite(ledAzul,LOW);     // Inicia o led azul em nível lógico baixo ( desligado )
  digitalWrite(ledVermelho,LOW); // Inicia o led vermelho em nível lógico alto ( desligado)
}

– Função loop

Já na função loop faremos todo o processo de leitura e cálculo da distância, baseados na saída analógica fornecida pelo sensor.  Na linha abaixo, realizamos uma conversão do valor vindo do circuito ADC do Arduíno em um valor de tensão equivalente a saída do sensor. Basicamente multiplicamos o valor lido do  ADC pela razão entre o nível de tensão utilizado como referência 5 Volts pela amplitude do circuito ADC, que no caso do Arduíno é 210 .

// Obtenção do valor em Volts através da formula ( valorAnalógico * (5/1023) )
  double valorVolts = analogRead(pinoAnalogico) * 0.0048828125; 

Com o valor em volts em mãos, podemos partir para a equação da distância, que é dada pela seguinte equação:

Onde V0 é o valor em  volts lido na porta analógica e  d é a distância em cm. Essa equação foi obtida através da análise da onda comportamental do circuito na figura abaixo:

Sinal resultante da distância lida pelo sensor.
double distancia = 4800/(valorVolts*200 - 20 ); // Formula para cálculo da distância levando em consideração o valor em volts

Por fim, com a distância calculada verificamos se existe um objeto a menos de 20 cm de distância, caso exista, o led vermelho é aceso e o azul é apagado, caso  contrário o led azul é aceso e o vermelho é apagado.

Serial.print ("Distancia: ");
Serial.println(distancia);  
if (distancia>=20){   // Se a distância  for maior que 20 CM ligamos o led azul e desligamos o led Vermelho
    digitalWrite(ledAzul,HIGH);
    digitalWrite(ledVermelho,LOW);
  }
  else{               // Caso contrário ligamos o led vermelho e desligamos o azul
    digitalWrite(ledAzul,LOW);
    digitalWrite(ledVermelho,HIGH);
  }
delay(100);

Desafio

Agora que você é capaz de acionar e apagar leds apenas com base na distância de um objeto, tente fazer com que outro tipo de dispositivo seja acionado ao se aproximar. Um tipo de acionamento largamente utilizado consiste em acionar um relé ao se aproximar de um sensor de distância, com base nisso, use o artigo Módulo relé – Acionando cargas com Arduino e tente fazer com que um relé acione ao detectar um objeto em uma determinada  distância.Considerações Finais

Este tutorial teve como objetivo apresentar uma ótima alternativa aos sensores ultrassônicos de distância. Através da utilização do sensor Sharp GP2Y0A21YK0F é possível medir pequenas distâncias com uma ótima precisão, o que facilita bastante a elaboração e controle de processos onde necessitamos que a distância medida tenha uma boa precisão e um baixo tempo  de resposta. Espero que tenham gostado do conteúdo apresentado, sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.

Referências

Tudo que foi explicado neste tutorial pode ser encontrado no datasheet do dispositivo, que se encontra no seguinte link:

Privacy Preference Center