Pololu VL6180X Time-of-Flight Distance Sensor Carrier with Voltage Regulator, 60cm maxPololu
This 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 color 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 (1MB pdf) 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 and 0.1″ perfboards. The board ships fully populated with its SMD components, including the VL6180X, as shown in the product picture.
|VL6180X datasheet graph of typical ranging performance.|
- 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 1×7 strip of 0.1″ header pins and a 1×7 strip of 0.1″ right-angle header pins are included, as shown in the picture below. You can solder the header strip of your choice to the board for use with custom cables or solderless breadboards, or you can solder wires directly to the board itself for more compact installations.
The board has two mounting holes spaced 0.5″ apart that work with #2 and M2 screws (not included).
Using the VL6180X
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 connected to level-shifters on the board and are 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. Alternatively, our 4-channel bidirectional logic level shifter can be used externally with those pins.
|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 above schematic shows the additional components the carrier board incorporates to make the VL6180 easier to use, including the voltage regulator that allows the board to be powered from a 2.7 V to 5.5 V supply and the level-shifter circuit that allows for I²C communication at the same logic voltage level as VIN. This schematic is also available as a downloadable PDF (90k pdf).
The VL6180X can be configured and its distance and ambient light readings can be queried through the I²C bus. Level shifters on the I²C clock (SCL) and data (SDA) lines enable I²C communication with microcontrollers operating at the same voltage as VIN (2.7 V to 5.5 V). A detailed explanation of the I²C interface on the VL6180X can be found in its datasheet (1MB pdf), and more detailed information about I²C in general can be found in NXP’s I²C-bus specification (371k pdf).
The sensor’s 7-bit slave address defaults to 0101001b on power-up. It can be changed to any other value by writing one of the device configuration registers, but the new address only applies until the sensor is reset or powered off.
The I²C interface on the VL6180X is compliant with the I²C fast mode (400 kHz) standard. In our tests of the board, we were able to communicate with the chip at clock frequencies up to 400 kHz; higher frequencies might work but were not tested.
We have written a basic Arduino library for the VL6180X that makes it easy to interface this sensor with an Arduino or Arduino-compatible controller. The library makes it simple to configure the VL6180X and read the distance and ambient light level data through I²C. It also includes example sketches that show you how to use the library.
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 (706k pdf) and design tip DT0037 (386k pdf). (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.