Skip to main content

LiDAR with Arduino - TF-Luna Sensor

Als je iets anders wilt dan Ultrasonic Sensor HC-SR04 kwa afstand namelijk meer afstand met minder ruis kun je kiezen voor de TF-Luna Sensor. Dit is een Lidar sensor die met behulp van een laser de afstand tot een object meet tussen 0,2 en 8 meter.
> De TF Luna LiDAR-afstandsmeter biedt een bereik van 0,2 m-8 m, een resolutie van 1 cm en een nauwkeurigheid van ±6 cm @ (0,2 m-3 m) <

Materiaal:
Arduino Nano + USB kabel
TF-Luna Sensor
Breadboard
Jumper wires male/male
kabel verbinders voor snel testen zonder solderen

Ik heb om dit aan de praat te krijgen de volgende bron gebruikt:
https://www.diyengineers.com/2022/06/02/lidar-how-to-use-with-arduino/

Op deze site kun je belangrijke documenten downloaden zoals datasheet en user manual maar die heb ik amper nodig gehad.
https://en.benewake.com/TFLuna/index.html

Lidar op voorraad op het moment van schrijven:
https://eu.robotshop.com/nl/products/benewake-tf-luna-8m-lidar-afstandssensor


Wat ik lastig vond bij deze is dat er geen JST GH1.25 - 4P naar Dupont verloopjes bij zaten dus heb ik de kabel gestript en waco verbindingsklemmen gebruikt om te testen. Solderen kan natuurlijk ook maar ook dat was me even teveel werk.
Kiwi Electronics verkoopt ze met de handige kabels maar niet op voorraad. https://www.kiwi-electronics.com/nl/tf-mini-s-lidar-module-10359?search=lidar

IMG_4943.JPGpins-arduino-nano.png

Ik heb een Arduino Nano gebruikt. In de tutorial wordt de Arduino Uno gebruikt en voor data overdracht de poorten ICSP2. Volgens bovenstaand schema kan je daarvoor IC2 pins Analog A4 & A5 gebruiken.

De 6e kabel hoef je niet te gebruiken.

Installeer Arduino software
https://www.arduino.cc/en/software

Arduino Library:
https://github.com/budryerson/TFLuna-I2C
Verbind de arduino met mini usb kabel aan je computer, kies links bovenin de Arduino software venster je type arduino board en de usb poort

Screenshot 2025-01-06 at 16.32.39.png

Volg de aanwijzingen in de tutorial via link bovenaan dit document om de library via Arduino software te installeren.
Ga bovenin je menu balk in de arduino software naar Tools > Serial Monitor.
Zet rechts onderin 9600 Baud om naar 115200 Baud, anders krijg je rare resultaten.

Houd je hand boven de lidar sensor en zie de waardes veranderen.

Als je nog info mist in deze uitleg of iets is niet duidelijk laat het me dan weten dan pas ik het aan.
Simone.vandordrecht@hku.nl

Voorbeeld project:  intensiteit licht LED pixel ring beïnvloeden door afstandmeting Lidar TF Luna sensor

Materiaal:
Neo pixel ring 12 of 16 pixels
Arduino Nano + USB kabel
TF-Luna Sensor
Breadboard
Jumper wires male/male
Resistor  330 Ω tot 470 Ω
Universal AC adapter 5V
Terminal block to 2.1mm DC barrel jack - Female

Bronnen voor testen:
https://www.diyengineers.com/2022/06/02/lidar-how-to-use-with-arduino/
https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-installation
https://medium.com/@elonskolnik/arduino-uno-tutorial-neopixel-ring-setup-9fafc099c89a
https://chatgpt.com/share/6787fc7b-e388-8006-98cc-3678b193ec44


Combineren:

Soldeer de kabeltjes van de TF Luna aan jumper wires en gebruik krimpkousjes voor bescherming
Power de Pixelring apart van de Arduino, zorg dat de ground wel doorlust naar de ground van arduino en TF Luna.

Screenshot 2025-01-15 at 17.50.41.png
(Duidelijk schema hiervan moet ik nog maken)

Alternatief voor draadloos project: Gebruik een powerbank 5V voor stroom voor de arduino en een batterij pack bijvoorbeeld 4x AA voor de stroom voor pixelring. Foto hiervan volgt..
Meer info kun je hier vinden: 
https://bookstack.hku.nl/books/arduino-things/page/controlling-ledstrips-with-arduino

Code:

#include <Adafruit_NeoPixel.h> //https://github.com/adafruit/Adafruit_NeoPixel
#include <TFLI2C.h> //https://github.com/budryerson/TFLuna-I2C
#include <Wire.h> // Instantiate the Wire library

#define PIXEL_PIN 6 // Pin verbonden met de NeoPixel-ring
#define NUM_PIXELS 21 // Aantal LEDs op de ring
#define MAX_BRIGHTNESS 255 // Maximale helderheid
#define MIN_BRIGHTNESS 5 // Minimale helderheid

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_PIXELS, PIXEL_PIN, NEO_RGBW + NEO_KHZ800); //lees achterop de leds of in de specificaties online welk type het is en pas de informatie hier aan, oorspronkelijk stond GRB in de code maar de ledring is RGBW dus aangepast
TFLI2C tfLuna;

void setup() {
Wire.begin();
Wire.setClock(100000); // Stel I2C-snelheid in op 100 kHz


strip.begin();
strip.show(); // Zorgt ervoor dat alle pixels uit staan
Serial.begin(9600);

Serial.println("Start setup");
delay(1000);

// Probeer verbinding met de TF-Luna
Serial.println("Verbinding met TF-Luna...");

uint16_t frameRate;
if (tfLuna.Get_Frame_Rate(frameRate, TFL_DEF_ADR)) {
Serial.print("Frame rate: ");
Serial.println(frameRate);
} else {
Serial.println("Kon frame rate niet ophalen. Controleer de verbinding.");
}
}

void loop() {
int16_t distance = 0;

// Haal de afstand op van de TF-Luna
if (tfLuna.getData(distance, TFL_DEF_ADR)) {
// Bepaal helderheid op basis van afstand
int brightness = map(distance, 10, 100, MAX_BRIGHTNESS, MIN_BRIGHTNESS); // 10 staat voor minimale afstand, 100 staat voor maximale in cm, past dit aan als je meer of minder afstand nodig hebt
brightness = constrain(brightness, MIN_BRIGHTNESS, MAX_BRIGHTNESS);

// Stel helderheid in en kleur de LEDs
strip.setBrightness(brightness);
for (int i = 0; i < NUM_PIXELS; i++) {
strip.setPixelColor(i, strip.Color(0, 255, 255, 0)); // Pas hier de kleur aan, volgorde = G, R, B, W (vreemd, klopt niet met de info van de ring maar het werkt)
}
strip.show();

// Print de afstand en helderheid naar de Serial Monitor
Serial.print("Afstand: ");
Serial.print(distance);
Serial.print(" cm, Helderheid: ");
Serial.println(brightness);
} else {
// Geef een foutmelding als de data niet kan worden opgehaald
Serial.println("Fout bij ophalen afstandsgegevens.");
tfLuna.printStatus(); // Laat de foutstatus zien
}

delay(100); // Kleine pauze voor de volgende meting
}