Используйте Benewake LiDAR TFmini-S для определения расстояния до объекта. Дальномер видит пространство от 0,1 до 12 метров вперёд, что позволяет его использовать в системах охраны периметра, управлении трафиком и умных парковках.
В качестве мозга для считывания показаний с датчика рассмотрим платформы из семейства Arduino.
На аппаратном уровне дальномер общается с управляющей электроникой по шине UART или I²C. Для коммуникации используйте библиотеку TFLidar, которая скрывает в себе все тонкости общения с модулем и облегчит написания кода программ.
В приведённых примерах будем использовать шину UART. Но в зависимости от конкретной модели Arduino, рассмотрим три случая коммуникации:
Подробнее про Serial в Arduino
SoftwareSerial — это программный UART, который позволяет имитировать Serial на других контактах платы. Это удобно когда на плате нет свободных аппаратных UART.
В качестве примера подключите дальномер к платформе Arduino Uno.
Дальномер (Цвет провода) | Arduino Uno |
---|---|
Питание (красный) | 5V |
Земля (чёрный) | GND |
TX (зелёный) | 10 |
RX (белый) | 11 |
Для коммуникации используйте разъём на выходном проводе от сенсора совместно с соединительными проводами «папа-папа».
Для быстрой сборки и отладки устройства рекомендуем взять плату расширения Troyka Shield, которая одевается сверху на Arduino Uno методом бутерброда.
В качестве примера выведем в Serial-порт расстояние до объекта.
// Библиотека для работы с дальномерами #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 — это аппаратный UART, который предназначен для общения с модулями по одноименному интерфейсу.
В качестве примера подключите дальномер к платформе Arduino Leonardo.
Дальномер (Цвет провода) | Arduino Leonardo |
---|---|
Питание (красный) | 5V |
Земля (чёрный) | GND |
TX (зелёный) | 0 |
RX (белый) | 1 |
Для коммуникации используйте разъём на выходном проводе от сенсора совместно с соединительными проводами «папа-папа».
Для быстрой сборки и отладки устройства рекомендуем взять плату расширения Troyka Shield, которая одевается сверху на Arduino Uno методом бутерброда.
В качестве примера выведем в 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 — это всё тот же аппаратный UART, который предназначен для общения с модулями по одноименному интерфейсу. Разница лишь в том, что у платформ формата Mega их несколько и они выведены на отдельные пины.
В качестве примера подключите дальномер к платформе Arduino Leonardo.
Дальномер (Цвет провода) | Arduino Mega 2560 |
---|---|
Питание (красный) | 5V |
Земля (чёрный) | GND |
TX (зелёный) | 17 |
RX (белый) | 16 |
Для коммуникации используйте разъём на выходном проводе от сенсора совместно с соединительными проводами «папа-папа».
Для быстрой сборки и отладки устройства рекомендуем взять плату расширения Troyka Shield, которая одевается сверху на Arduino Uno методом бутерброда.
В качестве примера выведем в 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.
На низком уровне дальномер общается с управляющей электроникой по шине UART или I²C. В приведённых примерах будем использовать шину UART. Рассмотрим два случая коммуникации:
Подробнее про UART в Raspberry Pi
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 |
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 — это аппаратный 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 |
sudo nano /boot/config.txt
enable_uart=1
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)
На модуле расположен лазерный передатчик и светочувствительный приёмник.
Получив время, за которое вернулась отражённая волна, электронная схема дальномера определяет расстояние до объекта в поле зрения датчика.
Датчик подключается к управляющей электронике через выходной кабель с четырьмя проводниками:
Цвет провода | Назначение | Подключение | Примечание |
---|---|---|---|
Красный | VCC | Питание | Входное напряжения строго 5 вольт |
Чёрный | GND | Земля | |
Зелёный | TX / SCL | Пин RX / SCL | Напряжения логики равно 3,3 вольт (толлерантно к 5 В) |
Белый | RX / SDA | TX / SDA | Напряжения логики равно 3,3 вольт (толлерантно к 5 В) |