Дальномер Benewake LiDAR TF02 Pro: инструкция, подключение и примеры использования

Используйте Benewake LiDAR TF02 Pro для определения расстояния до объекта. Дальномер видит пространство от 0,4 до 40 метров вперёд, что позволяет его использовать в системах охраны периметра, управлении трафиком и умных парковках.

Пример работы для Arduino

В качестве мозга для считывания показаний с датчика рассмотрим платформы из семейства Arduino.

На аппаратном уровне дальномер общается с управляющей электроникой по шине UART или I²C. Для коммуникации используйте библиотеку TFLidar, которая скрывает в себе все тонкости общения с модулем и облегчит написания кода программ.

В приведенных примерах будем использовать шину UART. Но в зависимости от конкретной модели Arduino, рассмотрим три случая коммуникации:

Подробнее про Serial в Arduino

SoftwareSerial

SoftwareSerial — это программный UART, который позволяет имитировать Serial на других контактах платы. Это удобно когда на плате нет свободных аппаратных UART.

Схема устройства

В качестве примера подключите дальномер к платформе Arduino Uno.

Дальномер (Цвет провода) Arduino Uno
Питание (красный) 5V
Земля (чёрный) GND
TX (зелёный) 10
RX (белый) 11

Для коммуникации используйте разъём на выходном проводе от сенсора совместно с соединительными проводами «мама-папа».

Для быстрой сборки и отладки устройства рекомендуем взять плату расширения Troyka Shield, которая одевается сверху на Arduino Uno методом бутерброда.

Вывод данных

В качестве примера выведем в Serial-порт расстояние до объекта.

lidar-tf02-pro-example-arduino-basic-read-soft.ino
// Библиотека для работы с дальномерами
#include "TFLidar.h"
 
// Библиотека для работы программного Serial
#include <SoftwareSerial.h>
 
// Создаём объект для работы с программным Serial
// и передаём ему пины TX и RX
SoftwareSerial mySerial(10, 11);
 
// Serial-порт к которому подключён дальномер
#define LIDAR_SERIAL    mySerial
 
// Создаём объект класса TFLidar и передаём в него объект LIDAR_SERIAL 
TFLidar lidar;
 
// Переменная для хранения расстояния
int dist;
 
void setup() {
  // Открываем последовательный порт для мониторинга действий в программе
  // и передаём скорость 9600 бод
  Serial.begin(9600);
  // Ждём, пока не откроется монитор последовательного порта
  // для того, чтобы отследить все события в программе
  while (!Serial);
 
  Serial.print("Serial init OK\r\n");
  // Открываем Serial-соединение с дальномером на скорости 115200
  LIDAR_SERIAL.begin(115200);
  lidar.begin(&LIDAR_SERIAL);    
}
 
void loop() {
  // Вычисляем расстояние до объекта
  lidar.getData(dist);
  // Выводим данные в Serial-порт
  Serial.print( "Dist: ");
  Serial.print(dist);
  Serial.print(" cm");
  Serial.println();
  // Ждём 50 мс
  delay(50);  
}

HardwareSerial

HardwareSerial — это аппаратный UART, который предназначен для общения с модулями по одноименному интерфейсу.

Схема устройства

В качестве примера подключите дальномер к платформе Arduino Leonardo.

Дальномер (Цвет провода) Arduino Leonardo
Питание (красный) 5V
Земля (чёрный) GND
TX (зелёный) 0
RX (белый) 1

Для коммуникации используйте разъём на выходном проводе от сенсора совместно с соединительными проводами «мама-папа».

Для быстрой сборки и отладки устройства рекомендуем взять плату расширения Troyka Shield, которая одевается сверху на Arduino Uno методом бутерброда.

Вывод данных

В качестве примера выведем в Serial-порт расстояние до объекта.

lidar-tf02-pro-example-arduino-basic-read-hard.ino
// Библиотека для работы с дальномерами
#include "TFLidar.h"
 
// Serial-порт к которому подключён дальномер
#define LIDAR_SERIAL    Serial1
 
// Создаём объект класса TFLidar и передаём в него объект LIDAR_SERIAL 
TFLidar lidar;
 
// Переменная для хранения расстояния
int dist;
 
void setup() {
  // Открываем последовательный порт для мониторинга действий в программе
  // и передаём скорость 9600 бод
  Serial.begin(9600);
  // Ждём, пока не откроется монитор последовательного порта
  // для того, чтобы отследить все события в программе
  while (!Serial);
 
  Serial.print("Serial init OK\r\n");
  // Открываем Serial-соединение с дальномером на скорости 115200
  LIDAR_SERIAL.begin(115200);
  lidar.begin(&LIDAR_SERIAL);    
}
 
void loop() {
  // Вычисляем расстояние до объекта
  lidar.getData(dist);
  // Выводим данные в Serial-порт
  Serial.print( "Dist: ");
  Serial.print(dist);
  Serial.print(" cm");
  Serial.println();
  // Ждём 50 мс
  delay(50);  
}

HardwareSerial Mega

HardwareSerial Mega — это всё тот же аппаратный UART, который предназначен для общения с модулями по одноименному интерфейсу. Разница лишь в том, что у платформ формата Mega их несколько и они выведены на отдельные пины.

Схема устройства

В качестве примера подключите дальномер к платформе Arduino Leonardo.

Дальномер (Цвет провода) Arduino Mega 2560
Питание (красный) 5V
Земля (чёрный) GND
TX (зелёный) 17
RX (белый) 16

Для коммуникации используйте разъём на выходном проводе от сенсора совместно с соединительными проводами «мама-папа».

Для быстрой сборки и отладки устройства рекомендуем взять плату расширения Troyka Shield, которая одевается сверху на Arduino Uno методом бутерброда.

Вывод данных

В качестве примера выведем в Serial-порт расстояние до объекта.

lidar-tf02-pro-example-arduino-basic-read-hardmega.ino
// Библиотека для работы с дальномерами
#include "TFLidar.h"
 
// Serial-порт к которому подключён дальномер
#define LIDAR_SERIAL    Serial2
 
// Создаём объект класса TFLidar и передаём в него объект LIDAR_SERIAL 
TFLidar lidar;
 
// Переменная для хранения расстояния
int dist;
 
void setup() {
  // Открываем последовательный порт для мониторинга действий в программе
  // и передаём скорость 9600 бод
  Serial.begin(9600);
  // Ждём, пока не откроется монитор последовательного порта
  // для того, чтобы отследить все события в программе
  while (!Serial);
 
  Serial.print("Serial init OK\r\n");
  // Открываем Serial-соединение с дальномером на скорости 115200
  LIDAR_SERIAL.begin(115200);
  lidar.begin(&LIDAR_SERIAL);    
}
 
void loop() {
  // Вычисляем расстояние до объекта
  lidar.getData(dist);
  // Выводим данные в Serial-порт
  Serial.print( "Dist: ");
  Serial.print(dist);
  Serial.print(" cm");
  Serial.println();
  // Ждём 50 мс
  delay(50);  
}

Пример для Raspberry Pi

В качестве мозга для считывания показаний с датчика рассмотрим одноплатные компьютеры из семейства Raspberry Pi.

На низком уровне дальномер общается с управляющей электроникой по шине UART или I²C. В приведенных примерах будем использовать шину UART. Рассмотрим два случая коммуникации:

Подробнее про UART в Raspberry Pi

SoftwareSerial

SoftwareSerial — это программный UART, который позволяет имитировать Serial на других контактах платы. Это удобно когда на плате нет свободных аппаратных UART.

Схема устройства

В качестве примера подключите дальномер к платформе Raspberry Pi 4. Для быстрой сборки и отладки устройства возьмите плату расширения Troyka HAT, которая надевается сверху на малину методом бутерброда.

Имена пинов на Troyka HAT относятся к нумерации Wiring Pi, которая отличается от стандартной нумерации BCM одноплатника Raspberry Pi. Для подробностей смотрите распиновку на Troyka HAT.

Дальномер (Цвет провода) Raspberry Pi 4 (BCM) Troyka HAT (WiringPI)
Питание (красный) 5V 5V
Земля (чёрный) GND GND
TX (зелёный) 6 22
RX (белый) 5 21

Программная настройка

  1. Установите библиотеку pigpio:
    pip install pigpio

Вывод данных

В качестве примера выведем в консоль расстояние до объекта. Для запуска скрипта приведенным ниже — запустите pigpio Daemon:

sudo pigpiod

После остановки скрипта — отключите pigpio Daemon:

sudo killall pigpiod
lidar-tf02-pro-example-raspberry-pi-basic-read-soft.py
# Подключаем необходимые библиотеки
import pigpio
import time
 
# Номера пинов RX и TX
RX = 6
TX = 5
 
# Настраиваем пины и программный Serial
pi = pigpio.pi()
pi.set_mode(RX, pigpio.INPUT)
pi.bb_serial_read_open(RX, 115200) 
 
# Функция считывания данных 
def getDistance():
    (count, data) = pi.bb_serial_read(RX)
    if count > 8:
      for i in range(0, count - 9):
        if data[i] == 89 and data[i + 1] == 89: 
          checksum = 0
          for j in range(0, 8):
            checksum = checksum + data[i + j]
          checksum = checksum % 256
          if checksum == data[i + 8]:
            distance = data[i + 2] + data[i + 3] * 256
            return distance
 
while True:
    # Считываем расстояние с датчика
    dist = getDistance()
    # Выводим данные в консоль
    print(dist, 'cm')
    # Ждём 100 мс
    time.sleep(0.1)

HardwareSerial

HardwareSerial — это аппаратный UART, который предназначен для общения с модулями по одноименному интерфейсу.

Схема устройства

В качестве примера подключите дальномер к платформе Raspberry Pi 4. Для быстрой сборки и отладки устройства возьмите плату расширения Troyka HAT, которая надевается сверху на малину методом бутерброда.

Имена пинов на Troyka HAT относятся к нумерации Wiring Pi, которая отличается от стандартной нумерации BCM одноплатника Raspberry Pi. Для подробностей смотрите распиновку на Troyka HAT.

Дальномер (Цвет провода) Raspberry Pi 4 (BCM) Troyka HAT (WiringPI)
Питание (красный) 5V 5V
Земля (чёрный) GND GND
TX (зелёный) RX / 15 RX / 16
RX (белый) TX / 14 TX / 15

Программная настройка

  1. Включите mini UART:
    1. Откройте файл конфигурационный файл Raspbian OS:
      sudo nano /boot/config.txt
    2. В самом конце файла добавьте строку:
      enable_uart=1
    3. Сохраните файл сочетаем клавиш «Ctrl+X»
  2. Перезагрузите Raspberry Pi:
    sudo reboot

Вывод данных

В качестве примера выведем в консоль расстояние до объекта. Для запуска скрипта отключите консоль от mini UART:

sudo systemctl stop serial-getty@ttyS0.service

После остановки скрипта — подключите консоль к mini UART:

sudo systemctl start serial-getty@ttyS0.service
lidar-tf02-pro-example-raspberry-pi-basic-read-hard-mini-uart.py
# Подключаем необходимые библиотеки
import serial
import time
 
# Выбираем Serial / UART для общения с дальномером
ser = serial.Serial("/dev/ttyS0", 115200)
# Открываем Serial
if ser.is_open == False:
    ser.open()
 
# Функция считывания данных 
def getDistance():
    while True:
        count = ser.in_waiting
        if count > 8:
            data = ser.read(9)
            ser.reset_input_buffer()
            if data[0] == 89 and data[1] == 89: 
                checksum = 0
                for j in range(0, 8):
                    checksum = checksum + data[j]
                checksum = checksum % 256
                if checksum == data[8]:
                    distance = data[2] + data[3] * 256
                    return distance
 
while True:
    # Считываем расстояние с датчика
    dist = getDistance()
    # Выводим данные в консоль
    print(dist, 'cm')
    # Ждём 100 мс
    time.sleep(0.1)

Элементы датчика

Передатчик и приёмник

На модуле расположен лазерный передатчик и светочувствительный приёмник.

  • Передатчик (Transmiter) передаёт инфракрасное излучения в окружающее пространство.
  • Приёмник (Receive) соответственно принимает отраженные волны от предметов окружающего мира.

Получив время, за которое вернулась отражённая волна, электронная схема дальномера определяет расстояние до объекта в поле зрения датчика.

Контакты подключения

Датчик подключается к управляющей электронике через выходной кабель с четырьмя проводниками:

Цвет провода Назначение Подключение Примечание
Красный VCC Питание Диапазон входного напряжения от 5 до 12 вольт.
Чёрный GND Земля
Зелёный TX / SCL Пин RX / SCL Напряжения логики равно 3,3 вольт (толлерантно к 5 В)
Белый RX / SDA Пин TX / SDA Напряжения логики равно 3,3 вольт (толлерантно к 5 В)

Габаритный чертёж

Характеристики

  • Модель: Benewake LiDAR TF02 Pro
  • Источник света: VCSEL (вертикально-излучающий лазерный диод)
  • Фотобиологическая безопасность: лазерная аппаратура класса 1(ГОСТ IEC 60825-1-2013 / EN60825)
  • Длина волны: 850 нм
  • Диапазон измерений:
    • 0,1–40 м (при отражающей способности 90%)
    • 0,1–13,5 м (при отражающей способности 10%)
  • Разрешающая способность: 1 см
  • Эффективный угол наблюдения: 3°
  • Макс. освещённость: 100000 люкс
  • Частота сигнала: 1–1000 Гц (по умолчанию 100 Гц)
  • Интерфейсы: UART / I²C
  • Адрес I²C: 0x10 (по умолчанию)
  • Напряжение питания: 5–12 В
  • Напряжение логического уровня: 3,3 В
  • Средний ток потребления: до 200 мА
  • Пиковый ток потребления: 300 мА
  • Материал корпуса: PC/ABS-пластик
  • Степень защиты: IP65
  • Длина кабеля: 80 см
  • Размеры: 69×41,5×26 мм
  • Масса: 50 г

Ресурсы