The VL6180X is a small optical sensor from STMicroelectronics that uses Time-of-Flight (ToF) technology to measure distance and ambient light. Unlike conventional IR sensors, it determines absolute distance regardless of the object's color or reflectivity.
Laser distance sensors:
Laser sensors, similar to IR sensors, use triangulation to measure distance. The sensor emits a laser beam that reflects off the measured surface and passes through a lens onto the CCD or CMOS sensor. As the surface moves closer or farther away, the projected point shifts position on the sensor. The electronics analyze this shift to calculate the distance.
If you'd like to support the development of the site with the price of a coffee — or a few — please do so here.
Here's a handy tip: you can quickly save this page as a PDF by clicking “export to PDF” in the menu on the right side of the screen.
| Pin Name | Type | Description |
|---|---|---|
| VIN | Power | Main power supply input (typically 2.7V to 5.5V). |
| GND | Power | Common ground for power and logic. |
| SCL | I²C Clock | I²C serial clock line. Logic level matches VIN. |
| SDA | I²C Data | I²C serial data line. Logic level matches VIN. |
| GPIO0 / SHDN | Control | Shutdown/Chip Enable. Pulling this pin LOW puts the sensor into standby mode. It is usually pulled HIGH by default. |
The VL6180X operates natively at 2.8V. Most breakout modules (such as those from Adafruit or Pololu) include a voltage regulator and level shifters, making them compatible with 3.3V or 5V Arduinos.
To interface the STMicroelectronics VL6180X (a 3-in-1 Time-of-Flight sensor for distance and ambient light) with an Arduino, the Pololu VL6180X library is a popular, lightweight choice.
#include <Wire.h> #include <VL6180X.h> VL6180X sensor; void setup() { Serial.begin(9600); Wire.begin(); sensor.init(); sensor.configureDefault(); // Sets recommended settings for standard operation // Set a 500ms timeout for I2C communication sensor.setTimeout(500); } void loop() { // Read distance in millimeters (typically accurate up to 100mm, max 200mm) uint8_t range = sensor.readRangeSingleMillimeters(); // Read ambient light in Lux float lux = sensor.readAmbientLightSingle(); Serial.print("Range: "); Serial.print(range); Serial.print(" mm | Ambient Light: "); Serial.print(lux); Serial.println(" lux"); if (sensor.timeoutOccurred()) { Serial.println(" !!! TIMEOUT !!!"); } delay(500); }
This page has been accessed for: Today: 4, Until now: 6