『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 58215|回复: 448

[人体存在] 【更新3】无线调试、监控人体存在感应雷达数据(LD2410H)

  [复制链接]

2

主题

73

帖子

406

积分

中级会员

Rank: 3Rank: 3

积分
406
金钱
333
HASS币
0
发表于 2022-7-17 00:06:10 | 显示全部楼层 |阅读模式
本帖最后由 moe1983 于 2022-8-6 00:21 编辑

最近拿到了LD2410新固件,功能相对完善了不少,但还是有死机的情况。
这次更新完善了工程模式切换、恢复出厂设置、能量数据接入HA,数据比较多,UI暂时没时间折腾了,大家根据自己喜好调整布局一下吧

游客,如果您要查看本帖隐藏内容请回复


说明:

    en_mov_0 表示:移动距离门0的能量,以此类推
    en_occ_0  表示:静止距离门0的能量,以此类推
    能量数据可以设置灵敏度的时候提供参考。
    增加“Debug mode”开关,打开表示选择“工程模式”,反之为“正常模式”,只有在工程模式下才有能量数据,否则只有距离数据。
    “Set default”按键,恢复出厂设置,其中静止距离门0、1的灵敏度不重置。    这次没弄波特率调整,因为调整了还要重新编译一次。出厂默认256000,降低不知道会不会减少发热,有空测试一下。

参数_3.jpg 参数_4.jpg


------------------------------------雷达旧固件(更新2)-------------------------------------       
这几天完善了上次待解决的问题:一是获取雷达参数并赋值,二是监控探测数据(主要是移动、静止目标距离)。
    一、配置
    1、配置YAML文件,里面有些参数(例如IP、其他感应器等),按自己实际修改,雷达相关的参数id不能修改,name可以自己改(我没用中文,应为感觉ESPHOME对中文支持还是不太好)。
    2、把ld2140h.h文件拷贝到YAML文件所在目录下,一般是config/esphome
    3、编译YAML。
    具体文件如下:7.24更正,原文件YAML里面的ld2410h.h写成了ld2140h.h
游客,如果您要查看本帖隐藏内容请回复

    二、使用
    1、参数
    参数_1.jpg 参数_2.jpg
    这次在上一稿的基础上,展开所有感应距离、移动/静止9个门的灵敏度参数,取消了一次配置所有灵敏度参数按钮(我觉得作用不大,还不如逐个调一次就完了,有需要的可以参照第一稿自己加上去)。其中:
    (1)max_distance, max_mov_distance, max_occ_distance 分别表示最大感应、移动、静止距离。不过最大感应距离没有意义,因为没有配置命令,可能以后有用吧。
    (2)mov_sn_distance_x (x为0至8)表示“距离门x的移动灵敏度”一个门距离是0.75米;相应的,occ_sn_distance_x 表示距离门x的静止灵敏度。
    (3)none_duration 表示“无人持续时间”,单位秒。有效值是0-255秒(我设定是0-120秒)。
    (4)操作上,触发参数变动后,会自动打开“config_mode”模式并设置参数,调整完后要手动关闭“config_mode”开关
    (5)update_params 为更新雷达参数,点击后会获取雷达参数并更新HA里面的参数,一般情况下不用点,模块启动时设置了先更新参数的,除非出现雷达接收不到指令或者死机的情况,后面再吐槽。
    3、监控
    这一稿增加了实时监控雷达探测目标距离和目标状态的功能。
感应数据.jpg
    (1)run_RTA  打开后,在感应器页面,会实时显示:
    target state 是探测目标状态,none(没人),mov(运动),occ(静止),mov & occ(运动静止混合)
    detect_distance_sensor 是探测目标距离(米,下同)
    mov_distance_sensor 是移动目标距离
    occ_distance_sensor 是静止目标距离
    (2)update_interval 是刷新间隔,大概500代表1秒间隔,例如设置为1000,则每2秒刷新一次监测数据(太快可能会死机,我用500间隔运行了2个小时,基本没问题,CPU也几乎没有变化)。
    4、回头再说说思路
    监控思路其实很简单,就是读取雷达发送的串口数据,匹配处理后,传送给sensor。不过,ld2410这个雷达发热有点猛,所以加了两个条件,一是间隔时间,二是如果没人就不进一步处理读取的数据,减轻运算量。只是我没学过C++,写代码全靠蒙、抄,所以肯定还有很大优化空间,请大佬们修正后教学一下。
    5、吐槽
    LD2410H这个雷达,我感觉是个还没成熟的产品。其实上周就弄好代码了,但发现经常接收不到串口数据,有些参数也调整不了,后来咨询了海凌科的技术,说目前有些bug:
    (1)旧版本(1.01,我不知道现在买的是不是新版本,至少我都是旧版本。。。)无法调整工程/工作模式、无法调整波特率、无法恢复出厂设置!
    (2)连续密集发送指令给雷达,可能会造成雷达死机!这时只能拔电重启。。。。
    我开始还以为是我的问题,调试了好几天。。。。。真是服了!所以,大家调参数的时候,尽量慢一点,不要一顿操作猛如虎,不然雷达怎么死都不知道。
    6、后续
    目前这稿没有处理能量数据,一是感觉用处不大(可能对调整参数有辅助作用),二是不知道雷达和8266受不受得了。
    后续我想可以利用探测数据,做一些自动化,例如根据移动/静止距离控制相应的设备联动(可以不用红外了?,或者可以取消高低电平输出,利用目标状态更精准地联动其他设配。大家有好的想法多交流交流。



=====以下为第一稿的内容=======================================  

  玩HA两个月多了,加入了ekingfan大佬的人体存在群(垃圾收集群),认识了很多大佬,发现了很多有趣的东西。
  最近学着大佬们玩MMW+PIR,目前主要用LD1115H和LD2410H,主观感受是1115搭配MINI D1比较方便,直插针脚可以做到体积最小化;2410本身比较小,除了发热有点明显,其余功能比1115丰富一些,但针脚太小了,有几次换到上位机操作差点就直接验血了。所以,本着折腾的宗旨,打算像1115那样通过HA调节参数(自己写固件的大佬不要笑)。
  趁周末有空研究了一下,并得到kevin、lannister等大佬的指点,参(chao)考(xi)了国外大神的成果,初步调试成功,ESPHOME代码的主要部分如下:
captive_portal:

uart:
  id: mod_bus5
  tx_pin: GPIO15
  rx_pin: GPIO13
  baud_rate: 256000
  parity: NONE
  stop_bits: 1
  debug:
    direction: BOTH
    after:
      delimiter: [0xF8,0xF7,0xF6,0xF5]

binary_sensor:
  - platform: gpio
    id: human_presence_5_motion
    pin: 
      number: GPIO16
      mode: INPUT_PULLDOWN
    name: "human_presence_5"
    device_class: presence
  - platform: gpio
    id: human_presence_5_PIR
    name: "human_presence_5_PIR"
    pin: GPIO12
    device_class: motion

output:
  - platform: gpio
    id: "human_presence_5_light"
    pin: GPIO2  #D4
    inverted: true
    
light:
  - platform: binary
    output: "human_presence_5_light"
    name: "human presence 5 light"

sensor:
  - platform: adc
    pin: A0
    name: "human_presence_5_Illuminance"
    id: human_presence_5_illuminance
    device_class: illuminance
    unit_of_measurement: lx
    update_interval: 5s
    filters:
      - multiply: 3.3
      - lambda: |-
          return (x / 10000.0) * 2000000.0 ;
switch:
  - platform: template
    name: "config mode"
    id: config_mode
    optimistic: true
    on_turn_on:
      - uart.write: [0xFD,0xFC,0xFB,0xFA,0x04,0x00,0xFF,0x00,0x01,0x00,0x04,0x03,0x02,0x01]
      - delay: 1s
    on_turn_off:
      - uart.write: [0xFD,0xFC,0xFB,0xFA,0x02,0x00,0xFE,0x00,0x04,0x03,0x02,0x01]
      - delay: 1s
  - platform: template
    name: "set all sensitivity"
    id: set_all_sensitivity
    optimistic: true
button:
  - platform: template
    name: "config get"
    id: config_get
    on_press:
      - uart.write: [0xFD,0xFC,0xFB,0xFA,0x02,0x00,0x61,0x00,0x04,0x03,0x02,0x01]
      - delay: 1s
  - platform: template
    name: "set distance"
    id: set_distance
    on_press:
      - uart.write: !lambda
          return {0xFD,0xFC,0xFB,0xFA, 0x14, 0x00, 0x60, 0x00, 0x00, 0x00, (unsigned char)(int)(id(max_mov_dis).state/0.75), 0x00, 0x00, 0x00, 0x01, 0x00, (unsigned char)(int)(id(max_occ_dis).state/0.75), 0x00, 0x00, 0x00, 0x02, 0x00, (unsigned char)id(none_dur).state, 0x00, 0x00, 0x00, 0x04, 0x03, 0x02, 0x01};
      - delay: 1s
  - platform: template
    name: "set sensitivity"
    id: set_sensitivity
    on_press:
      - uart.write: !lambda
          if (id(set_all_sensitivity).state) {
            return {0xFD,0xFC,0xFB,0xFA, 0x14, 0x00, 0x64, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x00, (unsigned char)id(mov_sv).state, 0x00, 0x00, 0x00, 0x02, 0x00, (unsigned char)id(occ_sv).state, 0x00, 0x00, 0x00, 0x04, 0x03, 0x02, 0x01};
          } else {
            return {0xFD,0xFC,0xFB,0xFA, 0x14, 0x00, 0x64, 0x00, 0x00, 0x00, (unsigned char)(int)(id(dis_setup).state/0.75), 0x00, 0x00, 0x00, 0x01, 0x00, (unsigned char)id(mov_sv).state, 0x00, 0x00, 0x00, 0x02, 0x00, (unsigned char)id(occ_sv).state, 0x00, 0x00, 0x00, 0x04, 0x03, 0x02, 0x01};
          }
      - delay: 1s
  - platform: template
    name: "!set default!"
    id: set_default
    on_press:
      - uart.write: [0xFD,0xFC,0xFB,0xFA,0x02,0x00,0xA2,0x00,0x04,0x03,0x02,0x01]
      - delay: 1s
number:
  - platform: template
    name: "max_mov_dis" #最大运动距离
    id: max_mov_dis
    min_value: 0.75
    max_value: 6
    initial_value: 6
    step: 0.75
    restore_value: true
    optimistic: true
#    disabled_by_default: true
    unit_of_measurement: m #单位:米
  - platform: template
    name: "max_occ_dis" #最大静止距离
    id: max_occ_dis
    min_value: 0.75
    max_value: 6
    initial_value: 6
    step: 0.75
    restore_value: true
    optimistic: true
#    disabled_by_default: true
    unit_of_measurement: m #单位:米
  - platform: template
    name: "none_dur" #无人持续时间
    id: none_dur
    min_value: 0
    max_value: 120
    initial_value: 5
    step: 1
    restore_value: true
    optimistic: true
#    disabled_by_default: true
    unit_of_measurement: s #单位:秒
  - platform: template
    name: "mov_sv" #运动灵敏度
    id: mov_sv
    min_value: 0
    max_value: 100
    initial_value: 40
    step: 10
    restore_value: true
    optimistic: true
#    disabled_by_default: true
    
  - platform: template
    name: "occ_sv" #静止灵敏度
    id: occ_sv
    min_value: 0
    max_value: 100
    initial_value: 40
    step: 10
    restore_value: true
    optimistic: true
#    disabled_by_default: true
    
  - platform: template
    name: "dis_setup" #灵敏度感应距离
    id: dis_setup
    min_value: 0
    max_value: 6
    initial_value: 6
    step: 0.75
    restore_value: true
    optimistic: true
#    disabled_by_default: true
    unit_of_measurement: m #单位:米


说明:   
    1、开始设置参数前,需要先把"config mode"打开,否则调整不生效。
    2、最大运动/静止感应距离(max_mov_dis/max_occ_dis)、无人持续时间(none_dur),这3个参数为一组,设置后点击按钮"set distance"完成输入。
    3、运动/静止灵敏度(mov_sv/occ_sv)、灵敏度感应距离(dis_setup)、设置所有距离灵敏度(set all sensitivity),这几个为一组,设置后点击"set sensitivity"完成输入。
    4、打开"set all sensitivity",意思是统一设置所有距离(0-6米)的灵敏度,此时dis_setup没有意义。关闭"set all sensitivity",意思是单独对某个距离(dis_setup)设置灵敏度。(0.75米以内的静止灵敏度不可设置)
    5、上述设置完成后记得关掉"config mode",否则不生效。
    6、"get_config"是获取雷达参数,自己调试验证用的,没需要可以删了。"!set_default!"是恢复出厂设置(慎用)。
    7、时(neng)间(li)有限,代码写得比较啰嗦,不保证没BUG,有空再逐个验证。
    8、有待解决:一是雷达参数获取赋值问题,二是实时跟踪感应距离问题。希望大佬们指点一下。
    另外,无人感应时间如果很长可能会有问题(理论上限65535秒),我觉得2分钟足够了,所以没想了。


    第一次在这里发帖,希望大家支持一下。










评分

参与人数 9金钱 +54 收起 理由
ounce + 5
shadowba + 5 高手,这是高手!
q360130 + 2 论坛有你更精彩!
Tj8888 + 2 感谢楼主無私分享和耐心指導!.
jjcs + 10 感谢楼主分享!
firewater + 10 论坛有你更精彩!
tangyali + 5 感谢楼主分享!
DDDear + 5 感谢楼主分享!
dscao + 10 感谢楼主分享!

查看全部评分

回复

使用道具 举报

22

主题

245

帖子

1587

积分

金牌会员

Rank: 6Rank: 6

积分
1587
金钱
1342
HASS币
0
发表于 2022-7-17 00:22:09 | 显示全部楼层
来来来。 我过来 顶一下!!!  
回复

使用道具 举报

1

主题

77

帖子

1547

积分

金牌会员

Rank: 6Rank: 6

积分
1547
金钱
1470
HASS币
0
发表于 2022-7-17 00:23:52 来自手机 | 显示全部楼层
我用mqtt做的,给指定topic发配置内容,用串口接收反馈
回复

使用道具 举报

2

主题

73

帖子

406

积分

中级会员

Rank: 3Rank: 3

积分
406
金钱
333
HASS币
0
 楼主| 发表于 2022-7-17 00:43:36 来自手机 | 显示全部楼层
tink 发表于 2022-7-17 00:23
我用mqtt做的,给指定topic发配置内容,用串口接收反馈

分享学习一下
回复

使用道具 举报

2

主题

73

帖子

406

积分

中级会员

Rank: 3Rank: 3

积分
406
金钱
333
HASS币
0
 楼主| 发表于 2022-7-17 00:49:16 来自手机 | 显示全部楼层
ekingfan 发表于 2022-7-17 00:22
来来来。 我过来 顶一下!!!

谢谢群主支持
回复

使用道具 举报

23

主题

137

帖子

712

积分

高级会员

Rank: 4

积分
712
金钱
575
HASS币
0
发表于 2022-7-17 01:52:58 | 显示全部楼层
写得不错,虽然看不懂有什么用,打了这么多字值得给赞,再接再厉。
回复

使用道具 举报

14

主题

262

帖子

2223

积分

金牌会员

Rank: 6Rank: 6

积分
2223
金钱
1956
HASS币
50
发表于 2022-7-17 07:22:50 来自手机 | 显示全部楼层
写的太好了!正是我需要的。我
回复

使用道具 举报

0

主题

215

帖子

2551

积分

金牌会员

Rank: 6Rank: 6

积分
2551
金钱
2336
HASS币
0
发表于 2022-7-17 17:34:01 | 显示全部楼层
支持群友分享,虽然没有用上,但使用下来感觉2410的调教确实比1115省心多了。
回复

使用道具 举报

0

主题

53

帖子

1061

积分

金牌会员

Rank: 6Rank: 6

积分
1061
金钱
1008
HASS币
0
发表于 2022-7-17 22:56:48 | 显示全部楼层
学习了!number里的内容都没法用,可能还是我哪里配置有问题
回复

使用道具 举报

2

主题

73

帖子

406

积分

中级会员

Rank: 3Rank: 3

积分
406
金钱
333
HASS币
0
 楼主| 发表于 2022-7-18 08:09:47 来自手机 | 显示全部楼层
cuiqifan 发表于 2022-7-17 22:56
学习了!number里的内容都没法用,可能还是我哪里配置有问题

去HA里面实体设置,enable一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-23 17:35 , Processed in 0.111117 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表