nanoFramework.Iot.Device.LidarLiteV3 1.2.889

Prefix Reserved
dotnet add package nanoFramework.Iot.Device.LidarLiteV3 --version 1.2.889
                    
NuGet\Install-Package nanoFramework.Iot.Device.LidarLiteV3 -Version 1.2.889
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="nanoFramework.Iot.Device.LidarLiteV3" Version="1.2.889" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="nanoFramework.Iot.Device.LidarLiteV3" Version="1.2.889" />
                    
Directory.Packages.props
<PackageReference Include="nanoFramework.Iot.Device.LidarLiteV3" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add nanoFramework.Iot.Device.LidarLiteV3 --version 1.2.889
                    
#r "nuget: nanoFramework.Iot.Device.LidarLiteV3, 1.2.889"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package nanoFramework.Iot.Device.LidarLiteV3@1.2.889
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=nanoFramework.Iot.Device.LidarLiteV3&version=1.2.889
                    
Install as a Cake Addin
#tool nuget:?package=nanoFramework.Iot.Device.LidarLiteV3&version=1.2.889
                    
Install as a Cake Tool

LidarLiteV3 - LIDAR Time of Flight Sensor

This device belongs to a class of sensors known as time-of-flight, which measures distances by calculating the time delay between signal transmission and reception of the signal as it bounces off the subject. Unlike the popular sonar-based HC-SR04, this device uses a low-power laser. The advantage is longer distances (up to 40m) but more prone to errors when the subject is reflective.

Documentation

Official Manual and Technical Spec

Usage

Important: make sure you properly setup the I2C pins especially for ESP32 before creating the I2cDevice, make sure you install the nanoFramework.Hardware.ESP32 nuget:

//////////////////////////////////////////////////////////////////////
// when connecting to an ESP32 device, need to configure the I2C GPIOs
// used for the bus
Configuration.SetPinFunction(21, DeviceFunction.I2C1_DATA);
Configuration.SetPinFunction(22, DeviceFunction.I2C1_CLOCK);

For other devices like STM32, please make sure you're using the preset pins for the I2C bus you want to use.

Simple usage:

using (var llv3 = new LidarLiteV3(CreateI2cDevice()))
{
    // Take 10 measurements, each one second apart.
    for (int i = 0; i < 10; i++)
    {
        Length currentDistance = llv3.MeasureDistance();
        Debug.WriteLine($"Current Distance: {currentDistance.Centimeters} cm");
        Thread.Sleep(1000);
    }
}

I2cDevice CreateI2cDevice()
{
    var settings = new I2cConnectionSettings(1, LidarLiteV3.DefaultI2cAddress);
    return I2cDevice.Create(settings);
}

Power Modes

Power can be controlled to the device via a GPIO pin. Use the optional constructor parameters to specify the GPIO controller and a power enable pin number (numbering scheme depends on GpioController).

int powerEnablePin = 13;
using (var llv3 = new LidarLiteV3(CreateI2cDevice(), new GpioController(), powerEnablePin))
{
    // Power off the device.
    llv3.PowerOff();
    // Device is completely turned off.
    Debug.WriteLine("Device is off.");
    Thread.Sleep(5000);
    // Power on the device, device is ready in ~22ms.
    Debug.WriteLine("Device is on.");
    llv3.PowerOn();
    // Sleep 50ms.
    Thread.Sleep(50);
    // Get a reading.
    Length currentDistance = llv3.MeasureDistance();
    Debug.WriteLine($"Current Distance: {currentDistance.Centimeters} cm");
}

It's also possible to disable the receiver circuit (saving 40 mA) or put the device to sleep (saving 20 mA). However, it's recommended to use the power enable pin instead since the initialization time is only 2 ms shorter.

using (var llv3 = new LidarLiteV3(CreateI2cDevice()))
{
   llv3.PowerMode = PowerMode.Sleep;
}

Repetition Mode

Instead of getting measurements on-demand, the device can be configure to repeat n number of times, or infinitely.

This is configured via SetMeasurementRepetitionMode passing in a mode (Off, Repeat, or RepeatInfinitely), a loop count (if mode is Repeat), and a delay between measurements (default to 10 hz). A delay of 20 is about 100 hz.

With a repetition mode set, use Distance to retrieve the current readings in Length. Use DifferenceBetweenLastTwoDistances to get a velocity reading. Negative values indicate that the object is moving toward the device, positive indicates it's moving away. The value is dependent on the delay, and the default 10 hz is about 0.1 m/s.

using (var llv3 = new LidarLiteV3(CreateI2cDevice()))
{
    llv3.SetMeasurementRepetitionMode(MeasurementRepetitionMode.RepeatIndefinitely);

    while(true)
    {
        Thread.Sleep(5);
        Length currentDistance = llv3.Distance;
        Length currentVelocity = llv3.DifferenceBetweenLastTwoDistances;
    }
}

Change the I2C Address

By default, the device has an address of 0x62. It's possible to change this address to resolve a conflict with another device or to run multiple devices.

Available addresses are 7-bit values with a 0 in the LSB order.

using (var llv3 = new LidarLiteV3(CreateI2cDevice()))
{
    // Set device from default `0x62` to `0x68`
   llv3.SetI2cAddressAndDispose(0x68);
}

// Connect to the device again with the new address.
var settings = new I2cConnectionSettings(1, 0x68);
var i2cDevice = I2cDevice.Create(settings);

using (var llv3 = new LidarLiteV3(i2cDevice))
{
   // ...
}

Optimization

The default settings should work well, but several tweaks can be made to adjust the device. See the manual for more details.

Change Acquistion Count

To isolate the signal from the noise, the device performs a series of acquisitions and sums up the result until a peak is found. The number of acquistions can be configured via MaximumAcquisitionCount (default: 128).

Less acquisitions result in faster measurements, but limits the max range and produces more erroneous readings. The number roughly correlates to an acquistion rate of n/count and n^(1/4).

using (var llv3 = new LidarLiteV3(CreateI2cDevice()))
{
    llv3.MaximumAcquisitionCount = 100
}
Quick Termination Mode

Faster acquisition readings, but with slightly more chance of erroneous readings.

using (var llv3 = new LidarLiteV3(CreateI2cDevice()))
{
    llv3.AcquistionMode |= AcquistionMode.EnableQuickTermination;
}
Detection Sensitivity

The threshold when a peak is found can be configured via AlgorithmByPassThreshold. By default, this is 0 which uses an internal algorithm to determine the threshold.

Recommended non-default values are 32 for higher sensitivity but higher erronenous readings and 96 for reduced sensitivity with fewer erroneous readings.

using (var llv3 = new LidarLiteV3(CreateI2cDevice()))
{
    llv3.AlgorithmBypassThreshold = 32
}

MCU Wiring

The device communicates over I2C and while there's a PWN mode supported by the device, it is not implemented.

I2C Wiring on the MCU:

LidarLiteV3 Wire MCU GPIO Pin (Physical Numbering)
5V (red) 5V
Ground (black) Ground
Power enable (orange) Optional, an available IO pin
Mode control (yellow) Not used
I2C SCL (green) SCL
I2C SDA (blue) SDA
Product Compatible and additional computed target framework versions.
.NET Framework net is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.2.889 108 7/28/2025
1.2.869 225 4/2/2025
1.2.864 210 4/2/2025
1.2.852 222 3/11/2025
1.2.846 225 3/10/2025
1.2.822 167 2/26/2025
1.2.775 162 2/4/2025
1.2.772 156 2/4/2025
1.2.755 161 1/31/2025
1.2.743 161 1/20/2025
1.2.737 144 1/13/2025
1.2.718 168 12/30/2024
1.2.704 157 12/18/2024
1.2.696 141 12/16/2024
1.2.673 174 10/23/2024
1.2.662 156 10/11/2024
1.2.656 158 10/3/2024
1.2.639 171 9/6/2024
1.2.631 171 8/28/2024
1.2.613 185 8/9/2024
1.2.601 149 7/26/2024
1.2.590 169 7/17/2024
1.2.573 172 6/19/2024
1.2.570 162 6/14/2024
1.2.560 177 5/29/2024
1.2.548 173 5/15/2024
1.2.536 206 4/15/2024
1.2.514 197 3/22/2024
1.2.494 176 2/28/2024
1.2.474 200 1/24/2024
1.2.462 223 1/5/2024
1.2.458 199 12/20/2023
1.2.436 199 11/10/2023
1.2.416 161 11/8/2023
1.2.403 173 10/6/2023
1.2.396 162 9/27/2023
1.2.384 205 9/6/2023
1.2.378 214 8/16/2023
1.2.369 205 8/2/2023
1.2.363 206 7/28/2023
1.2.357 209 7/19/2023
1.2.354 208 7/14/2023
1.2.345 220 6/21/2023
1.2.341 228 6/14/2023
1.2.337 251 6/7/2023
1.2.335 227 6/2/2023
1.2.329 232 5/26/2023
1.2.313 234 5/12/2023
1.2.302 263 5/10/2023
1.2.297 258 5/3/2023
1.2.273 322 3/17/2023
1.2.267 344 3/10/2023
1.2.263 341 3/8/2023
1.2.259 349 2/27/2023
1.2.256 362 2/24/2023
1.2.253 378 2/22/2023
1.2.222 389 1/9/2023
1.2.212 422 1/5/2023
1.2.208 395 1/3/2023
1.2.203 371 12/28/2022
1.2.159 463 11/14/2022
1.2.153 470 11/5/2022
1.2.141 497 10/25/2022
1.2.122 541 10/12/2022
1.2.114 504 10/8/2022
1.2.95 545 9/22/2022
1.2.87 599 9/15/2022
1.2.73 527 9/8/2022
1.2.63 526 9/3/2022
1.2.47 537 8/15/2022
1.2.40 558 8/6/2022
1.2.38 548 8/5/2022
1.2.28 561 8/1/2022
1.2.13 558 7/24/2022
1.2.10 554 7/23/2022
1.1.142.3202 581 7/7/2022
1.1.133.52556 558 6/30/2022
1.1.121.35854 576 6/26/2022
1.1.116.8772 545 6/24/2022
1.1.113.2032 551 6/23/2022
1.1.102.51394 562 6/15/2022
1.1.99.36719 561 6/14/2022
1.1.97.17326 573 6/13/2022
1.1.92.53000 564 6/8/2022
1.1.72.29765 556 5/31/2022
1.1.64.21380 560 5/26/2022
1.1.54.28879 564 5/23/2022
1.1.40 559 5/5/2022
1.1.3 593 4/15/2022
1.1.1 582 4/14/2022
1.0.300 591 3/31/2022
1.0.277-preview.126 220 3/25/2022
1.0.277-preview.125 201 3/25/2022
1.0.277-preview.116 190 3/22/2022
1.0.277-preview.115 191 3/21/2022
1.0.277-preview.112 201 3/19/2022
1.0.277-preview.110 207 3/18/2022
1.0.277-preview.105 214 3/15/2022
1.0.277-preview.99 215 3/10/2022
1.0.277-preview.98 218 3/8/2022
1.0.277-preview.89 205 2/27/2022
1.0.277-preview.87 212 2/26/2022
1.0.277-preview.77 203 2/18/2022
1.0.277-preview.75 201 2/16/2022
1.0.277-preview.73 215 2/12/2022
1.0.277-preview.70 214 2/10/2022
1.0.277-preview.65 200 2/9/2022
1.0.277-preview.53 236 1/31/2022
1.0.277-preview.41 217 1/28/2022
1.0.277-preview.32 226 1/27/2022
1.0.277-preview.30 212 1/27/2022
1.0.277-preview.17 230 1/24/2022
1.0.277-preview.15 211 1/21/2022
1.0.277-preview.13 207 1/21/2022
1.0.277-preview.1 222 1/11/2022
1.0.272 590 1/10/2022
1.0.259 439 12/9/2021
1.0.258 425 12/7/2021
1.0.218 292 10/18/2021
1.0.157 463 9/4/2021
1.0.155 438 8/31/2021
1.0.153 461 8/14/2021
1.0.151 473 8/6/2021
1.0.146 442 7/22/2021
1.0.136 517 7/17/2021
1.0.135 257 7/16/2021
1.0.134 277 7/15/2021
1.0.133 286 7/14/2021
1.0.130 256 7/6/2021
1.0.129 261 7/6/2021
1.0.127 282 7/5/2021
1.0.125 287 7/5/2021
1.0.122 306 6/30/2021
1.0.121 296 6/29/2021
1.0.119 328 6/28/2021
1.0.111 270 6/14/2021
1.0.105 367 5/29/2021
1.0.104 330 5/29/2021
1.0.97 272 5/28/2021
1.0.63 265 5/26/2021
1.0.34 274 5/24/2021