Cheap handheld 3d scanner with GY-85 module and VL53L0X sensor.
I'm using the IMU to track the scanner moving in the 3D, and the VL53L0X sensor to get the distance of the object relative to the device position.
This is a nine degrees of freedom component with one accelerometer (ADXL345), one gyroscope (ITG3200) and one magnetometer (HMC5883L), this module uses the I2C interface to read from and write to each individual sensor. The I2C address of the accelerometer and the gyroscope is defined with a hardware connection on the board, with the addresses being the ones in the table below.
| Accelerometer | Gyroscope | Magnetometer |
|---|---|---|
| 0x53 | 0x69 | 0x1E |
I wrote the code of three components, still in the making of putting all together in one class "GY_85".
It can mesure distances up to 2 m in three diferent configurations, continuous timed, continuous and single measurement. With four ranging profiles, default mode, high speed, high accuracy and long range.
I used the code from VL53L0X library for Linux and only modified the code to match with my i2c implementation.
The typical timing budget for a range is 33 ms (initialization/ranging/processing). The data can be checked with pooling or interruption (Pin GPIO1), and the device communication interface is I2C.
| Range profile | Range timing budget | Typical performance | Typical application |
|---|---|---|---|
| Default mode | 30 ms | 1.2 m accuracy* | Standard |
| High accuracy | 200 ms | 1.2 m accuracy < +/- 3% | Precise measurement |
| Long range | 33 ms | 2 m, accuracy * | Long ranging, only for dark conditions |
| High speed | 20 ms | 1.2 m, accuracy +/- 5% | Where accuracy is not important |
- Note: see Table 12 in Datasheet for accuracy *.
The XSHUT pin can be controled by the host to power off when not used, and then woken up through this pin. The other mode is that the XSHUT pin is tied to VCC this way the device will never enter in hardware standby only in software standby (when measurement is stoped).
