139
правок
(не показано 18 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE:Подключение и настройка датчика присутствия людей LD2410C}} | |||
== Описание == | |||
{{Wbincludes:Community}} | |||
Автор статьи: [https://t.me/Paulstrong Paul Strong] | |||
Здесь будет рассмотрен весь процесс подключения, настройки и интеграции с Wiren Board / Home Assistant китайского датчика HLK-LD2410C от компании Hi-link, работающего по принципу радара. | Здесь будет рассмотрен весь процесс подключения, настройки и интеграции с Wiren Board / Home Assistant китайского датчика HLK-LD2410C от компании Hi-link, работающего по принципу радара. | ||
= Что это за датчик = | == Что это за датчик == | ||
Цитирую из | Цитирую из [https://mysku.club/blog/aliexpress/ блока aliexpress]: | ||
<blockquote> | <blockquote> | ||
HLK-LD2410 – радарный датчик присутствия человека с возможностью измерения расстояния и детектирования как движущихся, так и неподвижных объектов. | HLK-LD2410 – радарный датчик присутствия человека с возможностью измерения расстояния и детектирования как движущихся, так и неподвижных объектов. | ||
HLK-LD2410 работает по принципу FMCW радара и способен обнаруживать движущиеся и неподвижные объекты. HLK-LD2410 способен рассчитывать расстояние до объекта, максимальное заявленное расстояние обнаружения составляет 5 метров. Он имеет интерфейс UART для конфигурации и вывод GPIO, состояние которого меняется при обнаружении цели в соответствии с настройками чувствительности. Логический уровень UART и GPIO 3.3 в. | HLK-LD2410 работает по принципу FMCW радара и способен обнаруживать движущиеся и неподвижные объекты. HLK-LD2410 способен рассчитывать расстояние до объекта, максимальное заявленное расстояние обнаружения составляет 5 метров. Он имеет интерфейс UART для конфигурации и вывод GPIO, состояние которого меняется при обнаружении цели в соответствии с настройками чувствительности. Логический уровень UART и GPIO 3.3 в. | ||
Угол обнаружения объекта по горизонтали и вертикали составляет 120 градусов. | Угол обнаружения объекта по горизонтали и вертикали составляет 120 градусов. | ||
Размер модуля всего 35*7 мм. Интерфейс UART и пин GPIO выведен на 5 контактную колодку с шагом 1,27 мм, разъемы с таким шагом распространены не широко, поэтому для отладки имеет смысл сразу заказать интерфейсную плату. Она содержит USB-Uart конвертер CH340 и стабилизатор напряжения AMS1117. Для подключения к компьютеру предусмотрен разъем micro-usb. Интерфейсная плата универсальна и подходит для разных радарных модулей, выпускаемых Hi-Link. | Размер модуля всего 35*7 мм. Интерфейс UART и пин GPIO выведен на 5 контактную колодку с шагом 1,27 мм, разъемы с таким шагом распространены не широко, поэтому для отладки имеет смысл сразу заказать интерфейсную плату. Она содержит USB-Uart конвертер CH340 и стабилизатор напряжения AMS1117. Для подключения к компьютеру предусмотрен разъем micro-usb. Интерфейсная плата универсальна и подходит для разных радарных модулей, выпускаемых Hi-Link. | ||
</blockquote> | </blockquote> | ||
= Материалы для изучения = | == Материалы для изучения == | ||
В процессе изучения темы я подглядывал в "чужие" посты, должен сослаться на них. | В процессе изучения темы я подглядывал в "чужие" посты, должен сослаться на них. | ||
* https://mysku.club/blog/aliexpress/94494.html | * https://mysku.club/blog/aliexpress/94494.html | ||
Строка 17: | Строка 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 конвертера | ||
Строка 30: | Строка 36: | ||
# Подключаем GND и VCC соответственно | # Подключаем GND и VCC соответственно | ||
=== Windows === | |||
Нам нужна софтина '''LD2410 Tool''' на английском языке (к сожалению, есть версия '''только для Windows'''), '''качнуть можно тут - https://drive.google.com/drive/folders/1p4dhbEJA3YubyIjIIC7wwVsSo8x29Fq-''' | |||
После подключения в диспетчере устройств должен появиться '''новый COM-порт'''. | После подключения в диспетчере устройств должен появиться '''новый COM-порт'''. | ||
Строка 94: | Строка 100: | ||
У датчика есть также тонкие настройки чувствительности во всех 8ми зонах, но я не вникал в это очень глубоко, настроек по умолчанию мне хватило чтобы решить свою задачу. | У датчика есть также тонкие настройки чувствительности во всех 8ми зонах, но я не вникал в это очень глубоко, настроек по умолчанию мне хватило чтобы решить свою задачу. | ||
= | === Linux === | ||
Есть вот такая хорошая страничка - https://ld2410.albert.nz/ - вместо софта можно пользоваться этим сайтом для настройки датчика. | Есть вот такая хорошая страничка - https://ld2410.albert.nz/ - вместо софта можно пользоваться этим сайтом для настройки датчика. | ||
= Подключение к ESP32 = | == Настройка через bluetooth == | ||
Вобще-то я рассчитывал получить модуль с синим зубом, но не то заказал. Есть хочется без ноута на месте через мобилу расстояние поднастроить, то надо брать такое: | |||
[[Image:Снимок экрана 2024-01-29 210801.jpg|300px]] | |||
Далее нужно использовать мобильное приложение '''HLKRadarTool''' для подключения к датчику. | |||
== Подключение к ESP32 == | |||
Далее будет рассмотрен процесс прошивки контроллера ESP32, для этих целей у меня всегда есть полноценная dev-плата ESP32 WROOM32 Devkit 38P. | Далее будет рассмотрен процесс прошивки контроллера ESP32, для этих целей у меня всегда есть полноценная dev-плата ESP32 WROOM32 Devkit 38P. | ||
Строка 108: | Строка 121: | ||
Далее подразумевается, что у вас уже есть система Home Assistant с подключенным ESPHOME. | Далее подразумевается, что у вас уже есть система Home Assistant с подключенным ESPHOME. | ||
Создаём новое устройство с базовым конфигом: | Создаём новое устройство с базовым конфигом (адрес 192.168.0.100 указан с учетом IP-адреса, закрепленного на роутере за MAC-адресом WiFi интерфейса платы с ESP32): | ||
<syntaxhighlight lang="yaml"> | <syntaxhighlight lang="yaml"> | ||
esphome: | esphome: | ||
Строка 171: | Строка 184: | ||
после заливки прошивки появится новое устройство с соответствующим сенсором, его можно найти тут "Настройки > Устройства и службы > Устройства" | после заливки прошивки появится новое устройство с соответствующим сенсором, его можно найти тут "Настройки > Устройства и службы > Устройства" | ||
= Интеграция с Wiren Board = | [[Image:Снимок экрана 2024-01-29 210041.jpg]] | ||
== Интеграция с Wiren Board == | |||
Для трансляции значений в контроллер Wiren Board нам понадобится виртуальное устройство, чтобы мы могли в его топики передавать значения через MQTT. | Для трансляции значений в контроллер Wiren Board нам понадобится виртуальное устройство, чтобы мы могли в его топики передавать значения через MQTT. | ||
Строка 188: | Строка 203: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Получаем имя топика == | === Получаем имя топика === | ||
В веб-интерфейсе Wiren Board в разделе "Настройки -> MQTT топики" ищем наше виртуальное устройство и копируем значение топика (например, /devices/virtual-garderob/controls/presence_sensor) | В веб-интерфейсе Wiren Board в разделе "Настройки -> MQTT топики" ищем наше виртуальное устройство и копируем значение топика (например, /devices/virtual-garderob/controls/presence_sensor) | ||
== Добавляем в конфиг esphome == | === Добавляем в конфиг esphome === | ||
ранее мы описывали бинарный сенсор - его нужно дополнить полем id (это нужно чтобы в lambda-функции можно было получение значение сенсора): | ранее мы описывали бинарный сенсор - его нужно дополнить полем id (это нужно чтобы в lambda-функции можно было получение значение сенсора): | ||
<syntaxhighlight lang="yaml"> | <syntaxhighlight lang="yaml"> | ||
Строка 225: | Строка 240: | ||
Таким образом, можно использовать wb-rules для автоматизации, или какой-то другой софт. | Таким образом, можно использовать wb-rules для автоматизации, или какой-то другой софт. | ||
= Автоматизация освещения = | == Автоматизация освещения == | ||
Совсем коротко про автоматизацию (как это сделал я): | Совсем коротко про автоматизацию (как это сделал я): | ||
* всё освещение у меня уже прокинуто в Home Assistant при помощи wb-engine (https://github.com/4mr/wb-engine) | * всё освещение у меня уже прокинуто в Home Assistant при помощи wb-engine (https://github.com/4mr/wb-engine) | ||
* установлен node red с модулем node-red-contrib-home-assistant-websocket и node-red-contrib-wirenboard | * установлен 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]] | [[Файл:Screenshot from 2024-01-29 13-40-40.png]] | ||
Строка 242: | Строка 257: | ||
[[Файл:Screenshot from 2024-01-29 13-42-59.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 | если вы используете компонент первый раз - нужно добавить сервер 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". Теперь при обнаружении присутствия человека в гардеробе будет зажигаться соответствующая группа освещения. | Далее жмём "Deploy". Теперь при обнаружении присутствия человека в гардеробе будет зажигаться соответствующая группа освещения. | ||
= Автономное подключение = | == Автономное подключение == | ||
У датчика есть OUT-пин, на котором появляется напряжение 3V в случае обнаружения объекта, таким образом, можно приколхозить какое-то реле и управлять освещением автономно, без контроллера УД, мне это было не нужно - поэтому особо не изучал, но эта задача кажется сильно проще чем подключение к HA/WB. | У датчика есть OUT-пин, на котором появляется напряжение 3V в случае обнаружения объекта, таким образом, можно приколхозить какое-то реле и управлять освещением автономно, без контроллера УД, мне это было не нужно - поэтому особо не изучал, но эта задача кажется сильно проще чем подключение к HA/WB. | ||
Строка 269: | Строка 284: | ||
</gallery> | </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-принтера, отдал другу, и вот какой результат получился: | В конечном счёте я решил свою задачу - как датчик работает мне очень нравится, всё точно, никаких ложных срабатываний по сравнению с 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 |
правок