Skip to content

VL53L0X

Frederic Pillon edited this page May 28, 2024 · 3 revisions

VL53L0X

Arduino library to support the VL53L0X Time-of-Flight and gesture-detection sensor.

API

The API provides simple distance measure, single swipe gesture detection, directional (left/right) swipe gesture detection and single tap gesture detection.

VL53L0X class

  • VL53L0X(TwoWire*, int, int, uint8_t): class constructor

Params pointer to I2C instance
Params sensor shutdown pin
Params sensor interrupt pin
Params (optional) device address (0x29 by default)

  • VL53L0X_On: power on the sensor

  • VL53L0X_Off: power off the sensor

  • InitSensor: initialize the sensor with default values

Return 0 on Success, error code otherwise

  • StartMeasurementSimplified(OperatingMode, void(*)(void)): Start the measure indicated by operating mode

Params specifies requested measure (range_single_shot_polling, range_continuous_polling, range_continuous_interrupt, range_continuous_polling_low_threshold, range_continuous_polling_high_threshold, range_continuous_polling_out_of_window, range_continuous_interrupt_low_threshold, range_continuous_interrupt_high_threshold, range_continuous_interrupt_out_of_window)
Params pointer to callback function. Must be not NULL in case of interrupt measure
Return 0 on Success, error code otherwise

  • GetMeasurementSimplified(OperatingMode, VL53L0X_RangingMeasurementData_t*): Get results for the measure indicated by operating mode

Params specifies requested measure (range_single_shot_polling, range_continuous_polling, range_continuous_interrupt, range_continuous_polling_low_threshold, range_continuous_polling_high_threshold, range_continuous_polling_out_of_window, range_continuous_interrupt_low_threshold, range_continuous_interrupt_high_threshold, range_continuous_interrupt_out_of_window)
Params Data pointer to the MeasureData_t structure to read data in to
Return 0 on Success, error code otherwise

  • StopMeasurementSimplified(OperatingMode): Stop the currently running measure indicate by operating_mode

Params specifies requested measure (range_single_shot_polling, range_continuous_polling, range_continuous_interrupt, range_continuous_polling_low_threshold, range_continuous_polling_high_threshold, range_continuous_polling_out_of_window, range_continuous_interrupt_low_threshold, range_continuous_interrupt_high_threshold, range_continuous_interrupt_out_of_window)
Return 0 on Success, error code otherwise

  • WaitDeviceBooted: Wait for device booted after chip enable (hardware standby)

Return 0 on Success, error code otherwise

  • Prepare: Prepare device for operation. Does static initialization and reprogram common default setting.

Return 0 on Success, error code otherwise

  • GetDistance(uint32_t*): Get ranging result and only that

Params pointer to range distance (value in millimeter)
Return 0 on Success, error code otherwise

  • SetDeviceAddress(int): Set new device i2c address

Params The new i2c address (7bit)
Return 0 on Success, error code otherwise

You can find a complete description of the following functions in the API user manual (UM2039)

  • Init
  • StaticInit
  • PerformRefCalibration(uint8_t*, uint8_t*)
  • PerformRefSpadManagement(uint32_t*, uint8_t*)
  • SetDeviceMode(VL53L0X_DeviceModes)
  • SetMeasurementTimingBudgetMicroSeconds(uint32_t)
  • StartMeasurement
  • StopMeasurement
  • GetMeasurementDataReady(uint8_t*)
  • GetRangingMeasurementData(VL53L0X_RangingMeasurementData_t*)
  • ClearInterruptMask(uint32_t)

ToF gestures

  • tof_gestures_initDIRSWIPE_1(int32_t, long, long, Gesture_DIRSWIPE_1_Data_t*): Initialize directional (left/right) gesture detection

Params swipe threshold
Params Minimum duration of a swipe to be detected
Params Maximum duration of a swipe to be detected
Params pointer to Gesture_DIRSWIPE_1_Data_t structure
Return 0 on Success, error code otherwise

  • tof_gestures_detectDIRSWIPE_1(int32_t, int32_t, Gesture_DIRSWIPE_1_Data_t*): Detect directional (left/right) gesture

Params left range value in millimeter
Params right range value in millimeter
Params pointer to Gesture_DIRSWIPE_1_Data_t structure
Return One of these gestures code: GESTURES_SWIPE_LEFT_RIGHT, GESTURES_SWIPE_RIGHT_LEFT, GESTURES_NULL, GESTURES_DISCARDED_TOO_SLOW or GESTURES_DISCARDED_TOO_FAST

  • tof_gestures_initSWIPE_1(Gesture_SWIPE_1_Data_t*): Initialize single swipe gesture detection

Params pointer to Gesture_SWIPE_1_Data_t structure
Return 0 on Success, error code otherwise

  • tof_gestures_detectSWIPE_1(int32_t, Gesture_SWIPE_1_Data_t*): Detect single swipe gesture

Params range value in millimeter
Params pointer to Gesture_SWIPE_1_Data_t structure
Return One of these gestures code: GESTURES_HAND_ENTERING, GESTURES_HAND_LEAVING, GESTURES_SINGLE_SWIPE or GESTURES_NULL, GESTURES_DISCARDED, GESTURES_DISCARDED_TOO_SLOW

  • tof_gestures_initTAP_1(Gesture_TAP_1_Data_t*): Initialize single tap gesture detection

Params pointer to Gesture_TAP_1_Data_t structure
Return 0 on Success, error code otherwise

  • tof_gestures_detectTAP_1(int32_t, Gesture_TAP_1_Data_t*): Detect single tap gesture

Params range value in millimeter
Params pointer to Gesture_TAP_1_Data_t structure
Return One of these gestures code: GESTURES_SINGLE_TAP or GESTURES_NULL

  • tof_initMotion(int, MotionData_t*): Initialize motion detector

Params range threshold
Params pointer to MotionData_t structure
Return 0 on Success, error code otherwise

  • tof_getMotion(int32_t, MotionData_t*): return current motion state

Params range value in millimeter
Params pointer to MotionData_t structure
Return One of these gestures code: GESTURES_MOTION_NULL, GESTURES_MOTION_DOWN_STATE, GESTURES_MOTION_UP_STATE, GESTURES_MOTION_RAISE_UP or GESTURES_MOTION_DROP_DOWN

Note

The maximum detection distance is influenced by the color of the target and the indoor or outdoor situation due to absence or presence of external infrared. The detection range is between ~40cm and ~120cm. (see chapter 5 of the VL53L0X datasheet). If you need an higher accuracy (up to +200cm), you should implement your own function.

Examples

  • DISCO_IOT_53L0A1_DataLogTerminal: gets proximity value and prints it
  • DISCO_IOT_53L0A1_Gesture_Swipe1: detects a simple swipe gesture.
  • DISCO_IOT_53L0A1_Gesture_Tap1: detects a simple tap gesture.

Source

You can find the source files at
https://github.com/stm32duino/VL53L0X

Documentation

The VL53L0X datasheet is available at
http://www.st.com/content/st_com/en/products/imaging-and-photonics-solutions/proximity-sensors/vl53l0x.html

Clone this wiki locally