Human Presence Radar Module Kit LD2410
Подключение и настройка датчика присутствия людей LD2410C
Статья создана членом сообщества и может не совпадать с позицией компании Wiren Board. Используйте приведённые инструкции на свой страх и риск.
Автор статьи: Paul Strong
Здесь будет рассмотрен весь процесс подключения, настройки и интеграции с Wiren Board / Home Assistant китайского датчика HLK-LD2410C от компании Hi-link, работающего по принципу радара.
Что это за датчик
Цитирую из блока aliexpress:
HLK-LD2410 – радарный датчик присутствия человека с возможностью измерения расстояния и детектирования как движущихся, так и неподвижных объектов.
HLK-LD2410 работает по принципу FMCW радара и способен обнаруживать движущиеся и неподвижные объекты. HLK-LD2410 способен рассчитывать расстояние до объекта, максимальное заявленное расстояние обнаружения составляет 5 метров. Он имеет интерфейс UART для конфигурации и вывод GPIO, состояние которого меняется при обнаружении цели в соответствии с настройками чувствительности. Логический уровень UART и GPIO 3.3 в.
Угол обнаружения объекта по горизонтали и вертикали составляет 120 градусов. Размер модуля всего 35*7 мм. Интерфейс UART и пин GPIO выведен на 5 контактную колодку с шагом 1,27 мм, разъемы с таким шагом распространены не широко, поэтому для отладки имеет смысл сразу заказать интерфейсную плату. Она содержит USB-Uart конвертер CH340 и стабилизатор напряжения AMS1117. Для подключения к компьютеру предусмотрен разъем micro-usb. Интерфейсная плата универсальна и подходит для разных радарных модулей, выпускаемых Hi-Link.
Материалы для изучения
В процессе изучения темы я подглядывал в "чужие" посты, должен сослаться на них.
- https://mysku.club/blog/aliexpress/94494.html
- https://mysku.club/blog/aliexpress/98704.html
- http://psenyukov.ru/%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA-%D0%B4%D0%B2%D0%B8%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B8-%D0%BF%D1%80%D0%B8%D1%81%D1%83%D1%82%D1%81%D1%82%D0%B2%D0%B8%D1%8F-hi-link-ld2410b/
Подключение к PC
- Подключаем TX датчика к RX конвертера
- Подключаем RX датчика к TX конвертера
- Подключаем GND и VCC соответственно
Далее нам нужна софтина LD2410 Tool на английском языке (к сожалению, есть версия только для Windows), качнуть можно тут - https://drive.google.com/drive/folders/1p4dhbEJA3YubyIjIIC7wwVsSo8x29Fq-
После подключения в диспетчере устройств должен появиться новый COM-порт.
Теперь открываем софтину, выбираем нужный COM-порт и жмём "Connect", если ошибок не вылезло - значит Serial-подключение установлено успешно.
Если подключение установить не удалось - нужно разбираться с COM-портом, возможно поможет рестарт софтины, или возможно вы уже открыли этот COM-порт в другой софтине, ошибка подключения будет выглядеть примерно так:
Теперь нам нужно отрегулировать расстояние, в пределах которого будет работать датчик. По умолчанию датчик работает диапазонами по 0.75м, всего есть 8 диапазонов:
№ | нижняя граница, м | верхняя граница, м |
---|---|---|
1 | 0 | 0.75 |
2 | 0.75 | 1.5 |
3 | 1.5 | 2.25 |
4 | 2.25 | 3 |
5 | 3 | 3.75 |
6 | 3.75 | 4.5 |
7 | 4.5 | 5.25 |
8 | 5.25 | 6 |
Мы можем настраивать расстояние между 2 и 8 включительно, то есть отключить сканирование расстояния меньше 1.5m невозможно чисто технически, оно всегда сканируется.
Например, если мы хотим "мониторить" расстояние не более 3м, тогда записываем значения:
настройка | значение |
---|---|
Moving Max. RG | 4 |
Motionless Max. RG | 4 |
Теперь можем жать кнопку Start и сможем наблюдать за изменениями на графиках - по ним можно понять как датчик реагирует на ваше присутствие:
если круг зеленого цвета - значит датчик вас не видит
если пурпурный - значит датчик видит ваше присутствие
если красный - значит датчик видит ваше движение
- в верхней части есть также расстояние до вас, вы можете постепенно удаляться от датчика и в какой-то момент отсчёт расстояния прекратится, спустя несколько секунд круг станет зеленым, т.к. датчик больше вас не видит (ранее мы настроили датчик на максимальное расстояние 3м)
У датчика есть также тонкие настройки чувствительности во всех 8ми зонах, но я не вникал в это очень глубоко, настроек по умолчанию мне хватило чтобы решить свою задачу.
Пользователям Linux
Есть вот такая хорошая страничка - https://ld2410.albert.nz/ - вместо софта можно пользоваться этим сайтом для настройки датчика.
Подключение к ESP32
Далее будет рассмотрен процесс прошивки контроллера ESP32, для этих целей у меня всегда есть полноценная dev-плата ESP32 WROOM32 Devkit 38P.
Подключаем пины датчика к esp32 (да, я использовать не стандартные RX/TX пины, мне так надо было, вы можете использовать другие пины по своему усмотрению):
- 5V контроллера к VCC датчика
- GND
- GPIO27 - RX датчика
- GPIO26 - TX датчика
Далее подразумевается, что у вас уже есть система Home Assistant с подключенным ESPHOME.
Создаём новое устройство с базовым конфигом (адрес 192.168.0.100 указан с учетом IP-адреса, закрепленного на роутере за MAC-адресом WiFi интерфейса платы с ESP32):
esphome:
name: esp-garderob
friendly_name: esp-garderob
esp32:
board: esp32dev
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "ylD7gSnCct8R2g+Ff2nlYZJCOesBngFNln0ulJGOnwM="
ota:
password: "2d292b8425334046760b741090ee1c3f"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
use_address: 192.168.0.100
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Esp-Garderob Fallback Hotspot"
password: "FKaeqKHsRMdF"
captive_portal:
Далее открываем и изучаем документацию https://esphome.io/components/sensor/ld2410.html
Я перепробовал там все вариации конфигов, лично у меня так и не взлетело редактирование настроек из Home Assistant, а точней, там даже текущие значения не считываются после рестарта esp32, в итоге я выкинул всё лишнее - оставил только бинарный сенсор присутствия:
uart:
tx_pin: 27
rx_pin: 26
baud_rate: 256000
parity: NONE
stop_bits: 1
ld2410:
throttle: 300ms
binary_sensor:
- platform: ld2410
has_target:
name: Presence
что здесь можно увидеть:
- мы указали настройки UART, соответствующие тем пинам, на которые мы подключили наш датчик
- создаём платформу ld2410 и указываем таймаут для цикла, который опрашивает датчик
- на базе платформы ld2410 создаём бинарный сенсор с датчиком присутствия
после заливки прошивки появится новое устройство с соответствующим сенсором, его можно найти тут "Настройки > Устройства и службы > Устройства"
Интеграция с Wiren Board
Для трансляции значений в контроллер Wiren Board нам понадобится виртуальное устройство, чтобы мы могли в его топики передавать значения через MQTT.
Создаём виртуальное устройство
defineVirtualDevice('virtual-garderob', {
title: 'virtual-garderob' ,
cells: {
presence_sensor: {
title: "датчик присутствия",
type: "alarm",
value: false,
},
}
})
Получаем имя топика
В веб-интерфейсе Wiren Board в разделе "Настройки -> MQTT топики" ищем наше виртуальное устройство и копируем значение топика (например, /devices/virtual-garderob/controls/presence_sensor)
Добавляем в конфиг esphome
ранее мы описывали бинарный сенсор - его нужно дополнить полем id (это нужно чтобы в lambda-функции можно было получение значение сенсора):
binary_sensor:
- platform: ld2410
has_target:
name: Presence
id: esp_garderob_presence
on_state:
then:
- mqtt.publish:
topic: /devices/virtual-garderob/controls/presence_sensor
payload: !lambda |-
return id(esp_garderob_presence).state ? "1" : "0";
mqtt:
broker: 10.50.0.253
что мы сделали:
- добавили id к сенсору
- описали mqtt-брокера
- создали триггер on_state, срабатывающий при изменении значения сенсора, используем функцию mqtt.publish для отправки данных в Wiren Board
Теперь можно пойти в раздел устройств в интерфейсе Wiren Board и увидеть такое:
Когда датчик сработает, то будет выглядеть так:
Таким образом, можно использовать wb-rules для автоматизации, или какой-то другой софт.
Автоматизация освещения
Совсем коротко про автоматизацию (как это сделал я):
- всё освещение у меня уже прокинуто в Home Assistant при помощи wb-engine (https://github.com/4mr/wb-engine)
- установлен node red с модулем node-red-contrib-home-assistant-websocket и node-red-contrib-wirenboard
Добавляем компонент (отлавливает изменение состояния выбранного объекта)
если вы используете компонент первый раз - нужно добавить сервер home assistant (если NR крутится внутри HA, тогда, по идее, это можно пропустить)
указываем объект сенсора
[[1]]
если вы используете компонент первый раз - нужно добавить сервер wiren board
указываем "светильник"
соединяем компоненты:
Далее жмём "Deploy". Теперь при обнаружении присутствия человека в гардеробе будет зажигаться соответствующая группа освещения.
Автономное подключение
У датчика есть OUT-пин, на котором появляется напряжение 3V в случае обнаружения объекта, таким образом, можно приколхозить какое-то реле и управлять освещением автономно, без контроллера УД, мне это было не нужно - поэтому особо не изучал, но эта задача кажется сильно проще чем подключение к HA/WB.
Например, может подойти один из модулей реле (тут надо смотреть, что в действительности выдаёт датчик на пине OUT):
Печать корпуса
В конечном счёте я решил свою задачу - как датчик работает мне очень нравится, всё точно, никаких ложных срабатываний по сравнению с PIR датчиком, поэтому я решил финализировать решение, заказал себе ESP32C3 (на свой страх и риск, т.к. разработчики ESPHOME не гарантируют корректную работу на C3, но вроде пишут что всё норм встаёт) и нашёл на просторах сети пару халявных схем для 3D-принтера, отдал другу, и вот какой результат получился:
ссылки на схемы: