LD2450: https://alii.pub/71148t?erid=2SDnjcNNUSN
ESP32: https://alii.pub/70f419?erid=2SDnje7AFhL
Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.
LD2450 это микроволновой датчик который может измерять присутствие человека, скорость перемещения его и так-же может определять в каком именно месте находится человек и такое местоположение может определять до 3х тел одновременно.
Определяет человека он на расстоянии до 6 метров.
Так-же можно ему задать до 3х зон и на основе этих зон можно делать разные автоматизации. К примеру, нарисовали мы зону возле кресла и как только тело зашло в эту зону (село на кресло), то например включается торшер.
И так можно до 3х зон нарисовать.
Приложения для работы с датчиком:
Датчик LD2450 от компании HiLink общается по UART интерфейсу, но так-же у него есть и Bluetooth на “борту”. И вот если скачать приложение с Google play или AppStore HLKRadarTool то с помощью него по блютузу можно подключиться к датчику и посмотреть как он работает. Помимо этого еще можно обновлять через это приложение прошивки по воздуху.
Но смартфоном приложения не заканчиваются. Еще есть приложение и на компьютер. Которое можно скачать отсюда: https://h.hlktech.com/Mobile/download/fdetail/239.html
А именно HLK-LD2450_TOOL_English.zip ну там и документация имеется.
И выглядит все примерно вот так:
Тут можно наблюдать за точкой (которой является человек) и как она перемещается в поле зрения датчика. Выглядит магически конечно.
Основываясь на документацию датчика и собственно возможности программы для LD2450, получилось создать весьма себе хорошую программу в ESPHome, для ESP32.
Программа для датчика LD2450 в ESPHome:
Это дополнение к уже вышедшей статье. Когда я писал эту статью, то не знал, что оказывается есть готовый конфигуратор прошивки под ESPHome и Plotly Graph. Но так как этот материал который уже написан, мне ценен. То я его оставлю, может кому-то пригодится. А конфигуратор прошивки я описал ниже.
Программа получилась очень большая. На более чем 1200 строчек кода и описывать все конечно же нет никакого смысла. Я и сам то не очень понимаю там как все работает, очень много всяких формул и функций.
Программу для ESPHome я закинул себе на яндекс диск и её можно скачать тут: https://disk.yandex.ru/d/bDp2LTcMPvXD9w
Распиновка тут указывается в блоке UART и она выставлена как TX – 17 пин, а RX – 16 пин. Собственно подключение выглядит так:
LD2450 | ESP32 |
5V | 5V |
GND | GND |
RX | 17 pin |
TX | 16 pin |
Блоки в коде такие как esp32, api, ota, wifi, ap вы естественно не копируете с моего файла, а оставляете те, которые у Вас создались с Вашим устройством.
После загрузки скетча, у Вас появится очень много всяких объектов и параметров в Home Assistant:
Например эти сенсоры будут Вам показывать в каких координатах обнаружен объект.
Так-же тут присутствует возможность рисовать зоны:
Но это все сейчас у нас получается на глаз, ведь мы не видим зон которые можем выставлять в Home Assistant
Карточка Plotly Graph для отображения визуализации зон и объектов датчика LD2450:
Существует такая карточка под названием Plotly Graph. Её установить можно с помощью HACS.
Находите, устанавливаете, обновляете страничку. Далее идёте в Dashboard и добавляете карточку Plotly Graph.
В этой карточке в текстовый редактор вставляете следующее:
type: custom:plotly-graph
title: mmWave Radar Sensor
refresh_interval: 1
hours_to_show: current_day
layout:
height: 230
margin:
l: 50
r: 20
t: 20
b: 40
showlegend: true
xaxis:
dtick: 100
gridcolor: RGBA(200,200,200,0.15)
zerolinecolor: RGBA(200,200,200,0.15)
type: number
fixedrange: true
range:
- 400
- -400
yaxis:
dtick: 100
gridcolor: RGBA(200,200,200,0.15)
zerolinecolor: RGBA(200,200,200,0.15)
scaleanchor: x
scaleratio: 1
fixedrange: true
range:
- 600
- 0
entities:
- entity: ''
name: Target1
marker:
size: 12
line:
shape: spline
width: 5
x:
- $ex hass.states["sensor.mmwave_sensor_2fa25c_target_1_x"].state /-10
'y':
- $ex hass.states["sensor.mmwave_sensor_2fa25c_target_1_y"].state /10
- entity: ''
name: Target2
marker:
size: 12
line:
shape: spline
width: 5
x:
- $ex hass.states["sensor.mmwave_sensor_2fa25c_target_2_x"].state /-10
'y':
- $ex hass.states["sensor.mmwave_sensor_2fa25c_target_2_y"].state /10
- entity: ''
name: Target3
marker:
size: 12
line:
shape: spline
width: 5
x:
- $ex hass.states["sensor.mmwave_sensor_2fa25c_target_3_x"].state /-10
'y':
- $ex hass.states["sensor.mmwave_sensor_2fa25c_target_3_y"].state /10
- entity: ''
name: Zone1
mode: lines
fill: toself
fillcolor: RGBA(20,200,0,0.1)
line:
color: RGBA(20,200,0,0.2)
shape: line
width: 2
x:
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_1_x1"].state /-10
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_1_x1"].state /-10
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_1_x2"].state /-10
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_1_x2"].state /-10
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_1_x1"].state /-10
'y':
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_1_y1"].state /10
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_1_y2"].state /10
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_1_y2"].state /10
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_1_y1"].state /10
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_1_y1"].state /10
- entity: ''
name: Zone2
mode: lines
fill: toself
fillcolor: RGBA(200,0,255,0.1)
line:
color: RGBA(200,0,255,0.2)
shape: line
width: 2
x:
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_2_x1"].state /-10
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_2_x1"].state /-10
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_2_x2"].state /-10
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_2_x2"].state /-10
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_2_x1"].state /-10
'y':
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_2_y1"].state /10
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_2_y2"].state /10
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_2_y2"].state /10
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_2_y1"].state /10
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_2_y1"].state /10
- entity: ''
name: Zone3
mode: lines
fill: toself
fillcolor: RGBA(200,120,55,0.1)
line:
color: RGBA(200,120,55,0.2)
shape: line
width: 2
x:
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_3_x1"].state /-10
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_3_x1"].state /-10
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_3_x2"].state /-10
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_3_x2"].state /-10
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_3_x1"].state /-10
'y':
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_3_y1"].state /10
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_3_y2"].state /10
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_3_y2"].state /10
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_3_y1"].state /10
- $ex hass.states["number.mmwave_sensor_2fa25c_zone_3_y1"].state /10
- entity: ''
name: Coverage
mode: lines
fill: tonexty
fillcolor: rgba(168, 216, 234, 0.15)
line:
shape: line
width: 1
dash: dot
x:
- 0
- $ex 600 * Math.sin((2 * Math.PI)/360 * 60)
- 450
- 400
- 300
- 200
- 100
- 0
- -100
- -200
- -300
- -400
- -450
- $ex -600 * Math.sin((2 * Math.PI)/360 * 60)
- 0
'y':
- 0
- $ex 600 * Math.cos((2 * Math.PI)/360 * 60)
- $ex Math.sqrt( 600**2 - 450**2 )
- $ex Math.sqrt( 600**2 - 400**2 )
- $ex Math.sqrt( 600**2 - 300**2 )
- $ex Math.sqrt( 600**2 - 200**2 )
- $ex Math.sqrt( 600**2 - 100**2 )
- 600
- $ex Math.sqrt( 600**2 - 100**2 )
- $ex Math.sqrt( 600**2 - 200**2 )
- $ex Math.sqrt( 600**2 - 300**2 )
- $ex Math.sqrt( 600**2 - 400**2 )
- $ex Math.sqrt( 600**2 - 450**2 )
- $ex 600 * Math.cos((2 * Math.PI)/360 * 60)
- 0
raw_plotly_config: true
Где название датчика sensor.mmwave_sensor_2fa25c
меняете на своё которое получило Ваше esp32 устройство.
По итогу должно получиться вот так:
Собственно кружки это объект который двигается по карте. А квадратики это зоны.
Конфигуратор готовых прошивок под ESPHome для датчика HiLink LD2450:
Это дополнение к статье и этот же Вариант попал в видео, так как я решил, что с таким вариантом точка входа будет гораздо выше для работы с этим датчиком и каждый сможет себе его настроить.
Существует проект на github https://github.com/53l3cu5/ESP32_LD2450, в котором представлен пример работы с датчиком LD2450 и пример для карты plotly graph. И казалось бы все как и описано выше, но тут во первых ошибка чуть другая (больше возможностей), карта чуть другая. Но самое интересное тут в том, что данный создатель прошивки сделал автоматический конфигуратор: https://53l3cu5.github.io/ В нем просто в двух местах указываем имя которое хотим присвоить новому устройству в ESPHome и нажмем кнопку “ganerate” Для создания прошивки:
Вводим тут в Device Name и в Entity Name что-то свое. я например написал LD2450 в двух местах.
Encryprion key генерируется каждый раз.
Можем выбрать сколько мы хотим зон и нажимаем кнопку Generate:
После чего у нас сгенерируется три прошивки:
Первое это YAML Text – это прошивка для ESPHome. Создав новое устройство в ESPHome, удаляем оттуда все содержимое и вставляем код полностью который сконфигурировался в YAML Text. Ну только что wifi настройки поменять на свои.
Но при сохранении у Вас будет ругаться что нет файла Zone.h. Это мы исправим следующим шагом:
Zone.h – это библиотека нужная нам для работы с нашим датчиком LD2450. Собственно код для этого файла у нас создался во второй колонке Zone.h Text. Нажимаем кнопку Download Zone.h – что даст возможность нам скачать этот файл.
А в ESPHome библиотеки добавляются просто закидыванием файлов в папку ESPHome:
После этого проект в ESPHome скомпилируется без ошибок у нас и можно его залить в ESP32.
После заливки скетчка и добавления устройства в ESPHome у нас появится устройство с очень большим количеством разных объектов и параметров:
Но что с этими параметрами делать без карты? правильно, надо нарисовать карту отображения позиционирования человека. Для этого нужна карточка Plotly Graph, которую я показывал как скачать выше в статье.
Только в код карточки нужно вставить сгенерированный код из Plotl Graph Text, который сгенерировал генератор выше. И по итогу получится вот такая карточка, где видно голубой кружок, который двигается по плоскости – это как раз ваше позиционирование.
Теперь вернемся к устройству с множеством непонятных параметров. По сути нам нужно нам только несколько.
Первые – это те которые отрисовывают зоны.
Значит Zone1 Hight – это зона по вертикали задается на скрине указано 2 метра.
Zone1 Width – это зона по горизонтали задается на скрине указано 2метра.
Zone1 X – это размещение зоны относительно датчика по горизонтали на скрене это смещение на 1 метр.
Zone1 Y – это размещение зоны относительно датчика по вертикали на скрине это смещение на 1 метр.
Zone1 Timeout – это задержка присутствия. Тоесть когда датчик поймал ваше присутствие в зоне, он срабатывает и 5 секунд вас держит в пойманом состоянии. Если оставить 0 секунд, то датчик “дергается” постоянно, то находит цель, то теряет. С задержкой в 5 секунд – работает идеально.
Так-же интересны еще бинарные сенсоры, которые срабатывают как датчик движения (обнаружено движение или нет). СРабатывают они когда человек заходит в зону. Всего 3 зоны можно сделать ну и 3 бинарных сенсора который каждый относится к своей зоне, эти датчики называются:
Zone1 Presence, Zone2 Presence, Zone3 Presence.
По окончанию отрисовки зон выглядеть это будет примерно так:
Как видно из скрина, сработал датчик Zone1 Presence, а сработал он как можно видеть на карте, из-за того, что я вошел в зону 1.
Собственно так это все и работает.
Теперь можно отрисовать зоны как Вам удобно, а бинарными датчиками Zone1 Presence, Zone2 Presence, Zone3 Presence отслеживать присутствие в той или иной зоне и опираясь на эти бинарные датчики строить автоматизации.
Реклама: ООО “АЛИБАБА.КОМ (РУ)” ИНН: 7703380158