Подключение LiDAR-датчика TFMini-S к Arduino
Беспилотный автомобиль — это величайший подарок технологий цивилизации со времён появления Интернета. Лишь вопрос времени, когда эти автомобили заполнят дороги.
Чтобы беспилотный автомобиль мог успешно ориентироваться на дороге, он должен знать о физических объектах вокруг себя. Этому помогает вращающийся LiDAR-датчик, установленный на крыше, который создаёт трёхмерное представление дороги вокруг автомобиля.
LiDAR — не новинка, он существует уже давно; фактически, он был разработан вскоре после изобретения лазера. Первые работы по LiDAR были задокументированы в 1963 году. Высокая стоимость лазерного оборудования ограничивала использование LiDAR только государственными и военными ведомствами.
Однако недавнее снижение цен сделало LiDAR доступным для энтузиастов вроде нас, позволяя внедрять его в наши проекты. Одним из широко используемых недорогих, но точных LiDAR-датчиков является TFMini-S.
Это руководство покажет вам, как подключить модуль TFMini-S к Arduino для выполнения высокоточных измерений расстояния, но сначала — краткое введение в LiDAR.
Что такое LiDAR и как он работает?
LiDAR — это комбинация слов «Light» (свет) и «RADAR» или, если хотите, обратная аббревиатура от «Light Detection And Ranging» (обнаружение и определение дальности с помощью света). LiDAR похож на RADAR, только использует свет вместо радиоволн.
По сути, LiDAR работает путём направления лазерного луча на объект. Лазер отражается от объекта и возвращается к датчику. Измеряя время, необходимое для возвращения света к датчику, можно оценить расстояние до объекта. Измеренное расстояние может варьироваться в зависимости от окружающей среды и отражательной способности объекта.
Путём сканирования или вращения LiDAR-датчика можно быстро построить 3D-карту местности. Обычно она представляется в виде «облака точек» для лучшего понимания того, что обнаруживает LiDAR.
Courtesy: Dana Peters – Arduino-based LiDAR Scanner – http://youtu.be/xkut3yRL61U
Обзор оборудования TFMini-S
TFMini-S — это высокоточный одноточечный ToF (Time of Flight) LiDAR-датчик от компании Benewake (Beijing) Co. Ltd. Он идеально подходит для интеграции высокоточного лазерного измерения расстояний в любой робототехнический или интерактивный проект.
Размером с USB-накопитель, TFMini-S позволяет интегрировать LiDAR в проекты, которые ранее были доступны только для более мелких датчиков, таких как инфракрасные дальномеры серии SHARP GP.
TFMini-S может измерять расстояние до объекта от 10 сантиметров до 12 метров.
Помимо низкой стоимости, компактных размеров и большой дальности, TFMini-S обладает высокой точностью измерения расстояния — ±6см до 6м и ±1% далее.
Следует отметить, что этот датчик не использует лазерный свет для измерения расстояний. Вместо этого он использует сфокусированный инфракрасный светодиод с длиной волны 850нм и оптику. Именно поэтому устройство относительно недорогое.
Эффективная дальность обнаружения
Как и у всех LiDAR-датчиков, эффективная дальность обнаружения зависит от условий освещения, погоды и отражательной способности целевого объекта.
На графике ниже показан рабочий диапазон TFMini-S в различных условиях.
0-10см — слепая зона TFMini-S; в этом диапазоне данные ненадёжны.
В экстремальных условиях рабочий диапазон TFMini-S составляет 0.1-3м. Экстремальные условия — это уличные блики (с интенсивностью освещения около 100клк на улице в полдень летом) и обнаружение чёрного объекта (с отражательной способностью 10%).
В обычных условиях солнечного освещения (с интенсивностью около 70клк) рабочий диапазон TFMini-S составляет 0.1-7м.
В помещении или при слабом окружающем освещении рабочий диапазон TFMini-S составляет 0.1-12м.
Интерфейсы связи
TFMini-S по умолчанию обменивается данными через интерфейс UART, с обычными выводами UART RX и TX, работающими на скорости 115200бит/с.
Вы также можете настроить датчик для обмена данными через I2C, отправив соответствующие команды.
Частота обнаружения
Согласно техническому описанию, TFMini-S может выполнять до 1000 измерений в секунду (по умолчанию — 100). Эту частоту можно изменить, отправив соответствующие команды.
Следует отметить, что увеличение частоты вывода снижает точность. Поэтому, в зависимости от того, насколько точные измерения вам нужны, следует регулировать частоту вывода.
Входное питание
Согласно техническому описанию, TFMini-S работает от 5В и потребляет около 140мА во время измерения. Максимальный потребляемый ток составляет около 200мА.
Однако при тестировании датчик потреблял около 70мА самостоятельно. Поэтому если вы используете Arduino 5В, преобразователь логических уровней и датчик, можно ожидать потребление около 100мА. Таким образом, для базовых тестов датчик можно питать от USB-порта (5В/500мА) без проблем.
Пожалуйста, имейте в виду, что TFMini-S не имеет защиты от перенапряжения, поэтому поддерживайте колебания напряжения питания в пределах 0.1В.
Логические уровни
Хотя TFMini-S может питаться от 5В, выводы ввода/вывода работают только на логическом уровне 3.3В. Поэтому при использовании датчика с 5В микроконтроллером рекомендуется использовать преобразователь логических уровней.
Однако, если вы хотите только считывать данные с TFMini-S (в режиме UART), преобразователь логических уровней не нужен, поскольку устройства на 3.3В выдают логические уровни, совместимые с устройствами на 5В.
Технические характеристики
Вот основные характеристики:
Дальность обнаружения |
10см – 12м |
|---|---|
Разрешение |
1см |
Точность измерения |
±6см до 6м и ±1% далее |
Входное напряжение |
5В |
Напряжение UART TTL |
3.3В |
Потребляемый ток |
140мА (тип.), 800мА (пик) |
Частота обнаружения |
от 1 до 1000 сканирований в секунду (настраивается) |
Длина волны излучения |
850нм |
Угол обзора |
2.3° |
Интерфейсы связи |
UART и I2C |
Скорость передачи данных |
115200 |
Для получения дополнительной информации о LiDAR-датчике TFMini-S обратитесь к техническому описанию ниже.
Распиновка TFMini-S
Теперь давайте рассмотрим распиновку. TFMini-S имеет четыре вывода.
GND — вывод заземления.
VCC — вывод питания. Подключайте его только к источнику питания 5В.
RXD/SDA — вывод, который можно использовать для отправки данных на датчик (при обмене через UART) или для отправки/получения данных (при обмене через I2C). Работает на логическом уровне 3.3В.
TXD/SCL — вывод, который либо передаёт данные от датчика к микроконтроллеру (при обмене через UART), либо функционирует как тактовый сигнал (при обмене через I2C). Обратите внимание, что он также работает на логическом уровне 3.3В.
Подключение датчика TFMini-S к Arduino
Подключить датчик TFMini-S к Arduino очень просто. Нужно подключить всего четыре провода.
Начните с подключения красного провода (VCC) датчика TFMini-S к выходу 5V Arduino, а чёрного провода (GND) — к выводу GND Arduino.
Теперь подключите белый провод (RXD/SDA) датчика TFMini-S к цифровому пину 3 Arduino, а зелёный провод (TXD/SCL) — к цифровому пину 2 Arduino, поскольку мы будем использовать программный UART.
Изображение ниже показывает, как собрать схему.
Пример кода для Arduino
Теперь, когда всё подключено, давайте запустим простой скетч для демонстрации возможностей датчика TFMini-S.
#include <SoftwareSerial.h> //header file of software serial port
SoftwareSerial Serial1(2, 3); //define software serial port name as Serial1 and define pin2 as RX & pin3 as TX
int dist; //actual distance measurements of LiDAR
int strength; //signal strength of LiDAR
int check; //save check value
int i;
int uart[9]; //save data measured by LiDAR
const int HEADER = 0x59; //frame header of data package
void setup()
{
Serial.begin(9600); //set bit rate of serial port connecting Arduino with computer
Serial1.begin(115200); //set bit rate of serial port connecting LiDAR with Arduino
}
void loop() {
if (Serial1.available()) //check if serial port has data input
{
if (Serial1.read() == HEADER) //assess data package frame header 0x59
{
uart[0] = HEADER;
if (Serial1.read() == HEADER) //assess data package frame header 0x59
{
uart[1] = HEADER;
for (i = 2; i < 9; i++) //save data in array
{
uart[i] = Serial1.read();
}
check = uart[0] + uart[1] + uart[2] + uart[3] + uart[4] + uart[5] + uart[6] + uart[7];
if (uart[8] == (check & 0xff)) //verify the received data as per protocol
{
dist = uart[2] + uart[3] * 256; //calculate distance value
strength = uart[4] + uart[5] * 256; //calculate signal strength value
Serial.print("distance = ");
Serial.print(dist); //output measure distance value of LiDAR
Serial.print('\t');
Serial.print("strength = ");
Serial.print(strength); //output signal strength value
Serial.print('\n');
}
}
}
}
}
После загрузки скетча откройте монитор последовательного порта, установив скорость передачи 9600 бит/с.
Попробуйте направить датчик на различные объекты вокруг вас. Вы должны увидеть, как начнут отображаться измеренные расстояния.
Если информация не отображается, убедитесь, что TFMini-S правильно подключён; при включении красный свет должен быть виден внутри передающей линзы, если смотреть спереди.
Программное обеспечение TFMini
Программное обеспечение TFMini — это мощный инструмент для тестирования датчиков TFMini. Это бесплатная программа, но она работает только на платформе Windows.
Вы можете скачать эту программу с `официального сайта Benewake `_.
Подключение TFMini к программе
Для использования программного обеспечения TFMini подключите TFMini-S к ПК с помощью USB-TTL конвертера. Просто убедитесь, что вы подаёте 5В на VCC.
Использование программного обеспечения TFMini
Сама программа поставляется в виде портативного RAR-архива. Скачайте его и распакуйте в папку по вашему выбору. Запустите WINCC_TF.exe.
Программа запустится, как показано ниже.
Найдите раздел настроек и выберите TFMiniS в качестве типа продукта. Далее выберите COM-порт, к которому подключён TFMini-S. Наконец, нажмите кнопку Connect (Подключить).
После подключения устройства программа начнёт отображать осциллограмму расстояния по времени в разделе «Time Line Chart». Ниже в разделе «Real Time Data» отображаются текущее расстояние (Dist), количество эффективных точек данных в секунду (Effective Points) и уровень сигнала (Strength).