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

Материал из Wiren Board
м
Строка 126: Строка 126:


= Интеграция с Wiren Board =
= Интеграция с Wiren Board =
# Создаём виртуальное устройство
Для трансляции значений в контроллер Wiren Board нам понадобится виртуальное устройство, чтобы мы могли в его топики передавать значения через MQTT.
# Получаем имя топика
 
# Добавляем в конфиг esphome
== Создаём виртуальное устройство ==
<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
 
Добавляем компонент "events: state" (отлавливает изменение состояния выбранного объекта)
[[Файл: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]]
 
добавляем второй компонент - "wb: out"
[[https://wirenboard.com/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Screenshot_from_2024-01-29_13-40-02.png]]
 
если вы используете компонент первый раз - нужно добавить сервер wiren board
[[Файл:Screenshot from 2024-01-29 13-38-30.png]]
 
 
указываем "светильник"
[[Файл:Screenshot from 2024-01-29 13-44-41.png]]
 
Далее жмём "Deploy". Теперь при обнаружении присутствия человека в гардеробе будет зажигаться соответствующая группа освещения.
 


= Автономное подключение =
= Автономное подключение =
Для подключения нам понадобится модуль реле, срабатывающий от 3V, например, что-то такое:
У датчика есть OUT-пин, на котором появляется напряжение 3V в случае обнаружения объекта, таким образом, можно приколхозить какое-то реле и управлять освещением автономно, без контроллера УД, мне это было не нужно - поэтому особо не изучал, но эта задача кажется сильно проще чем подключение к HA/WB.
 
Например, может подойти один из модулей реле (тут надо смотреть, что в действительности выдаёт датчик на пине OUT):
[[Файл:Screenshot from 2024-01-29 11-41-12.png]]
[[Файл:Screenshot from 2024-01-29 11-41-12.png]]
[[Файл:Odnokanalnoe-rele.jpg]]


= Печать корпуса =
= Печать корпуса =
В конечном счёте я решил свою задачу - как датчик работает мне очень нравится, всё точно, никаких ложных срабатываний по сравнению с PIR датчиком, поэтому я решил финализировать решение, заказал себе ESP32C3 (на свой страх и риск, т.к. разработчики ESPHOME не гарантируют корректную работу на C3, но вроде пишут что всё норм встаёт) и нашёл на просторах сети пару халявных схем для 3D-принтера, отдал другу, и вот какой результат получился:
[[Файл:Ld2410-case-1.jpeg]]
[[Файл:Ld2410-case-2.jpeg]]
ссылки на схемы:
* 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

Версия 13:54, 29 января 2024

Подключение и настройка датчика присутствия людей LD2410C

Здесь будет рассмотрен весь процесс подключения, настройки и интеграции с Wiren Board / Home Assistant китайского датчика LD2410C от компании Hi-link, работающего по принципу радара.

Материалы для изучения

В процессе изучения темы я подглядывал в "чужие" посты, должен сослаться на них.

Подключение к PC

Для подключения к PC нам понадобится конвертер USB-to-TTL 619gfyV8V0L. AC UF894,1000 QL80 .jpg

на датчике есть пять пинов: Screenshot from 2024-01-29 11-51-24.png


  1. Подключаем TX датчика к RX конвертера
  2. Подключаем RX датчика к TX конвертера
  3. Подключаем GND и VCC соответственно

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

После подключения в диспетчере устройств должен появиться новый COM-порт.

Теперь открываем софтину, выбираем нужный COM-порт и жмём "Connect", если ошибок не вылезло - значит Serial-подключение установлено успешно.

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

Теперь нам нужно отрегулировать расстояние, в пределах которого будет работать датчик. По умолчанию датчик работает диапазонами по 0.75м, всего есть 8 диапазонов:

  1. 0.0m-0m.75m
  2. 0.75m-1.5m
  3. 1.5m-2.25m
  4. 2.25m-3.0m
  5. 3.0m-3.75m
  6. 3.75m - 4.5m
  7. 4.5m-5.25m
  8. 5.25m-6.0m

Мы можем настраивать расстояние между 2 и 8 включительно, то есть отключить сканирование расстояния меньше 0.7m невозможно чисто технически, оно всегда сканируется.

Например, если мы хотим "мониторить" расстояние не более 3м, тогда записываем значения:

  • Moving Max - 4
  • Motionless Max - 4

Теперь можем жать кнопку Start и сможем наблюдать за изменениями на графиках - по ним можно понять как датчик реагирует на ваше присутствие:

  • если круг зеленого цвета - значит датчик вас не видит, если красный/пурпурный - значит датчик видит ваше присутствие/движение
  • в верхней части есть также расстояние до вас, вы можете постепенно удаляться от датчика и в какой-то момент отсчёт расстояния прекратится, спустя несколько секунд круг станет зеленым, т.к. датчик больше вас не видит (ранее мы настроили датчик на максимальное расстояние 3м)

У датчика есть также тонкие настройки чувствительности во всех 8ми зонах, но я не вникал в это очень глубоко, настроек по умолчанию мне хватило чтобы решить свою задачу.

Подключение к ESP32

Далее будет рассмотрен процесс прошивки контроллера ESP32, для этих целей у меня всегда есть полноценная dev-плата ESP32 WROOM32 Devkit 38P.

Подключаем пины датчика к esp32:

  1. 5V контроллера к VCC датчика
  2. GND
  3. GPIO27 - RX датчика
  4. GPIO26 - TX датчика

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

Создаём новое устройство с базовым конфигом:

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

что здесь можно увидеть:

  1. мы указали настройки UART, соответствующие тем пинам, на которые мы подключили наш датчик
  2. создаём платформу ld2410 и указываем таймаут для цикла, который опрашивает датчик
  3. на базе платформы 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

что мы сделали:

  1. добавили id к сенсору
  2. описали mqtt-брокера
  3. создали триггер 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

Добавляем компонент "events: state" (отлавливает изменение состояния выбранного объекта) 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

добавляем второй компонент - "wb: out" [[1]]

если вы используете компонент первый раз - нужно добавить сервер wiren board Screenshot from 2024-01-29 13-38-30.png


указываем "светильник" Screenshot from 2024-01-29 13-44-41.png

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


Автономное подключение

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

Например, может подойти один из модулей реле (тут надо смотреть, что в действительности выдаёт датчик на пине OUT): Screenshot from 2024-01-29 11-41-12.png Odnokanalnoe-rele.jpg

Печать корпуса

В конечном счёте я решил свою задачу - как датчик работает мне очень нравится, всё точно, никаких ложных срабатываний по сравнению с PIR датчиком, поэтому я решил финализировать решение, заказал себе ESP32C3 (на свой страх и риск, т.к. разработчики ESPHOME не гарантируют корректную работу на C3, но вроде пишут что всё норм встаёт) и нашёл на просторах сети пару халявных схем для 3D-принтера, отдал другу, и вот какой результат получился:

Ld2410-case-1.jpeg Ld2410-case-2.jpeg

ссылки на схемы: