Arduino Distance Measurement Using VL53L0X Time-of-Flight Sensor & I2C LCD

Project Overview

In this project, we interface a VL53L0X Time-of-Flight (ToF) distance sensor with Arduino and display the measured distance on a 16×2 I2C LCD in centimeters.

The VL53L0X uses laser-based infrared sensing, possibly making it more accurate than ultrasonic sensors and suitable for robotics, obstacle detection, and automation projects.

Components Required

  • Arduino UNO / Nano
  • VL53L0X Time-of-Flight Distance Sensor (pins: VIN, GND, SDA, SCL)
  • 16×2 I2C LCD Display
  • Jumper wires
  • USB cable
  • Breadboard

How VL53L0X Works (Short Explanation)

  • Emits an infrared laser pulse
  • Measures the time taken for light to reflect back
  • Calculates distance using time-of-flight
  • Communicates via I2C protocol

Measurement unit: millimeters (converted to centimeters in code)

Wiring Connections:

VL53L0X Sensor → Arduino

VL53L0X PinArduino Pin
VIN5V
GNDGND
SDAA4
SCLA5

I2C LCD → Arduino

LCD PinArduino Pin
VCC5V
GNDGND
SDAA4
SCLA5

Please note :- Both devices share the same I2C bus (SDA & SCL).

Required Libraries

Install these libraries using Arduino Library Manager:

  1. Adafruit VL53L0X
  2. LiquidCrystal_I2C

Arduino Code

#include <Wire.h>
#include <Adafruit_VL53L0X.h>
#include <LiquidCrystal_I2C.h>

// Change LCD address if required: 0x27 or 0x3F
LiquidCrystal_I2C lcd(0x27, 16, 2);

// Create VL53L0X object
Adafruit_VL53L0X lox = Adafruit_VL53L0X();

void setup() {
Serial.begin(9600);
Wire.begin();

// Initialize LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("VL53L0X ToF");
lcd.setCursor(0, 1);
lcd.print("Initializing");

// Initialize VL53L0X sensor
if (!lox.begin()) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor Error!");
lcd.setCursor(0, 1);
lcd.print("Check Wiring");
while (1);
}

delay(2000);
lcd.clear();
}

void loop() {
VL53L0X_RangingMeasurementData_t measure;

// Take distance measurement
lox.rangingTest(&measure, false);

lcd.setCursor(0, 0);
lcd.print("Distance:");

if (measure.RangeStatus != 4) {
float distance_cm = measure.RangeMilliMeter / 10.0;

lcd.setCursor(0, 1);
lcd.print(distance_cm, 1);
lcd.print(" cm ");

Serial.print("Distance: ");
Serial.print(distance_cm, 1);
Serial.println(" cm");
} else {
lcd.setCursor(0, 1);
lcd.print("Out of range ");
Serial.println("Out of range");
}

delay(400);
}

Important Notes (Accuracy Tips)

  • Minimum reliable distance: 4 cm
  • Avoid shiny or black objects
  • Keep sensor steady
  • Avoid direct sunlight
  • Short wires improve I2C stability

Applications

  • Obstacle detection robots
  • Distance measurement tools
  • Smart parking systems
  • Automation & IoT projects

Conclusion

This project demonstrates how to interface a VL53L0X ToF sensor with Arduino and display accurate distance values on an I2C LCD. It is a solid foundation for robotics and automation projects.