← Back to Home

Input Devices

The objective for this week was to measure something from the physical world using a sensor. I focused on Time-of-Flight (ToF) technology using the VL53L1X sensor integrated with the XIAO RP2350 to achieve high-precision distance measurements.

Group Assignment

Probe an input device's analog and digital signals.

View Group Project ↗

Sensor WorkflowToF Technology

I chose the VL53L1X sensor because it uses a Class 1 laser to measure distance through the "Time of Flight" principle, providing much more accurate data than infrared or ultrasonic sensors in complex environments.

1

The Brain: XIAO RP2350

XIAO RP2350

The XIAO RP2350 is the core of this project. Its Dual-Core ARM Cortex-M33 architecture allows for fast I2C communication, which is essential for processing the real-time data streams from the laser sensor without latency.

2

The Sensor: VL53L1X (Time of Flight)

VL53L1X Sensor

This sensor emits a laser pulse and measures the time it takes for the photons to bounce back. Why? Because it isn't affected by the color or reflectivity of the object, unlike IR sensors. It can reach up to 4 meters in "Long Mode".

3

Wiring & I2C Protocol

Wiring

The connection uses the I2C bus. SDA (Data) and SCL (Clock) are connected to pins D4 and D5. This protocol allows the microcontroller to "talk" to the sensor using only two wires, sharing a synchronized clock signal to ensure every bit of data is captured correctly.

4

Programming Logic

I used the Pololu VL53L1X library. Below is the code to initialize the sensor in 'Long Mode' with a 50ms timing budget for a balance between speed and precision.


#include <Wire.h>
#include <VL53L1X.h>

VL53L1X sensor;

void setup() {
  Serial.begin(115200);
  Wire.begin(); 
  Wire.setClock(400000); // 400kHz I2C speed

  if (!sensor.init()) {
    Serial.println("Failed to detect sensor!");
    while (1);
  }

  sensor.setDistanceMode(VL53L1X::Long);
  sensor.setMeasurementTimingBudget(50000); // 50ms per reading
  sensor.startContinuous(50);
}

void loop() {
  Serial.print("Distance: ");
  Serial.print(sensor.read());
  Serial.println("mm");
}
                
5

Data Visualization & Testing

Data Results

Using the Arduino Serial Plotter, I verified the responsiveness of the sensor. The measurements were stable even when moving the target rapidly. I learned that the Timing Budget is crucial: a shorter time allows for more frequent readings but increases digital noise.

Files of Week 9

Arduino Source Code

Download .ino