Description: This is the SparkFun “Time-of-Flight” Range Finder, a sensor board for the VL6180 distance sensor. Unlike most distance sensors that rely on reflected light intensity or reflected angles to determine range, the VL6180 uses a precise clock to measure the time it takes light to bounce back from a surface. This affords the ToF Range Finder and VL6180 a great benefit over other methods because it can be much more accurate and more immune to noise. Does this technology sound familiar? Well it should, it’s the same means cellphones use to detect when the caller is holding their phone to their ear.
The VL6180 is actually a 3-in-1 package that combines an IR emitter, a range sensor, and an ambient light sensor together for you to easily use and communicate with via an I2C interface. The ToF Range Finder is very similar to its breakout cousin with a few important differences. What sets this board apart is this sensor is equipped with an on-board 2.8V regulator, which means if you were to plug in a voltage higher than 2.8V it will be shifted down without worry of damaging your board! Another thing to note is the form factor of the sensor itself. Many small robotics platforms have integrated hole patterns for the long time favorite Sharp IR sensor line. This allows the VL6180 Sensor to be a near drop-in replacement for most Sharp sensors.
Note: Though the datasheet states the VL6180 measures an absolute range of up to 10cm, we have successfully tested it up to 25cm. The more you know.
Based on 9 ratings:
2 of 2 found this helpful:
This sensor works well and is more precise than your typical Sharp IR sensors. The only downside (Apart from price) is that allthough you can change the I2C address, the new address is stored in volatile memory so it’s gone after a restart. (-1 star)
For everybody who is wondering how to use multiple sensors, I made this work with the MUX breakout (https://www.sparkfun.com/products/9056): Just tie the SCL lines together and route the SDA through the multiplexer. For many sensors, you will want to remove the pull up bridge (PU EN) and use your own 10kOhm for SCL and SDA (input side of multiplexer) Don’t forget to init each sensor before starting to read them or you will get too low readings!
1 of 1 found this helpful:
Previously I was using HC-SR04 sensors and getting really frustrated with the lousy quality I was seeing with those. I decided to spend a little more money and try this one out. I have not been disappointed with the quality. I wish it had a slightly longer range, but for my purposes (robot that doesn’t want to bump into things), it has been fine. It has a very narrow sensing band, so be aware of that.
Of course, after trying one out, I decided to use more on my robot, but was very surprised that I could not set the I2C address on the device to allow multiple instances. I think this is a failing of the actual VL6180 chip, not the Sparkfun design.
I took the advice from review of Member #689272 and designed a circuit using the multiplexer breakout board to select from multiple sensors on the I2C bus. You can find the details here:
Hope you find it useful. I am going to integrate this into my robot.
1 of 1 found this helpful:
I connected this to the i2c-1 buss on a Raspberry Pi, and it showed up right away in i2cdetect -y 1 at 0x29, so that was really easy. The 3.3V spec fits very well with the Raspberry Pi, not much risk of any damage.
Next was to program the device. Using I2C_RDWR ioctl(2) calls, I made it work with the 16-bit register addressing. I was able to write and read the registers correctly, and set-up with the long sequence of magic values listed in the appnote chapter 9. Once that was done, it was ready to measure distances, using the programming logic shown in the app-note. Just from some quick checks on the desktop, it looked like it was most accurate up to about 200 mm, but it did return reasonable values beyond that. Once past 255 mm there would be various bits shown in the status register, that showed that its range was exceeded.
For the ambient light, the similar 1-shot algorithm was used, just referring to the ambient light registers instead. I am getting some numbers (counts from register 0x050-0x051) which depend on the ambient light level, but so far no conversion from these to lux or intensity numbers.
I was looking for a position sensor that I could use in a variety of vehicles to measure throttle position for stationary simulation tasks. After wiring it up and realizing that I had to use an UNO rather than a MEGA ADK board, it works like a champ. Small, non-contact, inexpensive, and flexible. Good alternative to linear actuators for this application. Compatibility with the other boards would make it more useful for me and warrant an Excellent rating. Still, I can’t complain. Great product. Thanks, SparkFun!
Its fanastic to have to board, didn’t need to think about voltage regulation or logic shifting. And loved that it gave me distance in mm, it was a giant stepup from using an IR device and wanting to know where objects where. Main thing here is that I didn’t need to calibrate. One place that I don’t think this is as useful as a standard IR device, that just gives reflectance, is when you have other objects that are partially blocking the view of the beam here is seems that the objects that are partially blocking give the distance measurement even though they are static. IR reflectance on the other hand can be tuned to the background reflectance and then if another object comes along you can see the increase in reflectance. Maybe there is a way to get around this but I need more investigation. Still its great to have distance and the library and instruction where very clear, had it up and running and in the sculpture in no time at all :)
one other note - is that I too would like to have several I2C addresses possible.
I was able to write Spin code for the Parallax Propeller to read distance and ambient light with a few problems. I stole liberally from the SparkFun Arduino code. I was not able to change the I2C address. If it is changeable but resets to default on power cycle, that is a nonstarter.
Hi, Looking over the datasheet, I found a note about this. Take a look - “super_i2c_slave__device_address: User programmable I2C address (7-bit). Device address can be re-designated after power-up”. More information can be found in the datasheet
I got it tested in 10min. Using this for a auto faucet so I still need to see how it handles with some nearby physical interference. Provided Arduino library helped make this easy to run.
Not something SparkFun can do anything about but I’d love it if the thing worked for greater distances.
I’m having a bit of trouble with the crosstalk calibration going through IR Lexan 121 but otherwise it works well.
I’d not be interested in this but one thing I might suggest is a version with an m0 or some other cheap microcontroller that handles the i2c and exposes an analog voltage to users instead so it really can be a drop-in replacement for the Sharp sensors.
To the same end, it might be nice to have a version with the sensor off-center so it’s exactly where the IR sensor would be in the Sharp sensors.
Generally cool, though.
Configured it to work with an FPGA with IIC interface driven from PC to USB to UART interface. Setup worked and allowed simple reads and writes to the sensor, Had to run the app note register initialization sequence, then conversions worked. Was intermittent until I fully followed the recommended polling, read and clear sequence. Range I got with the recommended settings was 0" to ~8". Gives an 8 bit value from near 0 to around C4 hex, any farther than 8 inches gives FF hex code. Haven’t played with other than recommended initialization reg settings yet.