====== Дальномер Benewake LiDAR TF02: инструкция, подключение и примеры использования ======
Используйте [[amp>product/lidar-tf02?utm_source=man&utm_campaign=lidar-tf02&utm_medium=wiki|Benewake LiDAR TF02]] для определения расстояния до объекта. Дальномер видит пространство от 0,4 до 22 метров вперёд, что позволяет его использовать в системах охраны периметра, управлении трафиком и умных парковках.
{{ :products:lidar-tf02:lidar-tf02.4.jpg?nolink |}}
[[amp>page/lidar-sensors-guide?utm_source=man&utm_campaign=lidar-tf02&utm_medium=wiki|Подробнее про дальномеры Benewake]]
===== Пример работы для Arduino =====
В качестве мозга для считывания показаний с датчика рассмотрим платформы из семейства [[amp>collection/arduino?utm_source=man&utm_campaign=lidar-tf02&utm_medium=wiki|Arduino]].
[[amp>page/arduino-ide?utm_source=man&utm_campaign=lidar-tf02&utm_medium=wiki|Как начать работу с Arduino?]]
На аппаратном уровне дальномер общается с управляющей электроникой по шине UART или I²C. Для коммуникации используйте библиотеку {{ :products:lidar-tf02:tflidar.zip |TFLidar}}, которая скрывает в себе все тонкости общения с модулем и облегчит написания кода программ.
В приведенных примерах будем использовать шину UART. Но в зависимости от конкретной модели Arduino, рассмотрим три случая коммуникации:
* [[#softwareserial|SoftwareSerial]]
* [[#hardwareserial|HardwareSerial]]
* [[#hardwareserial|HardwareSerial Mega]]
Подробнее про Serial в Arduino
==== SoftwareSerial ====
SoftwareSerial — это программный UART, который позволяет имитировать Serial на других контактах платы. Это удобно когда на плате нет свободных аппаратных UART.
=== Схема устройства ===
В качестве примера подключите дальномер к платформе [[amp>product/arduino-uno?utm_source=man&utm_campaign=lidar-tf02&utm_medium=wiki|Arduino Uno]].
^ Дальномер (Цвет провода) ^ Arduino Uno ^
| Питание (красный) | 5V |
| Земля (чёрный) | GND |
| TX (зелёный) | 10 |
| RX (белый) | 11 |
Для коммуникации используйте разъём на выходном проводе от сенсора совместно с
[[amp>product/wire-fm?utm_source=man&utm_campaign=lidar-tf02&utm_medium=wiki|соединительными проводами «мама-папа»]].{{ :products:lidar-tf02:lidar-tf02-example-arduino-soft.png?nolink |}}
Для быстрой сборки и отладки устройства рекомендуем взять плату расширения [[amp>product/arduino-troyka-shield?utm_source=man&utm_campaign=lidar-tf02&utm_medium=wiki|Troyka Shield]], которая одевается сверху на Arduino Uno методом бутерброда.{{ :products:lidar-tf02:lidar-tf02-example-arduino-troyka-shield-soft.png?nolink |}}
=== Вывод данных ===
В качестве примера выведем в Serial-порт расстояние до объекта.
// Библиотека для работы с дальномерами
#include "TFLidar.h"
// Библиотека для работы программного Serial
#include
// Создаём объект для работы с программным 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, который предназначен для общения с модулями по одноименному интерфейсу.
=== Схема устройства ===
В качестве примера подключите дальномер к платформе [[amp>product/arduino-leonardo?utm_source=man&utm_campaign=lidar-tf02&utm_medium=wiki|Arduino Leonardo]].
^ Дальномер (Цвет провода) ^ Arduino Leonardo ^
| Питание (красный) | 5V |
| Земля (чёрный) | GND |
| TX (зелёный) | 0 |
| RX (белый) | 1 |
Для коммуникации используйте разъём на выходном проводе от сенсора совместно с
[[amp>product/wire-fm?utm_source=man&utm_campaign=lidar-tf02&utm_medium=wiki|соединительными проводами «мама-папа»]].{{ :products:lidar-tf02:lidar-tf02-example-arduino-hard.png?nolink |}}
Для быстрой сборки и отладки устройства рекомендуем взять плату расширения [[amp>product/arduino-troyka-shield?utm_source=man&utm_campaign=lidar-tf02&utm_medium=wiki|Troyka Shield]], которая одевается сверху на Arduino Uno методом бутерброда.{{ :products:lidar-tf02:lidar-tf02-example-arduino-troyka-shield-hard.png?nolink |}}
=== Вывод данных ===
В качестве примера выведем в Serial-порт расстояние до объекта.
// Библиотека для работы с дальномерами
#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 их несколько и они выведены на отдельные пины.
=== Схема устройства ===
В качестве примера подключите дальномер к платформе [[amp>product/arduino-mega-2560?utm_source=man&utm_campaign=lidar-tf02&utm_medium=wiki|Arduino Leonardo]].
^ Дальномер (Цвет провода) ^ Arduino Mega 2560 ^
| Питание (красный) | 5V |
| Земля (чёрный) | GND |
| TX (зелёный) | 17 |
| RX (белый) | 16 |
Для коммуникации используйте разъём на выходном проводе от сенсора совместно с
[[amp>product/wire-fm?utm_source=man&utm_campaign=lidar-tf02-pro&utm_medium=wiki|соединительными проводами «мама-папа»]].{{ :products:lidar-tf02:lidar-tf02-example-arduino-hardmega.png?nolink |}}
Для быстрой сборки и отладки устройства рекомендуем взять плату расширения [[amp>product/arduino-troyka-shield?utm_source=man&utm_campaign=lidar-tf02&utm_medium=wiki|Troyka Shield]], которая одевается сверху на Arduino Uno методом бутерброда.{{ :products:lidar-tf02:lidar-tf02-example-arduino-troyka-tail-shield-hardmega.png?nolink |}}
=== Вывод данных ===
В качестве примера выведем в Serial-порт расстояние до объекта.
// Библиотека для работы с дальномерами
#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 =====
В качестве мозга для считывания показаний с датчика рассмотрим одноплатные компьютеры из семейства [[amp>collection/raspberry-pi?utm_source=man&utm_campaign=lidar-tf02&utm_medium=wiki|Raspberry Pi]].
[[articles:rpi-guide|Как начать работу с Raspberry Pi?]]
На низком уровне дальномер общается с управляющей электроникой по шине UART или I²C. В приведенных примерах будем использовать шину UART. Рассмотрим два случая коммуникации:
* [[#softwareserial1|SoftwareSerial]]
* [[#hardwareserial1|HardwareSerial]]
Подробнее про UART в Raspberry Pi
==== SoftwareSerial ====
SoftwareSerial — это программный UART, который позволяет имитировать Serial на других контактах платы. Это удобно когда на плате нет свободных аппаратных UART.
=== Схема устройства ===
В качестве примера подключите дальномер к платформе [[amp>product/raspberry-pi-4-model-b-4-gb?utm_source=man&utm_campaign=lidar-tf02&utm_medium=wiki|Raspberry Pi 4]]. Для быстрой сборки и отладки устройства возьмите плату расширения [[amp>product/raspberry-pi-troyka-hat?utm_source=man&utm_campaign=lidar-tf02&utm_medium=wiki|Troyka HAT]], которая надевается сверху на малину методом бутерброда.
Имена пинов на Troyka HAT относятся к нумерации ''Wiring Pi'', которая отличается от стандартной нумерации ''BCM'' одноплатника Raspberry Pi. Для подробностей смотрите [[products:raspberry-pi-troyka-hat#распиновка|распиновку на Troyka HAT]].
^ Дальномер (Цвет провода) ^ Raspberry Pi 4 (BCM) ^ Troyka HAT (WiringPI) ^
| Питание (красный) | 5V | 5V |
| Земля (чёрный) | GND | GND |
| TX (зелёный) | 6 | 22 |
| RX (белый) | 5 | 21 |
{{ :products:lidar-tf02:lidar-tf02-example-raspberry-pi-troyka-hat-soft.png?nolink |}}
=== Программная настройка ===
- [[articles:rpi-guide|Заведите Raspberry Pi]]
- Установите библиотеку pigpio:pip install pigpio
=== Вывод данных ===
В качестве примера выведем в консоль расстояние до объекта. Для запуска скрипта приведенным ниже — запустите pigpio Daemon:sudo pigpiod
После остановки скрипта — отключите pigpio Daemon:sudo killall pigpiod
# Подключаем необходимые библиотеки
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, который предназначен для общения с модулями по одноименному интерфейсу.
=== Схема устройства ===
В качестве примера подключите дальномер к платформе [[amp>product/raspberry-pi-4-model-b-4-gb?utm_source=man&utm_campaign=lidar-tf02&utm_medium=wiki|Raspberry Pi 4]]. Для быстрой сборки и отладки устройства возьмите плату расширения [[amp>product/raspberry-pi-troyka-hat?utm_source=man&utm_campaign=lidar-tf02&utm_medium=wiki|Troyka HAT]], которая надевается сверху на малину методом бутерброда.
Имена пинов на Troyka HAT относятся к нумерации ''Wiring Pi'', которая отличается от стандартной нумерации ''BCM'' одноплатника Raspberry Pi. Для подробностей смотрите [[products:raspberry-pi-troyka-hat#распиновка|распиновку на Troyka HAT]].
^ Дальномер (Цвет провода) ^ Raspberry Pi 4 (BCM) ^ Troyka HAT (WiringPI) ^
| Питание (красный) | 5V | 5V |
| Земля (чёрный) | GND | GND |
| TX (зелёный) | RX / 15 | RX / 16 |
| RX (белый) | TX / 14 | TX / 15 |
{{ :products:lidar-tf02:lidar-tf02-example-raspberry-pi-troyka-hat-hard-mini-uart.png?nolink |}}
=== Программная настройка ===
- [[articles:rpi-guide|Заведите Raspberry Pi]]
- Включите 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
# Подключаем необходимые библиотеки
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)
===== Элементы платы =====
{{ :products:lidar-tf02:lidar-tf02-annotation.png?nolink |}}
==== Передатчик и приёмник ====
На модуле расположен LED передатчик и светочувствительный приёмник.
* Передатчик (Transmiter) передаёт инфракрасное излучения в окружающее пространство.
* Приёмник (Receive) соответственно принимает отраженные волны от предметов окружающего мира.
Получив время, за которое вернулась отражённая волна, электронная схема дальномера определяет расстояние до объекта в поле зрения датчика.
==== Контакты подключения ====
Датчик подключается к управляющей электронике через выходной кабель с четырьмя проводниками:
^ Цвет провода ^ Назначение ^ Подключение ^ Примечание ^
| Красный | VCC | Питание | Входное напряжения строго 5 вольт. |
| Чёрный | GND | Земля |
| Зелёный | TX / CAN H | RX / CAN H | Напряжения логики равно 3,3 вольт (толлерантно к 5 В) |
| Белый | RX / CAN L | TX / CAN L | Напряжения логики равно 3,3 вольт (толлерантно к 5 В) |
===== Габаритный чертёж =====
[[this>_media/products:lidar-tf02:lidar-tf02-dimensions.pdf|{{:products:lidar-tf02:lidar-tf02-dimensions.png}}]]
===== Характеристики =====
* Модель: Benewake LiDAR TF02
* Источник света: LED
* Длина волны: 850 нм
* Диапазон измерений: 0,4–22 м
* Разрешающая способность: 1 см
* Эффективный угол наблюдения: 3°
* Макс. освещённость: 100000 люкс
* Частота сигнала: 100 Гц
* Интерфейсы: UART / CAN
* Напряжение питания: 5 В
* Напряжение логически уровней: 3,3 В (толерантность к 5 В)
* Средний ток потребления: до 400 мА
* Пиковый ток потребления: до 1 А
* Степень защиты: IP65
===== Ресурсы =====
* [[amp>product/lidar-tfmini-plus?utm_source=man&utm_campaign=lidar-tf02&utm_medium=wiki|Дальномер LiDAR TF02 ]] в магазине
* [[amp>page/lidar-sensors-guide?utm_source=man&utm_campaign=lidar-tf02&utm_medium=wiki|Что такое лидар?]]
* [[https://github.com/amperka/hardware-drawings/blob/master/lidar-tf02.svg|Векторное изображение LiDAR TF02]]
* {{ :products:lidar-tf02:tflidar.zip |Библиотека для Arduino}}
* {{ :products:lidar-tf02:lidar-tf02-datasheet.pdf |Datasheet на дальномер Benewake TF02}}
* {{ :products:lidar-tf02:lidar-tf02-product-manual.pdf |Product Manual на дальномер Benewake TF02}}