fbpx
ArduinoNovidade

Como utilizar o Módulo Sensor de distância Laser VL53I0X Com Arduino

O sensor de distância laser VL53L0X é uma excelente opção para projetos que envolvem medições precisas de distâncias em uma variedade de aplicações. Ideal para robótica, esse sensor pode ser usado para detectar obstáculos e ajudar robôs a navegar de forma autônoma. Em sistemas de segurança, ele pode ser integrado para medir a proximidade de objetos e ativar alarmes ou outras respostas automáticas. Para automação residencial, pode ser utilizado em dispositivos como portas automáticas ou sistemas de controle de presença. Além disso, o VL53L0X é útil em medições de nível em tanques e reservatórios, sem a necessidade de contato físico.

Neste tutorial você aprenderá de forma simples como fazer a medição da distância para que possa usar esta informação no seu projeto.

Figura 1: Visão geral do Módulo Sensor de Distância Laser VL53L0X

O funcionamento do sensor é baseado no princípio de reflexão do laser. O sensor emite um feixe de laser não visível, que se reflete ao atingir um objeto, retornando ao sensor. Com isso, o módulo consegue cronometrar o tempo em que a onda demorou para ir até o objeto e voltar, restando apenas usar esses dados na fórmula matemática de distância mostrada na equação abaixo:

O número 2 no denominador representa a ida e volta do laser.
Com os dados de distância obtidos, o módulo realiza comunicação I2C pra realizar a passagem de dados para o microcontrolador conectados, assim o usuário pode ter acesso aos dados e controlá-los.

O Módulo possui 6 pinos, sendo eles: VIN, GND, SCL, SDA, GPI01, XSHUT, conforme mostrado na Figura 2:

Figura 2: Pinos do Módulo sensor de distância laser VL53I0X

Cada pino possui a seguinte função:

  • Vin (Pino de alimentação): Deve ser alimentado com uma tensão entre 3,3 e 5,5 Volts, fornecendo energia ao módulo;
  • GND: Pino de aterramento do circuito(0V);
  • SCL: Pino relógio serial I2C;
  • SDA: Pino de dados serial I2C;
  • GPIO1: Pino de interrupção;
  • XSHUT: Pino de desligamento do sensor.

MATERIAIS NECESSÁRIOS

1x Arduino UNO Atmega328;
1x Cabo USB Tipo A-B compatível com Arduino UNO;
1x Módulo Sensor de Distância Laser Vl53l0x;
1x Protoboard;
Jumpers Macho x Macho.

ESQUEMÁTICO DE LIGAÇÃO DOS COMPONENTES

Inicialmente, certifique-se que a sua placa Arduino esteja desligada. Em seguida, monte o circuito da Figura 3 utilizando o Módulo sensor Vl53I0x, Arduino e jumpers.

Figura 3: Circuito para medir distâncias de objetos utilizando o sensor Vl53l0x

Ao montar seu circuito na protoboard preste atenção nos seguintes pontos:

  • O pino VIN do módulo deve ser alimentado com o 5V do Arduino;
  • O pino GND do módulo deve ser conectado ao pino GND do Arduino;
  • O pino SDA do módulo deve ser conectado à porta analógica A4 do Arduino;
  • O pino SCL do módulo deve ser conectado à porta analógica A5 do Arduino.

ELABORANDO O CÓDIGO

Após a montagem do circuito, vamos a programação do Sketch.
Neste projeto, faremos uso da biblioteca “Adafruit_VL53L0X.h” para facilitar a leitura de dados e medição de distâncias do módulo sensor VL53L0X.h.

 A biblioteca “Adafruit_VL53L0X.h” pode ser instalada na própria Arduino IDE, por meio do atalho “crtl + shift + i”, que irá abrir o gerenciador de biblioteca, então basta pesquisa por Adafruit_VL53L0X e clicar em instalar, conforme mostrado na Figura 4.

Figura 4: Instalação biblioteca Adafruit_VL53L0X.h

Após isto, vamos entender a lógica de programação:

1- Incluir as bibliotecas: Iniciaremos o código incluindo a biblioteca “Adafruit_VL53L0X.h”, por meio da instrução #include < Adafruit_VL53L0X.h>

2- Declarar o objeto que será utilizado para chamar as instruções da biblioteca “Adafruit_VL53L0X.h”: O objeto Vl53l0x foi declarado para ser usado em comandos que envolvem a biblioteca “Adafruit_VL53L0X.h”.

3- Iniciar a comunicação serial e o módulo sensor: Por meio da instrução “Serial.begin(115200)”, inicia-se a comunicação serial com uma taxa de dados de 115200 bps (bits por segundo), que é adequada para comunicação rápida entre o Arduino e a IDE. Para inicializar as configurações iniciais de interface e hardware do módulo, foi utilizado a função Vl5310x.begin().

4- Declarar o objeto que será utilizado para chamar as instruções de cálculo de medida: Foi declarado o objeto measure, que será chamado para realizar testes, calibragem e medições de distância do sensor.

5- Medição de distâncias: Para saber as medidas de distâncias de um objeto encontradas, deveremos utilizar a utilizamos a estrutura condicional if-else (se-senão).

  • Se o sensor detectar um objeto dentro do seu alcance, será calculado os valores de distância em milímetros por meio da chamada “measure.RangeMilliMeter”.
    O valor encontrado será dado em milímetros, logo para saber o valor em outras unidades de medidas precisaremos fazer conversões. Neste projeto, dividiremos os valores de milímetro por 10, para obter os valores em centímetros.
  • Se não for detectado nenhum objeto no alcance do sensor, será enviado para o monitor serial que o objeto está fora de alcance.

6- Enviar os dados obtidos para o monitor serial: Para que o usuário tenha acesso aos dados obtidos é necessário que os valores sejam enviados para o monitor serial da Arduino IDE. Para isso é necessário a utilização das instruções:

  • Serial.println(centimetros);
  • Serial.print(milimetros);

Ao final, o Sketch deste projeto ficará da seguinte maneira:

#include <Adafruit_VL53L0X.h>//Inclusão da biblioteca Adafruit_VL53L0X.h

Adafruit_VL53L0X Vl53l0x = Adafruit_VL53L0X(); //Criação do objeto Vl53l0x , que será chamado para realizar as instruções da biblioteca Adafruit_VL53L0X.h

float milimetros; //Variavel que irá armazenar a distância medida em milímetros pelo módulo sensor
float centimetros; //Variavel que irá armazenar a distancia medida em centimetros pelo módulo sensor

void setup() {
  Serial.begin(115200); //Inicia a comunicação serial com velocidade de dados em 115200
  Vl53l0x.begin(); //Configura a interface I2C e o hardware do módulo VL53L0X e sua biblioteca.
} 
  
void loop() {
  VL53L0X_RangingMeasurementData_t measure; //Objeto que será responsavel por realizar as medições de distancia do módulo
  Vl53l0x.rangingTest(&measure, false); //Teste de funcionamento do sensor
  if (measure.RangeStatus != 4) {  //Verifica se existe algum objeto a frente do sensor para ser medido
    milimetros = measure.RangeMilliMeter; //Calcula a distancia do objeto em milimetros e armazena na variavel milimetros.
    Serial.print("Distância (mm): "); //Envia mensagem para o monitor serial
    Serial.print(milimetros); //Envia o valor da distancia em milimetros encontrado pelo sensor
    centimetros = milimetros/10; //Realiza a conversao da distancia em milimetros para centimetros
    Serial.print(" Distância (cm): "); //Envia mensagem para o monitor serial
    Serial.println(centimetros); //Envia o valor de distancia em centimentros encontrado na conversão
  } else { //Se n for detectado nenhum objeto na area de alcance do sensor....
    Serial.println(" fora de alcance "); //Envia mensagem para o monitor serial
  }
  delay(100); //tempo de espera de 0,1 segundos entre cada leitura.
}

Com o código compilado, basta abrir o monitor serial para ter acesso aos valores de milímetros e centímetros medidos pelo sensor, conforme mostra no Figura 5.

Figura 5: Distâncias medidas em Milímetros e Centímetros

Espero que tenha gostado deste tutorial. Em caso de dúvidas deixe seu comentário abaixo.

Atenciosamente, Kleber Bastos.

Bacharel em Engenharia de Computação. Um dos criadores do Blog da Robótica. Faz parte da equipe Casa da Robótica desde 2017. Apaixonado por tecnologias e pelas “loucuras” que é possível criar usando microcontroladores e impressoras 3D. Ex-BBB, mas isso é uma longa história... que poderá ser contada posteriormente.

Kleber Bastos

Bacharel em Engenharia de Computação. Um dos criadores do Blog da Robótica. Faz parte da equipe Casa da Robótica desde 2017. Apaixonado por tecnologias e pelas “loucuras” que é possível criar usando microcontroladores e impressoras 3D. Ex-BBB, mas isso é uma longa história... que poderá ser contada posteriormente.

Deixe uma pergunta

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.