139
правок
м |
|||
(не показано 36 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE:Подключение и настройка датчика присутствия людей LD2410C}} | |||
= Материалы для изучения = | == Описание == | ||
{{Wbincludes:Community}} | |||
Автор статьи: [https://t.me/Paulstrong Paul Strong] | |||
Здесь будет рассмотрен весь процесс подключения, настройки и интеграции с Wiren Board / Home Assistant китайского датчика HLK-LD2410C от компании Hi-link, работающего по принципу радара. | |||
== Что это за датчик == | |||
Цитирую из [https://mysku.club/blog/aliexpress/ блока aliexpress]: | |||
<blockquote> | |||
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. | |||
</blockquote> | |||
== Материалы для изучения == | |||
В процессе изучения темы я подглядывал в "чужие" посты, должен сослаться на них. | В процессе изучения темы я подглядывал в "чужие" посты, должен сослаться на них. | ||
* https://mysku.club/blog/aliexpress/94494.html | * https://mysku.club/blog/aliexpress/94494.html | ||
Строка 8: | Строка 25: | ||
* 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/ | * 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 = | == Подключение к PC == | ||
<gallery mode="traditional" widths ="260px" heights="200px"> | |||
на датчике есть пять пинов | Image: 619gfyV8V0L. AC UF894,1000 QL80 .jpg| Для подключения к PC нам понадобится '''конвертер USB-to-TTL''' | ||
Image: Screenshot from 2024-01-29 11-51-24.png| на датчике есть пять пинов | |||
</gallery> | |||
# Подключаем TX датчика к RX конвертера | # Подключаем TX датчика к RX конвертера | ||
Строка 24: | Строка 36: | ||
# Подключаем GND и VCC соответственно | # Подключаем GND и VCC соответственно | ||
=== Windows === | |||
Нам нужна софтина '''LD2410 Tool''' на английском языке (к сожалению, есть версия '''только для Windows'''), '''качнуть можно тут - https://drive.google.com/drive/folders/1p4dhbEJA3YubyIjIIC7wwVsSo8x29Fq-''' | |||
После подключения в диспетчере устройств должен появиться '''новый COM-порт'''. | |||
Теперь открываем софтину, выбираем нужный COM-порт и жмём "Connect", '''если ошибок не вылезло''' - значит Serial-подключение установлено успешно. | |||
Если подключение установить не удалось - '''нужно разбираться с COM-портом''', возможно поможет рестарт софтины, или возможно вы уже открыли этот COM-порт в другой софтине, ошибка подключения будет выглядеть примерно так: | |||
[[Image:8c5607a51462e4b110f6527fb88de774b963a13d.png|600px]] | |||
[[ | |||
Теперь нам нужно отрегулировать расстояние, в пределах которого будет работать датчик. По умолчанию датчик работает диапазонами по 0.75м, всего есть 8 диапазонов: | Теперь нам нужно отрегулировать расстояние, в пределах которого будет работать датчик. По умолчанию датчик работает диапазонами по '''0.75м''', всего есть '''8 диапазонов''': | ||
{| border="1" class="wikitable" | |||
! № || нижняя граница, м || верхняя граница, м | |||
|- | |||
| '''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 включительно, то есть отключить сканирование расстояния меньше | Мы можем настраивать расстояние между 2 и 8 включительно, то есть отключить сканирование расстояния меньше 1.5m невозможно чисто технически, оно всегда сканируется. | ||
Например, если мы хотим "мониторить" расстояние не более 3м, тогда записываем значения: | Например, если мы хотим "мониторить" расстояние не более 3м, тогда записываем значения: | ||
{| border="1" class="wikitable" | |||
! настройка || значение | |||
|- | |||
| '''Moving Max. RG''' || 4 | |||
|- | |||
| '''Motionless Max. RG''' || 4 | |||
|- | |||
|} | |||
Теперь можем жать кнопку Start и сможем наблюдать за изменениями на графиках - по ним можно понять как датчик реагирует на ваше присутствие: | Теперь можем жать кнопку Start и сможем наблюдать за изменениями на графиках - по ним можно понять как датчик реагирует на ваше присутствие: | ||
если круг '''зеленого''' цвета - значит датчик '''вас не видит''' | |||
[[Image:Снимок экрана 2024-01-29 184202.jpg|600px]] | |||
если '''пурпурный''' - значит датчик '''видит''' ваше '''присутствие''' | |||
[[Image:Снимок экрана 2024-01-29 184347.jpg|600px]] | |||
если '''красный''' - значит датчик '''видит''' ваше '''движение''' | |||
[[Image:Снимок экрана 2024-01-29 184518.jpg|600px]] | |||
* в верхней части есть также расстояние до вас, вы можете постепенно удаляться от датчика и в какой-то момент отсчёт расстояния прекратится, спустя несколько секунд круг станет зеленым, т.к. датчик больше вас не видит (ранее мы настроили датчик на максимальное расстояние 3м) | * в верхней части есть также расстояние до вас, вы можете постепенно удаляться от датчика и в какой-то момент отсчёт расстояния прекратится, спустя несколько секунд круг станет зеленым, т.к. датчик больше вас не видит (ранее мы настроили датчик на максимальное расстояние 3м) | ||
У датчика есть также тонкие настройки чувствительности во всех 8ми зонах, но я не вникал в это очень глубоко, настроек по умолчанию мне хватило чтобы решить свою задачу. | У датчика есть также тонкие настройки чувствительности во всех 8ми зонах, но я не вникал в это очень глубоко, настроек по умолчанию мне хватило чтобы решить свою задачу. | ||
= | === Linux === | ||
Для | Есть вот такая хорошая страничка - https://ld2410.albert.nz/ - вместо софта можно пользоваться этим сайтом для настройки датчика. | ||
[[Файл:Screenshot from 2024-01-29 11-41-12.png]] | |||
== Настройка через bluetooth == | |||
Вобще-то я рассчитывал получить модуль с синим зубом, но не то заказал. Есть хочется без ноута на месте через мобилу расстояние поднастроить, то надо брать такое: | |||
[[Image:Снимок экрана 2024-01-29 210801.jpg|300px]] | |||
Далее нужно использовать мобильное приложение '''HLKRadarTool''' для подключения к датчику. | |||
== Подключение к 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): | |||
<syntaxhighlight lang="yaml"> | |||
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: | |||
</syntaxhighlight> | |||
Далее открываем и изучаем документацию https://esphome.io/components/sensor/ld2410.html | |||
Я перепробовал там все вариации конфигов, лично у меня так и не взлетело редактирование настроек из Home Assistant, а точней, там даже текущие значения не считываются после рестарта esp32, в итоге я выкинул всё лишнее - оставил только бинарный сенсор присутствия: | |||
<syntaxhighlight lang="yaml"> | |||
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 | |||
</syntaxhighlight> | |||
что здесь можно увидеть: | |||
# мы указали настройки UART, соответствующие тем пинам, на которые мы подключили наш датчик | |||
# создаём платформу ld2410 и указываем таймаут для цикла, который опрашивает датчик | |||
# на базе платформы ld2410 создаём бинарный сенсор с датчиком присутствия | |||
после заливки прошивки появится новое устройство с соответствующим сенсором, его можно найти тут "Настройки > Устройства и службы > Устройства" | |||
[[Image:Снимок экрана 2024-01-29 210041.jpg]] | |||
== Интеграция с Wiren Board == | |||
Для трансляции значений в контроллер Wiren Board нам понадобится виртуальное устройство, чтобы мы могли в его топики передавать значения через MQTT. | |||
== Создаём виртуальное устройство == | |||
<syntaxhighlight lang="javascript"> | |||
defineVirtualDevice('virtual-garderob', { | |||
title: 'virtual-garderob' , | |||
cells: { | |||
presence_sensor: { | |||
title: "датчик присутствия", | |||
type: "alarm", | |||
value: false, | |||
}, | |||
} | |||
}) | |||
</syntaxhighlight> | |||
=== Получаем имя топика === | |||
В веб-интерфейсе Wiren Board в разделе "Настройки -> MQTT топики" ищем наше виртуальное устройство и копируем значение топика (например, /devices/virtual-garderob/controls/presence_sensor) | |||
=== Добавляем в конфиг esphome === | |||
ранее мы описывали бинарный сенсор - его нужно дополнить полем id (это нужно чтобы в lambda-функции можно было получение значение сенсора): | |||
<syntaxhighlight lang="yaml"> | |||
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 | |||
</syntaxhighlight> | |||
что мы сделали: | |||
#добавили id к сенсору | |||
#описали mqtt-брокера | |||
#создали триггер on_state, срабатывающий при изменении значения сенсора, используем функцию mqtt.publish для отправки данных в Wiren Board | |||
Теперь можно пойти в раздел устройств в интерфейсе Wiren Board и увидеть такое: | |||
[[Файл:Screenshot from 2024-01-29 13-17-22.png]] | |||
Когда датчик сработает, то будет выглядеть так: | |||
[[Файл:Screenshot from 2024-01-29 13-17-47.png]] | |||
Таким образом, можно использовать wb-rules для автоматизации, или какой-то другой софт. | |||
== Автоматизация освещения == | |||
Совсем коротко про автоматизацию (как это сделал я): | |||
* всё освещение у меня уже прокинуто в Home Assistant при помощи wb-engine (https://github.com/4mr/wb-engine) | |||
* установлен node red с модулем node-red-contrib-home-assistant-websocket и node-red-contrib-wirenboard | |||
Добавляем компонент [[Image:Снимок экрана 2024-01-29 194609.jpg]] (отлавливает изменение состояния выбранного объекта) | |||
[[Файл:Screenshot from 2024-01-29 13-40-40.png]] | |||
если вы используете компонент первый раз - нужно добавить сервер home assistant (если NR крутится внутри HA, тогда, по идее, это можно пропустить) | |||
[[Файл:Screenshot from 2024-01-29 13-32-32.png]] | |||
указываем объект сенсора | |||
[[Файл:Screenshot from 2024-01-29 13-42-59.png]] | |||
добавляем второй компонент - [[Image:Снимок экрана 2024-01-29 194624.jpg]] | |||
[[Image:Screenshot_from_2024-01-29_13-40-02.png]] | |||
если вы используете компонент первый раз - нужно добавить сервер wiren board | |||
[[Image:Screenshot from 2024-01-29 13-38-30.png]] | |||
указываем "светильник" | |||
[[Image:Screenshot from 2024-01-29 13-44-41.png]] | |||
соединяем компоненты: | |||
[[Image:Screenshot from 2024-01-29 13-57-36.png]] | |||
Далее жмём "Deploy". Теперь при обнаружении присутствия человека в гардеробе будет зажигаться соответствующая группа освещения. | |||
== Автономное подключение == | |||
У датчика есть OUT-пин, на котором появляется напряжение 3V в случае обнаружения объекта, таким образом, можно приколхозить какое-то реле и управлять освещением автономно, без контроллера УД, мне это было не нужно - поэтому особо не изучал, но эта задача кажется сильно проще чем подключение к HA/WB. | |||
Например, может подойти один из модулей реле (тут надо смотреть, что в действительности выдаёт датчик на пине OUT): | |||
<gallery mode="traditional" widths ="260px" heights="200px"> | |||
Image: Screenshot from 2024-01-29 11-41-12.png | реле 3V | |||
Image: Odnokanalnoe-rele.jpg | реле 5V | |||
</gallery> | |||
== Подключение по RS-485 / Modbus RTU == | |||
Для этого понадобится модуль MAX485 | |||
[[Image:Max485.jpg]] | |||
Подключение делаем так: | |||
{| border="1" class="wikitable" | |||
! '''ld2410''' || '''esp32''' || '''описание''' | |||
|- | |||
| VCC || 3V || max485 питается от 3V | |||
|- | |||
| GND || GND || земля | |||
|- | |||
| DI || IO32 || передача по uart от esp32 в сторону max485 | |||
|- | |||
| RO || IO33 || передача по uart от max485 в сторону esp32 | |||
|- | |||
| DE/RE || IO25 || пин контроля направления приёма/передачи | |||
|- | |||
|} | |||
моя breadbort плата в момент разработки выглядела так: | |||
[[Image:Ld2410c-modbus-rtu МП.png|600px]] | |||
Прошивка в этом случае будет уже не от ESP32, будем делать свой скетч (весь код загружен сюда https://github.com/goosecrew/ld2410-modbus-slave.git) | |||
Использовал три разных Serial: | |||
* Serial - uart на microUSB (можно смотреть логи и посылать команды для просмотра показаний датчика в консоли, настраивать датчик, перезапускать, делать сброс и т.д.) | |||
* Serial1 - uart max485 | |||
* Serial2 - uart ld2410 | |||
Описание input-регистров (показания датчика): | |||
{| border="1" class="wikitable" | |||
! '''№ регистра''' || '''тип регистра''' || '''описание''' | |||
|- | |||
| 0 || input || метрика "присутствие" | |||
|- | |||
| 1 || input || метрика "неподвижность" | |||
|- | |||
| 2 || input || метрика "движение" | |||
|- | |||
| 3 || input || расстояние до неподвижного объекта | |||
|- | |||
| 4 || input || энергия неподвижного объекта | |||
|- | |||
| 5 || input || расстояние до движущегося объекта | |||
|- | |||
| 6 || input || энергия движущегося объекта | |||
|- | |||
|} | |||
Описание holding-регистров (чтение и изменение настроек): | |||
{| border="1" class="wikitable" | |||
! '''№ регистра''' || '''тип регистра''' || '''описание''' | |||
|- | |||
| 100 || holding || modbus serial slave id | |||
|- | |||
| 101 || holding || modbus serial stop bits | |||
|- | |||
| 102 || holding || modbus serial baudrate | |||
|- | |||
| 103 || holding || максимальное расстояние до движущегося объекта | |||
|- | |||
| 104 || holding || максимальное расстояние до неподвижного объекта | |||
|- | |||
| 105 || holding || idle time | |||
|- | |||
|} | |||
'''ВАЖНО! После изменения настроек modbus необходимо перезапустить esp32!''' | |||
== Шаблон для Wiren Board == | |||
Шаблон для контроллера Wiren Board лежит на гитхабе в папке wirenboard (https://github.com/goosecrew/ld2410-modbus-slave/blob/main/wirenboard/LD-2410.json). | |||
Вот что получилось на выходе: | |||
<gallery mode="traditional" widths ="260px" heights="200px"> | |||
Image: Снимок экрана 2024-02-01 003946.jpg| | |||
Image: Снимок экрана 2024-02-01 004047.jpg| | |||
</gallery> | |||
<gallery mode="traditional" widths ="260px" heights="200px"> | |||
Image: Снимок экрана 2024-02-01 003507.jpg| | |||
Image: Снимок экрана 2024-02-01 003637.jpg| | |||
</gallery> | |||
== Изменение параметров подключения к Modbus == | |||
Изменять параметры можно как с помощью веб-интерфейса Wiren Board (настройка Serial-устройств), так и с помощью modbus_client. | |||
'''Изменение адреса - регистр 100, значение по умолчанию 1''' - https://wirenboard.com/wiki/Wiren_Board_Device_Modbus_Address#Изменение_адреса_устройству_с_известным_адресом. | |||
'''Изменение количества стоповых бит - регистр 101, значение по умолчанию 2'''. | |||
'''Изменение скорости - регистр 102, значение по умолчанию 96''' (значение скорости делим на 100 перед записью, то есть 9600 посылать как 96, а 115200 посылать как 1152 и т.д). | |||
== Питание от 12/24V == | |||
С учётом того, что в Wiren Board обычно используется напряжение 12/24V, чтобы запитать ESP32 - нужно будет еще добавить модуль для понижения постоянного напряжения до 5V, здесь я это не рассматриваю, но нужно обязательно помнить: | |||
'''!!! ESP32 работает от 5V, датчик работает от 5V, MAX485 работает от 3.3/5V !!! Не подавайте на ESP32 12/24V - сожжёте! :)''' | |||
== Печать корпуса для беспроводной версии == | |||
В конечном счёте я решил свою задачу - как датчик работает мне очень нравится, всё точно, никаких ложных срабатываний по сравнению с PIR датчиком, поэтому я решил финализировать решение, заказал себе ESP32C3 (на свой страх и риск, т.к. разработчики ESPHOME не гарантируют корректную работу на C3, но вроде пишут что всё норм встаёт) и нашёл на просторах сети пару халявных схем для 3D-принтера, отдал другу, и вот какой результат получился: | |||
<gallery mode="traditional" widths ="260px" heights="200px"> | |||
Image: Ld2410-case-1.jpeg| | |||
Image: Ld2410-case-2.jpeg| | |||
</gallery> | |||
ссылки на схемы: | |||
* https://www.printables.com/model/582630-case-for-esp32-c3-super-mini-and-ld2410c/files | * https://www.printables.com/model/582630-case-for-esp32-c3-super-mini-and-ld2410c/files | ||
* https://cults3d.com/en/3d-model/gadget/ld2410-box-proto-type | * https://cults3d.com/en/3d-model/gadget/ld2410-box-proto-type |
правок