CR555
Published © GPL3+

Distance measurement using STM tof sensor

Testing an STM Time of Flight ranging sensor with multi target detection.

BeginnerProtip2 hours57
Distance measurement using STM tof sensor

Things used in this project

Hardware components

STM32 Nucleo-64 Board
STMicroelectronics STM32 Nucleo-64 Board
×1
STM32 Nucleo X-NUCLEO-53L4A2
×1
USB-A to Mini-USB Cable
USB-A to Mini-USB Cable
×1

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Schematics

Schematics

Simply connect your 53L4A2 and an STM F401RE

Code

X-NUCLEO-53L4A2 and STM32F401RE

C/C++
Arduino code
/**
 ******************************************************************************
 Distance measurement using X-NUCLEO-53L4A2
 ******************************************************************************

/* Includes ------------------------------------------------------------------*/
#include <Arduino.h>
#include <Wire.h>
#include <vl53l4cx_class.h>
#include <stdio.h>

#define DEV_I2C Wire
#define SerialPort Serial

#ifndef LED_BUILTIN
  #define LED_BUILTIN 13
#endif
#define LedPin LED_BUILTIN

// Components.
VL53L4CX sensor_vl53l4cx_top(&DEV_I2C, 3);

/* Setup ---------------------------------------------------------------------*/
void setup()
{
  // Led.
  pinMode(LedPin, OUTPUT);

  // Initialize serial for output.
  SerialPort.begin(115200);
  SerialPort.println("Starting...");

  // Initialize I2C bus.
  DEV_I2C.begin();

  // Configure VL53L4CX top component.
  sensor_vl53l4cx_top.begin();

  // Switch off VL53L4CX top component.
  sensor_vl53l4cx_top.VL53L4CX_Off();

  //Initialize all the sensors
  sensor_vl53l4cx_top.InitSensor(0x10);

  // Start Measurements
  sensor_vl53l4cx_top.VL53L4CX_StartMeasurement();
}

void loop()
{
  float value;
  VL53L4CX_MultiRangingData_t MultiRangingData;
  VL53L4CX_MultiRangingData_t *pMultiRangingData = &MultiRangingData;
  uint8_t NewDataReady = 0;
  int no_of_object_found = 0, j;
  int status;

  do {
    status = sensor_vl53l4cx_top.VL53L4CX_GetMeasurementDataReady(&NewDataReady);
  } while (!NewDataReady);

  //Led on
  digitalWrite(LedPin, HIGH);

  if ((!status) && (NewDataReady != 0)) {
    status = sensor_vl53l4cx_top.VL53L4CX_GetMultiRangingData(pMultiRangingData);
    no_of_object_found = pMultiRangingData->NumberOfObjectsFound;
    for (j = 0; j < no_of_object_found; j++) {
      if (j != 0) {
        SerialPort.print("\r\n                               ");
      }
      value=pMultiRangingData->RangeData[j].RangeMilliMeter;
      if(value>30){
        SerialPort.print(pMultiRangingData->RangeData[j].RangeMilliMeter);
      }
    }
    SerialPort.println("");
    if (status == 0) {
      status = sensor_vl53l4cx_top.VL53L4CX_ClearInterruptAndStartMeasurement();
    }
  }

  digitalWrite(LedPin, LOW);
}

Credits

CR555
6 projects • 8 followers

Comments