Human Presence Radar Module Kit LD2410: различия между версиями

Нет описания правки
 
(не показана 21 промежуточная версия 2 участников)
Строка 1: Строка 1:
= Подключение и настройка датчика присутствия людей LD2410C =
{{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, работающего по принципу радара.


= Что это за датчик =
== Что это за датчик ==
Цитирую из блога aliexpress:
Цитирую из [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 ==
Для подключения к PC нам понадобится '''конвертер USB-to-TTL'''


[[Image:619gfyV8V0L. AC UF894,1000 QL80 .jpg|300px]]
<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>
[[Image:Screenshot from 2024-01-29 11-51-24.png|300px]]


# Подключаем TX датчика к RX конвертера
# Подключаем TX датчика к RX конвертера
Строка 30: Строка 36:
# Подключаем GND и VCC соответственно
# Подключаем GND и VCC соответственно


 
=== Windows ===
Далее нам нужна софтина '''LD2410 Tool''' на английском языке (к сожалению, есть версия только для Windows), '''качнуть можно тут - https://drive.google.com/drive/folders/1p4dhbEJA3YubyIjIIC7wwVsSo8x29Fq-'''
Нам нужна софтина '''LD2410 Tool''' на английском языке (к сожалению, есть версия '''только для Windows'''), '''качнуть можно тут - https://drive.google.com/drive/folders/1p4dhbEJA3YubyIjIIC7wwVsSo8x29Fq-'''


После подключения в диспетчере устройств должен появиться '''новый COM-порт'''.
После подключения в диспетчере устройств должен появиться '''новый COM-порт'''.
Строка 39: Строка 45:
Если подключение установить не удалось - '''нужно разбираться с COM-портом''', возможно поможет рестарт софтины, или возможно вы уже открыли этот COM-порт в другой софтине, ошибка подключения будет выглядеть примерно так:
Если подключение установить не удалось - '''нужно разбираться с COM-портом''', возможно поможет рестарт софтины, или возможно вы уже открыли этот COM-порт в другой софтине, ошибка подключения будет выглядеть примерно так:


[[Image:8c5607a51462e4b110f6527fb88de774b963a13d.png]]
[[Image:8c5607a51462e4b110f6527fb88de774b963a13d.png|600px]]


Теперь нам нужно отрегулировать расстояние, в пределах которого будет работать датчик. По умолчанию датчик работает диапазонами по 0.75м, всего есть 8 диапазонов:
Теперь нам нужно отрегулировать расстояние, в пределах которого будет работать датчик. По умолчанию датчик работает диапазонами по '''0.75м''', всего есть '''8 диапазонов''':
{|  border="1" class="wikitable"  
{|  border="1" class="wikitable"  
! № || нижняя граница, м || верхняя граница, м
! № || нижняя граница, м || верхняя граница, м
Строка 76: Строка 82:


Теперь можем жать кнопку 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 =
=== 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.


Строка 95: Строка 121:
Далее подразумевается, что у вас уже есть система Home Assistant с подключенным ESPHOME.
Далее подразумевается, что у вас уже есть система Home Assistant с подключенным ESPHOME.


Создаём новое устройство с базовым конфигом:
Создаём новое устройство с базовым конфигом (адрес 192.168.0.100 указан с учетом IP-адреса, закрепленного на роутере за MAC-адресом WiFi интерфейса платы с ESP32):
<syntaxhighlight lang="yaml">
<syntaxhighlight lang="yaml">
esphome:
esphome:
Строка 158: Строка 184:
после заливки прошивки появится новое устройство с соответствующим сенсором, его можно найти тут "Настройки > Устройства и службы > Устройства"
после заливки прошивки появится новое устройство с соответствующим сенсором, его можно найти тут "Настройки > Устройства и службы > Устройства"


= Интеграция с Wiren Board =
[[Image:Снимок экрана 2024-01-29 210041.jpg]]
 
== Интеграция с Wiren Board ==
Для трансляции значений в контроллер Wiren Board нам понадобится виртуальное устройство, чтобы мы могли в его топики передавать значения через MQTT.
Для трансляции значений в контроллер Wiren Board нам понадобится виртуальное устройство, чтобы мы могли в его топики передавать значения через MQTT.


Строка 175: Строка 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">
Строка 212: Строка 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


Добавляем компонент "events: state" (отлавливает изменение состояния выбранного объекта)
Добавляем компонент [[Image:Снимок экрана 2024-01-29 194609.jpg]] (отлавливает изменение состояния выбранного объекта)


[[Файл:Screenshot from 2024-01-29 13-40-40.png]]
[[Файл:Screenshot from 2024-01-29 13-40-40.png]]
Строка 229: Строка 257:
[[Файл:Screenshot from 2024-01-29 13-42-59.png]]
[[Файл:Screenshot from 2024-01-29 13-42-59.png]]


добавляем второй компонент - "wb: out"
добавляем второй компонент - [[Image:Снимок экрана 2024-01-29 194624.jpg]]


[[https://wirenboard.com/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Screenshot_from_2024-01-29_13-40-02.png]]
[[Image:Screenshot_from_2024-01-29_13-40-02.png]]


если вы используете компонент первый раз - нужно добавить сервер wiren board
если вы используете компонент первый раз - нужно добавить сервер wiren board


[[Файл:Screenshot from 2024-01-29 13-38-30.png]]
[[Image:Screenshot from 2024-01-29 13-38-30.png]]


указываем "светильник"
указываем "светильник"


[[Файл:Screenshot from 2024-01-29 13-44-41.png]]
[[Image:Screenshot from 2024-01-29 13-44-41.png]]


соединяем компоненты:
соединяем компоненты:


[[Файл:Screenshot from 2024-01-29 13-57-36.png]]
[[Image:Screenshot from 2024-01-29 13-57-36.png]]


Далее жмём "Deploy". Теперь при обнаружении присутствия человека в гардеробе будет зажигаться соответствующая группа освещения.
Далее жмём "Deploy". Теперь при обнаружении присутствия человека в гардеробе будет зажигаться соответствующая группа освещения.


= Автономное подключение =
== Автономное подключение ==
У датчика есть OUT-пин, на котором появляется напряжение 3V в случае обнаружения объекта, таким образом, можно приколхозить какое-то реле и управлять освещением автономно, без контроллера УД, мне это было не нужно - поэтому особо не изучал, но эта задача кажется сильно проще чем подключение к HA/WB.
У датчика есть OUT-пин, на котором появляется напряжение 3V в случае обнаружения объекта, таким образом, можно приколхозить какое-то реле и управлять освещением автономно, без контроллера УД, мне это было не нужно - поэтому особо не изучал, но эта задача кажется сильно проще чем подключение к HA/WB.


Например, может подойти один из модулей реле (тут надо смотреть, что в действительности выдаёт датчик на пине OUT):
Например, может подойти один из модулей реле (тут надо смотреть, что в действительности выдаёт датчик на пине OUT):
[[Файл:Screenshot from 2024-01-29 11-41-12.png]]
<gallery mode="traditional" widths ="260px" heights="200px">
[[Файл:Odnokanalnoe-rele.jpg]]
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-принтера, отдал другу, и вот какой результат получился:
В конечном счёте я решил свою задачу - как датчик работает мне очень нравится, всё точно, никаких ложных срабатываний по сравнению с PIR датчиком, поэтому я решил финализировать решение, заказал себе ESP32C3 (на свой страх и риск, т.к. разработчики ESPHOME не гарантируют корректную работу на C3, но вроде пишут что всё норм встаёт) и нашёл на просторах сети пару халявных схем для 3D-принтера, отдал другу, и вот какой результат получился:


[[Файл:Ld2410-case-1.jpeg]]
<gallery mode="traditional" widths ="260px" heights="200px">
[[Файл:Ld2410-case-2.jpeg]]
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
123

правки