====== Дальномер Benewake LiDAR TF02 Pro: инструкция, подключение и примеры использования ====== Используйте [[amp>product/lidar-tf02-pro?utm_source=man&utm_campaign=lidar&utm_medium=wiki|Benewake LiDAR TF02 Pro]] для определения расстояния до объекта. Дальномер видит пространство от 0,4 до 40 метров вперёд, что позволяет его использовать в системах охраны периметра, управлении трафиком и умных парковках. {{ :products:lidar-tf02-pro:lidar-tf02-pro.5.jpg?nolink |}} [[amp>page/lidar-sensors-guide?utm_source=man&utm_campaign=lidar-tf02-pro&utm_medium=wiki|Подробнее про лидары Benewake]] ===== Пример работы для Arduino ===== В качестве мозга для считывания показаний с датчика рассмотрим платформы из семейства [[amp>collection/arduino?utm_source=man&utm_campaign=lidar-tf02-pro&utm_medium=wiki|Arduino]]. [[amp>page/arduino-ide?utm_source=man&utm_campaign=lidar-tf02-pro&utm_medium=wiki|Как начать работу с Arduino?]] На аппаратном уровне дальномер общается с управляющей электроникой по шине UART или I²C. Для коммуникации используйте библиотеку {{ :products:lidar-tf02-pro: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-pro&utm_medium=wiki|Arduino Uno]]. ^ Дальномер (Цвет провода) ^ Arduino Uno ^ | Питание (красный) | 5V | | Земля (чёрный) | GND | | TX (зелёный) | 10 | | RX (белый) | 11 | Для коммуникации используйте разъём на выходном проводе от сенсора совместно с [[amp>product/wire-fm?utm_source=man&utm_campaign=lidar-tf02-pro&utm_medium=wiki|соединительными проводами «мама-папа»]].{{ :products:lidar-tf02-pro:lidar-tf02-pro-example-arduino-soft.png?nolink |}} Для быстрой сборки и отладки устройства рекомендуем взять плату расширения [[amp>product/arduino-troyka-shield?utm_source=man&utm_campaign=lidar-tf02-pro&utm_medium=wiki|Troyka Shield]], которая одевается сверху на Arduino Uno методом бутерброда.{{ :products:lidar-tf02-pro:lidar-tf02-pro-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-pro&utm_medium=wiki|Arduino Leonardo]]. ^ Дальномер (Цвет провода) ^ Arduino Leonardo ^ | Питание (красный) | 5V | | Земля (чёрный) | GND | | TX (зелёный) | 0 | | RX (белый) | 1 | Для коммуникации используйте разъём на выходном проводе от сенсора совместно с [[amp>product/wire-fm?utm_source=man&utm_campaign=lidar-tf02-pro&utm_medium=wiki|соединительными проводами «мама-папа»]].{{ :products:lidar-tf02-pro:lidar-tf02-pro-example-arduino-hard.png?nolink |}} Для быстрой сборки и отладки устройства рекомендуем взять плату расширения [[amp>product/arduino-troyka-shield?utm_source=man&utm_campaign=lidar-tf02-pro&utm_medium=wiki|Troyka Shield]], которая одевается сверху на Arduino Uno методом бутерброда.{{ :products:lidar-tf02-pro:lidar-tf02-pro-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-pro&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-pro:lidar-tf02-pro-example-arduino-hardmega.png?nolink |}} Для быстрой сборки и отладки устройства рекомендуем взять плату расширения [[amp>product/arduino-troyka-shield?utm_source=man&utm_campaign=lidar-tf02-pro&utm_medium=wiki|Troyka Shield]], которая одевается сверху на Arduino Uno методом бутерброда.{{ :products:lidar-tf02-pro:lidar-tf02-pro-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-pro&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-pro&utm_medium=wiki|Raspberry Pi 4]]. Для быстрой сборки и отладки устройства возьмите плату расширения [[amp>product/raspberry-pi-troyka-hat?utm_source=man&utm_campaign=lidar-tf02-pro&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-pro:lidar-tf02-pro-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-pro&utm_medium=wiki|Raspberry Pi 4]]. Для быстрой сборки и отладки устройства возьмите плату расширения [[amp>product/raspberry-pi-troyka-hat?utm_source=man&utm_campaign=lidar-tf02-pro&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-pro:lidar-tf02-pro-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-pro:lidar-tf02-pro-annotation.png?nolink |}} ==== Передатчик и приёмник ==== На модуле расположен лазерный передатчик и светочувствительный приёмник. * Передатчик (Transmiter) передаёт инфракрасное излучения в окружающее пространство. * Приёмник (Receive) соответственно принимает отраженные волны от предметов окружающего мира. Получив время, за которое вернулась отражённая волна, электронная схема дальномера определяет расстояние до объекта в поле зрения датчика. ==== Контакты подключения ==== Датчик подключается к управляющей электронике через выходной кабель с четырьмя проводниками: ^ Цвет провода ^ Назначение ^ Подключение ^ Примечание ^ | Красный | VCC | Питание | Диапазон входного напряжения от 5 до 12 вольт. | | Чёрный | GND | Земля | | Зелёный | TX / SCL | Пин RX / SCL | Напряжения логики равно 3,3 вольт (толлерантно к 5 В) | | Белый | RX / SDA | Пин TX / SDA | Напряжения логики равно 3,3 вольт (толлерантно к 5 В) | ===== Габаритный чертёж ===== [[this>_media/products:lidar-tf02-pro:lidar-tf02-pro-dimensions.pdf|{{:products:lidar-tf02-pro:lidar-tf02-pro-dimensions.png}}]] ===== Характеристики ===== * Модель: 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 г ===== Ресурсы ===== * [[amp>product/lidar-tf02-pro?utm_source=man&utm_campaign=lidar-tf02-pro&utm_medium=wiki|Дальномер LiDAR TF02 Pro]] в магазине * [[amp>page/lidar-sensors-guide?utm_source=man&utm_campaign=lidar-tf02-pro&utm_medium=wiki|Что такое лидар?]] * [[https://github.com/amperka/hardware-drawings/blob/master/lidar-tf02-pro.svg|Векторное изображение LiDAR TF02 Pro]] * {{ :products:lidar-tf02-pro:tflidar.zip |Библиотека для Arduino}} * {{ :products:lidar-tf02-pro:lidar-tf02-pro-datasheet.pdf |Datasheet на дальномер Benewake TF02 Pro}} * {{ :products:lidar-tf02-pro:lidar-tf02-pro-product-manual.pdf |Product Manual на дальномер Benewake TF02 Pro}}