LAB1 Technologies - Soporte

TF-LC02 LiDAR - Documentacion y Ejemplos

- TF-LC02 -

El TF-LC02 es un módulo LiDAR de medicion de distancias y deteccion de objectos de alta precisión, basado en el principio ToF (Time-of-Flight) que es una técnica utilizada en LiDAR (Light Detection and Ranging) que permite medir distancias midiendo el tiempo que tarda un pulso de luz en viajar desde la fuente de emision laser hasta el objeto y de regreso al detector. Es una de las técnicas más comunes y efectivas utilizadas en LiDAR para estimar la distancia a objetos en el entorno.
Este modulo utiliza un laser del tipo VCSEL de longuitud de onda 940nm, los VCSEL tienen ventajas importantes en términos de eficiencia y capacidad de integración en sistemas electrónicos. Posee un Angulo de vision (FoV) de 9 grados en ambos lados del eje central óptico, total grados , un rango de operacion 3cm - 200cm (90% reflectividad) (zona ciega 3cm) y una precision de +-2cm en mediciones de 3cm a 100cm y +-5% en mediciones de 100 a 200cm.
Para su funcionamiento requiere un voltaje de 3.3v (consumo <= a 15mA ). La comunicacion es mediante UART TTL (3.3v) lo que permite conectarse a cualquier microntrolador del mercado (Arduino/Atmega/ESP32/ESP12/ESP8266/PIC/etc) o puede conectarse directamente a una PC/Raspberry/etc mediante un adaptador UART TTL USB.

Este modulo es ideal para entusiastas de la robótica, ingenieros y desarrolladores para integrar en sus de proyectos de electronica y robotica incluyendo aspiradoras robot, robots, drones, casas inteligentes, instrumentos de medicion, etc por su alta precision, tamaño y peso reducidos (1 gramo), facilidad de operacion e interface estandar UART TTL.

Caracteristicas
Product performance:
Operating range: 3cm-200cm at 90% reflectivity
Data acquisition time: 33msec
Accuracy: +-2cm at (3cm-100cm); +-5% at (100-200cm)
Blind zone: 3cm
Optical parameters:
Light source: VCSEL
Central wavelength: 940nm
Photobiological safety: Class1 (IEC60825-1:2400) (Human eye safety)
FoV: +-9 Degrees (9 Degrees on both sides of the optical central axis, total 18 Degrees)
Frame rate: 1-1000Hz(default: 100Hz)
Resistance to ambient light: 70Klux
Electrical parameters:
Supply voltage: 3-3.6V
Average current: <=15mA
Power consumption: <=50mW
Communication signal level: LVTTL (3.3V)
Others:
Connector: 1.0mm 6P
Cable Length: 10cm(including connector)
Storage temperature -20C to 85C
Operating temperature -20C to 70C
Dimension: 20mm*11.5mm*7.6mm(L*W*H)
Weight: 1g

Atencion:
Si los requisitos de confiabilidad y seguridad de la aplicación de este modulo son estrictos, elija este producto cuidadosamente, como las siguientes aplicaciones:

- Equipos de seguridad y control de tráfico (aviones, trenes, automóviles, etc.)
- Control de señales de tráfico.
- Dispositivo de fuga de gas
- Entornos de energía nuclear
- Equipo de rescate
- Otros equipos relacionados con la seguridad humana y la seguridad pública.
TF-LC02 está diseñado para productos de consumo, no es aplicable a escenarios de alta confiabilidad y alta seguridad.

Nota:
* Asegúrese de que el entorno de instalación y la lente del módulo estén limpios;
* Mantenga limpia la lente del módulo durante el uso, limpie el polvo, el agua y otros contaminantes con algodón a tiempo;
* No toque la placa de circuito con las manos, use guantes antiestáticos o una correa antiestática para la operación;
* Cualquier tipo de residuo entre la lente del módulo y la superficie de montaje puede bloquear la ruta óptica y afectar el rendimiento de la medición;
* Apriete los tornillos para asegurarse de que el producto no se deslice, asegúrese de que la lente del módulo esté horizontal.
* Advertencia: Se recomienda utilizar este producto en interiores con condiciones de luz ambiental de 100 Klux, la luz solar directa causar degradación del rendimiento.


Instalacion y uso:

Descargue el siguiente archivo  , en el mismo podra encontrar el manual de usuario, librerias y codigo de ejemplo.

Link de descarga:
https://r2.lab1.tech/TF-LC02_Bundle0.zip

Schematic:

1. Es necesario agregar un capacitor de alta frecuencia de más de 220 μF al pin de fuente de alimentación del módulo (el láser en el módulo adopta el método de pulso).
2. Se recomienda conectar una resistencia pull-up externa con un valor de resistencia de 1 KΩ. Si La resistencia pull-up no está conectada, la forma de onda de comunicación puede deformarse (la el borde ascendente tiene forma de arco); al mismo tiempo, durante el proceso de comunicación, es susceptible a interferencias (especialmente cuando el cable del puerto serie es muy largo, o cuando pasa a través de accesorios como motores, parlantes y timbres), provocando que la comunicación falle.
3. Si solo hay un producto conectado al bus del puerto serie, puede cancelar R3 y conectar el Pin CS a tierra directamente, para que el puerto serie esté siempre habilitado.
4. En el rango de medida cercano, la zona ciega es de 3 cm y los datos medidos en la zona ciega son inestables o imprecisos. Al diseñar, preste atención a la zona ciega.
5. Al diseñar la estructura, no se puede agregar un deflector delante de la lente, solo se pueden hacer agujeros. El tamaño del orificio debe coincidir con el borde de la lente  el módulo y péguelo con pegamento resistente al agua.
6. Parámetros generales de funcionamiento de los módulos:
El nivel de alimentación y comunicación es de 3,3 V;
El pin CS debe estar inactivo;
El tiempo de adquisición de datos es de 33 ms;
El dispositivo comienza a enviar datos estables después de 200 ms durante el primer encendido;
Actualmente la versión del módulo solo admite UART, el pin I2C se puede dejar flotante. I2C El modo de comunicación se actualizará en futuras versiones.

Protocolo y comandos generales:

Protocolo de comunicacion serial UART
Interface: UART 
Default baud rate: 115200 
Data bit: 8 
Stop bit: 1
Parity check: none 
Hardware flow control: none

Puede consultar el protocolo en el archivo User_Manual.pdf del zip de documentacion.
Ejemplos Comandos:
1. Medir distancia: 0x81 Command sent: 55 AA 81 00 FA Reply: 55 AA 81 03 01 55 00 FA 01 55 is measuring distance value, the distance value is 0x0155, because LiDAR data-packet follows big-endian format, which is 341mm in decimal form. 00 is the status, which means the value is valid. 2. Reset module: 0x84 Command sent: 55 AA 84 00 FA Reply: 55 AA 84 00 FA The module resets after the response. 3. Get factory default settings: 0x85 Command sent: 55 AA 85 00 FA Reply: 55 AA 85 07 2B 0E 17 01 08 01 03 FA Comments: 2B is offset_short1, 0E is offset_short2; 17 is offset_long1, 01 is offset_long2; The crosstalk value is 0x0108; Calibration results: 00 Unchecked; 01 Crosstalk checked; 02 Offset checked; 03 Full checked. 4. Get product information: 0x86 Command sent: 55 AA 86 00 FA Reply: 55 AA 86 03 02 55 01 FA Comments: 0x41(A) means the module supports I2C and UART, 0x55(U) means the module supports UART, 0x49(I) means the module supports I2C. 01 is the software version.

En el siguiente ejemplo vemos como conectar el  modulo TF-LC02 a un Arduino UNO

Arduino
UNO
TF-LC02
LiDAR
3.3V VCC
GND GND
2 TX
3 RX
GND CS

 

Codigo Arduino (sketch):

#include <SoftwareSerial.h>     
// TF-LC02 LiDAR
// LAB1 TECHNOLOGIES SA
   
SoftwareSerial PortLiDAR(2, 3);  ////Define Pins Softserial donde esta conectado el LiDAR y PIN2 como RX y PIN3 como TX

u8 cmd[5] = {0x55, 0xAA, 0x81, 0x00, 0xFA};  //Envia comando medir distancia

typedef struct { // Definicion de estructura para almacenar respuesta
  int distance;
  u8 ErrorCode; 
  boolean receiveComplete;
} TF;

TF Lidar = {0,0,false};

/***************************************
 *  Protocolo:
 *  2 byte : Header 0x55 0xAA
 *  1 byte : Comando :0x81 Unidad:mm
 *  1 byte : Longitud
 *  N byte : Configuracion parametros
 *  1 byte : Final del frame 0xFA
 *  ***************************************
 *  Ejemplo: para  medir distancia en MM  // VER EN EL MANUAL MAS COMANDOS
 *  Arduino Envia:55 AA 81 00 FA
 *  LiDAR TOF responde : 55 AA 81 03 01 55 00 FA
 **************************************/
void getLidarData(TF* lidar) { // Procesa los bytes recibidos por el serial desde el LiDAR y los almacena en la estructura
  static char i = 0;
  static int rx[8];
  if (PortLiDAR.available())
  {
    rx[i] = PortLiDAR.read();
    if (rx[0] != 0x55)
    {
      i = 0;
    } else if (i == 1 && rx[1] != 0xAA)
    {
      i = 0;
    } else if (i == 7)
    {
      i = 0;
      if (rx[7] == 0xFA)
      {
        lidar->distance = rx[5] + rx[4] * 256;
        lidar->ErrorCode  = rx[6];
        lidar->receiveComplete = true;
      }
    } else
    {
      i++;
    }
  }
}

void setup() {
/********************************
  * Protocolo de puerto serie TOF: TTL
  * Velocidad de baudios: 115200
  * Bits de datos: 8
  * Bit de parada: 1
  * Paridad: Ninguna
  * Control de flujo: ninguno
 **************************************/
  Serial.begin(115200);       //Se aconseja usar baudrate alto , para evitar perdidas
  PortLiDAR.begin(115200);
  delay (200); // El dispositivo comienza a enviar datos estables despues de 200ms despues del primer encendido.

}

void loop() {
  delay (100);
  PortLiDAR.write(cmd, 5);
  delay(33); // tiempo que tarda en responder el LiDAR
  getLidarData(&Lidar);
  while (PortLiDAR.available()>0) {
    getLidarData(&Lidar);
  }
  Port_Print_Ascii(&Lidar);
  Lidar.receiveComplete = false;

}

void Port_Print_Ascii(TF* lidar)
{
  Serial.print("Distancia(mm):");
  Serial.println(lidar->distance);
  if(lidar->ErrorCode)
  {
    Serial.print("ErrorCode = ");
    Serial.println(lidar->ErrorCode,HEX);
  }
}