Código de Pesquisa

Medindo distância com um módulo laser VL53L0X de 6 pinos e LCD1602-I2C para Arduino

Medindo distância com um módulo laser VL53L0X de 6 pinos e LCD1602-I2C para Arduino

Neste tutorial, vamos aprender como medir distância usando o sensor laser VL53L0X e exibir os resultados em um LCD1602 com interface I2C. Este projeto permite obter medições de distância precisas em milímetros ou centímetros, tornando-o uma adição versátil a qualquer projeto baseado em Arduino. Ao final deste tutorial, você terá um sistema de medição de distância totalmente funcional que é fácil de configurar e usar.

VL53L0X 200cm range sensor

Para isso, utilizaremos o sensor de distância a laser VL53L0X, que se comunica com o Arduino via I2C. O display LCD1602 fornecerá uma representação visual clara da distância medida. Para esclarecer o processo de codificação, consulte o vídeo em :00.

Hardware Explicado

Os principais componentes desta montagem são o sensor de distância a laser VL53L0X e o display LCD1602. O VL53L0X utiliza um laser para medir distâncias com precisão, tornando-o adequado para várias aplicações, incluindo robótica e automação. Ele opera usando comunicação I2C, o que permite fácil integração com o Arduino.

O LCD1602 é um display de caracteres compatível com I2C que pode exibir até 16 caracteres em duas linhas. Ele simplifica o processo de exibição de dados, pois requer menos pinos do que os LCDs tradicionais. Juntos, esses componentes criam um sistema de medição de distância poderoso e fácil de usar.

Detalhes da ficha técnica

FabricanteSTMicroelectronics
Número da peçaVL53L0X
Tensão lógica/IO1.8 V a 2.8 V
Tensão de alimentação2.6 V a 3.5 V
Corrente de saída (por canal)...
Corrente de pico (por canal)...
Orientação sobre a frequência PWM...
limiares lógicos de entrada...
Queda de tensão / RDS(on)/ saturação...
Limites térmicos...
Pacote...
Notas / variantes...

  • Garanta a tensão de alimentação adequada (2,6 V a 3,5 V).
  • Use resistores de pull-up nas linhas SDA e SCL, se necessário.
  • Mantenha o sensor afastado de superfícies refletoras para evitar leituras incorretas.
  • Verifique o endereço I2C (o padrão é 0x29 para o VL53L0X).
  • Considere a dissipação de calor se for utilizado em ambientes de alta temperatura.

Instruções de fiação

Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)

Para ligar o sensor VL53L0X e o display LCD1602, comece conectando a alimentação e o terra. Conecte oVCCpino do VL53L0X para o5Vpino no Arduino e oGNDpino ao terra do Arduino. Para o LCD1602, conecte o seuVCCao mesmo5VeGNDpara aterrar também.

Em seguida, conecte as linhas de comunicação I2C. OSDAo pino do VL53L0X deve ser conectado aoA4pino no Arduino, e oSCLo pino deve ir paraA5. OXSHUTpino pode ser conectado aD12no Arduino, mas também pode ser deixado desconectado. Para o LCD1602, certifique-seSDAeSCLtambém estão conectados aos mesmos pinos do sensor VL53L0X.

Exemplos de código e guia passo a passo

VL53L0X sensor;

#include 
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  Serial.begin(9600);
  Wire.begin();
  sensor.init();
  sensor.setTimeout(500);
  sensor.startContinuous();
  lcd.begin();
  lcd.backlight(); 
}

Na função setup, inicializamos a comunicação serial e o barramento I2C. Osensor.init()inicializa o sensor VL53L0X, enquantolcd.begin()inicializa o visor LCD. A retroiluminação do visor é ativada, permitindo fácil visualização.

void loop() {
  int distance = sensor.readRangeContinuousMillimeters();
  Serial.print("Distance: ");
  lcd.clear();
  lcd.print("Robojax VL53L0X");
  lcd.setCursor(0,1); 
  lcd.print("Dist.: ");
  lcd.setCursor(7,1); 
  lcd.print(distance); 
  Serial.println();
  delay(100);
}

Dentro do loop, lemos continuamente a distância usandosensor.readRangeContinuousMillimeters()e o imprime no monitor serial. O LCD é atualizado com a medição de distância, fornecendo feedback em tempo real. O atraso de 100 milissegundos garante que as leituras não sejam atualizadas com muita frequência, permitindo uma leitura fácil.

Demonstração / O que esperar

Ao ligar, o sistema medirá continuamente a distância e exibirá os resultados no LCD. Você poderá ver os valores de distância mudarem à medida que aproxima ou afasta objetos do sensor. Se houver algum problema com o sensor, como erros de tempo limite, mensagens apropriadas serão exibidas no monitor serial (no vídeo em 03:15).

Imagens

VL53L0X 200cm range sensor
VL53L0X 200cm range sensor
Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)
Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)
113-Measure distance with a laser VL53L0X 6-pin module and an LCD1602-I2C for Arduino
Idioma: C++
/* 

This is Arduino code to measure distance with VL53L0X and display it on LCD1602 with I2C module.
Distance is displayed in mm (millimeter) or cm (centimeter).

Original Laser Sensor source: https://github.com/adafruit/Adafruit_VL53L0X
Modified by Ahmad Shamshiri for RoboJax.com
Date modified: Jun 28, 2018 at 19:06 in Ajax, Ontario, Canada

Watch the video instruction for this code: https://youtu.be/t14ly7Y09oI
You can get this code from RoboJax.com.
Pin connection

VL53L0X Pin  Arduino Pin
VCC         5V
GND         GND
SDA         A4 or SDA if available
SCL         A5 or SCL if available
GPIO1       leave it unconnected
XSHUT       D12 (digital 12 or pin 12)

LCD1602 Pin

*/


#include <Wire.h>
#include <VL53L0X.h>

VL53L0X sensor;


#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

const int type = 1;// 1=mm , 2= cm
String unit;// variable for unit, mm or cm
void setup()
{

  Serial.begin(9600);
  Wire.begin();

  sensor.init();
  sensor.setTimeout(500);

  // Start continuous back-to-back mode (take readings as
  // fast as possible).  To use continuous timed mode
  // instead, provide a desired inter-measurement period in
  // ms (e.g. sensor.startContinuous(100)).
  sensor.startContinuous();
  
  // initialize the LCD, 
  lcd.begin();
  // Turn on the blacklight and print a message.
  lcd.backlight(); 
}

void loop()
{
  int distance =sensor.readRangeContinuousMillimeters();
  //int distance =sensor.startContinuous(100);

 //distance = distance;
  Serial.print("Distance: ");

  //start of loop Robojax code for LCD with I2C
  lcd.clear();
  lcd.print("Robojax VL53L0X");
  lcd.setCursor (0,1); // go to start of 2nd line
  lcd.print("Dist.: ");
  lcd.setCursor (7,1); // go to start of 2nd line
  if(type ==2){
    float distanceCM = (float) (distance/10.0);
      unit ="cm";
      lcd.print(distanceCM);
      Serial.print(distanceCM);
      Serial.print(unit);      
    }else{
    unit ="mm";
      lcd.print(distance);
      Serial.print(distance);
      Serial.print(unit);       
    }  

  lcd.print(unit);    
  
  if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }

  Serial.println();
  delay(100);
}

Coisas que você pode precisar

Recursos e referências

Arquivos📁

Arquivo Fritzing

Outros arquivos