Дальномер Benewake LiDAR TFmini Plus: инструкция, подключение, примеры использования и документация
Используйте Benewake LiDAR TFmini Plus для определения расстояния до объекта. Дальномер видит пространство от 0,3 до 12 метров вперёд, что позволяет его использовать в системах охраны периметра, управлении трафиком и умных парковках.
Пример работы для 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-tfmini-plus-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-tfmini-plus-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-tfmini-plus-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 |
Программная настройка
- Установите библиотеку pigpio:
pip install pigpio
Вывод данных
В качестве примера выведем в консоль расстояние до объекта. Для запуска скрипта приведенным ниже — запустите pigpio Daemon:
sudo pigpiod
После остановки скрипта — отключите pigpio Daemon:
sudo killall pigpiod
- lidar-tfmini-plus-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 |
Программная настройка
- Включите mini UART:
- Откройте файл конфигурационный файл Raspbian OS:
sudo nano /boot/config.txt
- В самом конце файла добавьте строку:
enable_uart=1
- Сохраните файл сочетаем клавиш «Ctrl+X»
- Перезагрузите Raspberry Pi:
sudo reboot
Вывод данных
В качестве примера выведем в консоль расстояние до объекта. Для запуска скрипта отключите консоль от mini UART:
sudo systemctl stop serial-getty@ttyS0.service
После остановки скрипта — подключите консоль к mini UART:
sudo systemctl start serial-getty@ttyS0.service
- lidar-tfmini-plus-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)
Элементы модуля
Передатчик и приёмник
На модуле расположен LED передатчик и светочувствительный приёмник.
- Передатчик (Transmiter) передаёт инфракрасное излучения в окружающее пространство.
- Приёмник (Receive) соответственно принимает отраженные волны от предметов окружающего мира.
Получив время, за которое вернулась отражённая волна, электронная схема дальномера определяет расстояние до объекта в поле зрения датчика.
Контакты подключения
Датчик подключается к управляющей электронике через выходной кабель с четырьмя проводниками:
Цвет провода | Назначение | Подключение | Примечание |
---|---|---|---|
Красный | VCC | Питание | Входное напряжения строго 5 вольт. |
Чёрный | GND | Земля | |
Зелёный | TX / SCL | Пин RX / SCL | Напряжения логики равно 3,3 вольт (толлерантно к 5 В) |
Белый | RX / SDA | Пин TX / SDA | Напряжения логики равно 3,3 вольт (толлерантно к 5 В) |
Габаритный чертёж
Характеристики
- Модель: Benewake LiDAR TFmini Plus
- Источник света: LED
- Длина волны: 850 нм
- Диапазон измерений: 0,1–12 м
- Разрешающая способность: 1 см
- Эффективный угол наблюдения: 3,6°
- Макс. освещённость: 70000 люкс
- Частота сигнала: до 1000 Гц
- Интерфейс: UART / I²C
- Напряжение питания: 5 В
- Напряжение логически уровней: 3,3 В (толерантность к 5 В)
- Средний ток потребления: до 110 мА
- Пиковый ток потребления: 140 мА
- Степень защиты: IP65
- Габариты: 35×18,5×21 мм
- Длина кабеля: 30 см
- Масса: 12 г