This is an amazing distance sensor that can measure up to 60cm with resolutions as high as 1mm.
The VL6180X Time-of-flight distance sensor is a carrier/breakout board for ST’s VL6180X proximity and ambient light sensor, which measures distance with 1 mm resolution over a detection range of 0 cm to 10 cm or greater. The VL6180X uses time-of-flight measurements of infrared pulses to determine the range to a target object, allowing it to give accurate results independent of the target’s colour and surface. Distance and ambient light level measurements can be read through a digital I²C interface. The board has a 2.8 V linear regulator and integrated level-shifters that allow it to work over an input voltage range of 2.7 V to 5.5 V, and the 0.1″ pin spacing makes it easy to use with standard solderless breadboards and 0.1″ perfboards.
The VL6180X from ST Microelectronics is a sensor that combines proximity ranging and ambient light level measurement capabilities into a single package. This board is a carrier for the VL6180X, so we recommend careful reading of the VL6180X datasheet before using this product.
Unlike simpler optical sensors that use the intensity of reflected light to detect objects, the VL6180 uses ST’s FlightSense technology to precisely measure how long it takes for emitted pulses of infrared laser light to reach the nearest object and be reflected back to a detector, making it essentially a short-range lidar sensor. This time-of-flight (TOF) measurement enables it to accurately determine the absolute distance to a target 0 cm to 10 cm (0″ to 4″) away with 1 mm resolution, without being influenced by the object’s reflectance. (In some conditions, the sensor can measure and report distance to an object up to about 20 cm (8″) away, depending on the target and environment.) The VL6180 also includes an ambient light sensor, or ALS, that can measure the intensity of light with which it is illuminated. Ranging and ambient light measurements are available through the sensor’s I²C (TWI) interface, which is also used to configure sensor settings, and two independently-programmable GPIO pins can be configured as interrupt outputs.
The VL6180X is a great IC, but its small, leadless, LGA package makes it difficult for the typical student or hobbyist to use. It also operates at voltages below 3 V, which can make interfacing difficult for microcontrollers operating at 3.3 V or 5 V. Our breakout board addresses these issues, making it easier to get started using the sensor, while keeping the overall size as small as possible.
The carrier board includes a low-dropout linear voltage regulator that provides the 2.8 V required by the VL6180X, which allows the sensor to be powered from a 2.7 V to 5.5 V supply. The regulator output is available on the VDD pin and can supply almost 150 mA to external devices. The breakout board also includes a circuit that shifts the I²C clock and data lines to the same logic voltage level as the supplied VIN, making it simple to interface the board with 3.3 V or 5 V systems, and the board’s 0.1″ pin spacing makes it easy to use with standard solderless breadboards.
- Dimensions: 0.5″ × 0.7″ × 0.085″ (13 mm × 18 mm × 2 mm)
- Weight without header pins: 0.5 g (0.02 oz)
- Operating voltage: 2.7 V to 5.5 V
- Supply current: 5 mA (typical; varies with configuration, target, and environment)
- Output format (I²C): 8-bit distance reading (in millimeters), 16-bit ambient light reading
- Distance measuring range: 0 mm to 100 mm (0″ to 4″)
Ranging beyond 100 mm is possible with certain target reflectances and ambient conditions but not guaranteed; the range is reported as an 8-bit value in mm, so it cannot exceed 255 mm.
A minimum of four connections is necessary to use the VL6180X board: VIN, GND, SCL, and SDA. The VIN pin should be connected to a 2.7 V to 5.5 V source, and GND should be connected to 0 volts. An on-board linear voltage regulator converts VIN to a 2.8 V supply for the VL6180X IC.
The I²C pins, SCL and SDA, are connected to built-in level-shifters that make them safe to use at voltages over 2.8 V; they should be connected to an I²C bus operating at the same logic level as VIN.
The two GPIO pins are open-drain outputs pulled up to 2.8 V by the board (although GPIO0 defaults to being a chip enable input). They are not connected to level-shifters on the board and are not 5V-tolerant, but they are usable as-is with many 3.3 V and 5 V microcontrollers: the microcontroller can read the sensor’s output as long as its logic high threshold is below 2.8 V, and the microcontroller can alternate its own output between low and high-impedance states to drive the pin.
- VDD: Regulated 2.8 V output. Almost 150 mA is available to power external components. (If you want to bypass the internal regulator, you can instead use this pin as a 2.8 V input with VIN disconnected.)
- VIN: This is the main 2.7 V to 5.5 V power supply connection. The SCL and SDA level shifters pull the I²C lines high to this level.
- GND: The ground (0 V) connection for your power supply. Your I²C control source must also share a common ground with this board.
- SDA/SDI/SDO: Level-shifted I²C data line: HIGH is VIN, LOW is 0 V
- SCL/SPC: Level-shifted I²C clock line: HIGH is VIN, LOW is 0 V
- GPIO0/CE: This pin is configured as a chip enable input on power-up of the VL6180X; the board pulls it up to VDD to enable the sensor by default. Driving this pin low puts the sensor into hardware standby. After the VL6180X powers up, this pin can be reconfigured as a programmable interrupt output (VDD logic level). This input/output is not level-shifted.
- GPIO1: Programmable interrupt output (VDD logic level). The VL6180X also drives this pin low when it is in hardware standby. This output is not level-shifted.
The datasheet provides a lot of information about this sensor, but a lot of essential info – including a mandatory initialization sequence – can only be found in other documents. Picking out the important details can take some time. Here are some pointers for communicating with and configuring the VL6180X that we hope will get you up and running a little bit faster:
Unlike many other I²C sensors from ST, which use 8-bit register addresses, the VL6180X uses 16-bit register addresses.
The sensor must be initialized with a particular sequence of settings on power-up or reset. This sequence is not covered in the datasheet, but it can be found in ST application note AN4545 and design tip DT0037. (Our Arduino library includes a function that performs this initialization.)
The two documents above can also help you understand basic procedures for configuring the VL6180X and getting readings from it. Additional documents, providing details on many other aspects of the VL6180X, can be found on ST’s product page for the VL6180X.
Both distance and ambient light measurements can be performed in either single-shot or continuous mode. In either mode, once each measurement is started, you must poll a status register to wait for it to complete. In continuous mode, you should ensure that the inter-measurement period you select is longer than the time it takes to actually perform each measurement.
NXP’s I²C-bus specification
Arduino library for the VL6180X
VL6180 shematic diagram pdf