ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

24G毫米波雷达如何实现智能家居人体存在检测:原理、接入与调参避坑

24G毫米波雷达如何实现智能家居人体存在检测:原理、接入与调参避坑 你是不是也遇到过这种情况大晚上窝在沙发里刷手机头顶的智能灯“啪”地灭了——不是因为睡着太久是因为红外人体传感器觉得这屋没人了。后来我把全屋的检测方案换成24G毫米波雷达才算把这毛病根治。这篇就聊聊为什么智能家居的“人体存在检测”必须靠毫米波雷达以及我在实际接入开源HA系统、基于STM32做嵌入式方案时踩过的坑和调参经验。我最早接触智能家居人体检测用的也是几十块钱的红外PIR传感器装上那会儿觉得挺灵敏人一走近灯就亮。但用久了发现一个致命问题它只对“移动的人”敏感。我坐在书桌前写东西手不动、身体幅度小三五分钟后灯就灭了在卧室躺着刷手机明明是活生生的人系统判断为“无人”。后来换了一批更贵的红外传感器加了灵敏度延时情况好一点但本质上还是治标不治本。真正解决这个问题的是24G毫米波雷达。这篇内容涉及怎么理解24G雷达的检测原理、怎么把它接到智能家居里包括HA系统、STM32方案、以及实际部署时那些容易踩坑的参数调整适合正在折腾全屋智能、或者在做嵌入式项目的朋友参考。1. 为什么24G毫米波雷达成了智能家居“人体存在检测”的新宠1.1 红外传感器最大的硬伤静止就等于“没人”先说说我为什么抛弃了红外PIR。PIR的工作原理是热释电效应传感器里有两片热释电元件当人体辐射的红外线经过菲涅尔透镜在元件上形成变化的热场时才会输出触发信号。换句话说它检测的是“红外辐射的变化”不是“有没有人”。人体一旦静止红外辐射场就不变了传感器自然认为环境恢复了平静。你可以把它理解成一个只对“动”敏感的门卫只要你不动他就当你走了。这在家里的很多场景下非常离谱上厕所超过五分钟灯灭了坐沙发上看电视手一抬灯灭了在床上睡觉翻身不及时灯也灭了。有人会加长延时来缓解比如设置人体离开后5分钟再关灯。但这样又带来新问题真的人离开了灯还要白白亮五分钟人一直不动灯还是会灭。所以PIR本质上只适合做短时效的“有人移动检测”没法满足智能家居“人在灯亮、人走灯灭”的核心需求。1.2 24G毫米波雷达怎么破解“人坐着灯灭了”24G毫米波雷达解决的是“人体存在检测”问题。它发射24GHz频段的电磁波波长大致在12.5mm这个波长足以感知人体非常细微的动作——包括呼吸时胸腔的起伏。我最初也怀疑过人坐在那儿刷手机身体明明没怎么动雷达怎么知道有人在后来看串口波形才明白雷达检测的是多普勒频移和微多普勒特征。人即使整体不动呼吸和心跳也会让胸腔产生毫米级的周期性位移这个位移会让反射波的相位发生变化雷达处理器把这段微弱的相位变化提取出来就能判断“这里有一个生命体”。所以24G毫米波雷达输出的是三态结果有人运动、有人微动、有人静止并且能输出目标的距离和能量。这才叫真正意义上的人体存在检测。1.3 实际场景盘点哪些智能联动离不开“存在检测”我把自己家里改完雷达之后的联动逻辑整理了一下这几个场景是PIR无论如何做不到的书房联动我在电脑前写东西手可能长时间不动但灯和显示器背后的氛围灯一直保持开启状态离开5分钟后自动关灯、关排插。卫生间联动人在里面坐着玩手机灯不会灭排气扇也不因为“没人”而自动停。卧室睡眠监测半夜人睡着呼吸带来的微动依然能被识别系统不会把房间判定为无人而触发安防报警。全屋无人自动关电只有所有房间都判定为无人系统才执行全屋断电逻辑这个在PIR时代完全没法做。说白了人体存在检测是智能家居从“自动化”走向“场景感知”的关键一环。没有它所谓智能就只是“传感器触发开关”而已。2. 原理不等于玄学24G毫米波雷达是如何“看见”静止人体的2.1 多普勒效应与呼吸微动毫米波雷达的核心逻辑先从多普勒效应聊起这个大家都熟悉救护车朝你开过来声音变尖驶过去声音变低沉。声波如此电磁波也一样。雷达发射电磁波遇到运动目标反射回来回波频率和发射频率之间会有一个差值叫多普勒频移。频移的大小和目标的径向速度成正比公式是 f_d 2v/λ。λ是波长24G雷达约12.5mm。目标速度只要稍微有一点变化频移就会被检测到。问题是人在静止状态下整个身体的径向速度几乎是零那怎么检测关键就藏在“呼吸”里。成年人呼吸时胸腔起伏的位移大概在0.5到2mm这个位移虽然小但已经达到波长量级了会带来不可忽略的相位变化。我做过一个简单估算2mm位移在24G雷达下对应的相位变化大概是4πd/λ算出来约2弧度这个量级完全能被雷达的数字信号处理部分识别出来。所以雷达检测到的是“呼吸带来的周期性微动”而不是笼统的“身体动了”。2.2 FMCW调频连续波测距测速的底层机制光靠多普勒只能判断有没有微动要判断“人在哪个位置、距离多远”还需要测距能力。24G雷达普遍用FMCW也就是调频连续波。它的发射方式可以理解成把电磁波的频率随时间线性拉高形成一个个锯齿波。信号碰到目标反射回来后因为传播需要时间同一时刻的发射频率和接收频率会有一个差值叫差频。差频和距离是线性关系公式是 f_b 2BR/(cT)其中B是调频带宽T是调频周期c是光速。测出差频就能算出目标距离。所以24G雷达输出的不只是“有人/没人”还有“目标离我多远”。我在HA里能看到“人体距离”这个实体人从客厅门口走到沙发距离从3.2米慢慢变成1.1米这个数据在自动化里可以做不少文章比如走近台灯时自动调亮离远时调暗。2.3 微动识别算法怎么区分“真人”和“干扰源”调完雷达之后最头疼的问题是误报尤其是把窗帘、风扇、宠物当成“人”。这就要靠雷达内部的微动识别算法来兜底。不同厂家的算法流程不同但思路基本一致先做FFT把目标从距离维度上拆开得到不同距离门上的能量分布然后再看每个距离门上的能量随时间的变化是否稳定。人体的呼吸微动是有规律的周期性信号频率大概在0.2到0.5Hz而窗帘被风吹、风扇转动、树叶晃动这种干扰它们的频率特征和稳定性都不一样算法可以把它们分类剔除。我实际体验下来当前主流的24G模块基本都能做到“人在静止状态下持续判定存在”同时对窗帘、宠物误报的控制也在可接受范围。不过有个前提安装位置不能正对干扰源太近否则再好的算法也没辙这点后面专开一节细说。2.4 24G、60G、77G怎么选参数对比与选型建议聊到选型很多朋友会问为什么不用60G或者77G这里我直接列个对比表方便大家判断频段波长距离分辨率穿透性典型成本主要应用24G约12.5mm一般米级较好可穿薄墙低几十到百来块智能家居存在检测、工业安防60G约5mm高厘米级一般对非金属穿透略差中等手势识别、屏保唤醒、车内感知77G约3.9mm高一般高车载雷达、自动驾驶智能家居场景里我强烈建议优先考虑24G理由有三点一是技术方案成熟市面上多数人体存在传感器用的都是它踩坑资料多二是成本便宜几十块钱的模块就能实现完整的人体存在检测三是24G波长长穿墙能力相对好适合装在室内跨越门窗做区域检测。60G虽然距离分辨率更高能做细微手势但价格和功耗都上去了普通智能家居场景属于“杀鸡用牛刀”。77G主要面向车载场景功耗和成本也不适合家庭。3. 手把手实操把24G毫米波雷达接入智能家居系统3.1 选型与硬件准备雷达模块、主控和电源怎么搭我自己用过的模块里比较有代表性的就是海凌科的HLK-LD2410系列出厂默认工作在串口模式同时还有一个GPIO输出引脚另外它的固件支持通过串口改参数。市面上还有其他品牌24G模块原理类似但协议各有差异使用前一定先看对应数据手册。硬件准备方面最基础的一套是这样的24G雷达模块一块我用的LD2410B支持5V供电一个支持串口或者PWM输出的主控比如ESP32开发板或者STM32F103C8T6一个继电器模块如果直接控制220V灯具外壳和杜邦线若干如果是ESPHome方案还需要一台运行HA的设备接线前一定要确认雷达模块的供电电压。LD2410B是5V供电串口电平是3.3V可以直接接ESP32和大部分STM32但如果你的板子是5V电平最好串一个电阻分压或者用电平转换模块避免烧串口。3.2 GPIO模式最简单的人来灯亮改造如果你只想快速体验一下不关心距离和人体状态数据那用GPIO模式就够了。把雷达的OUT引脚接到单片机任意GPIO或者直接接继电器模块的IN供电接5V共地。人在检测范围内活动时OUT输出高电平判定无人延时结束后OUT输出低电平。我当时测试时用LD2410的OUT引脚接了一个光耦继电器继电器控制宿舍的台灯实现了“人坐定亮灯、人走灯灭”。但这里要提醒一下GPIO模式输出的是“是否存在目标”的判断结果不带距离和运动状态信息同时参数也只能靠出厂默认不太灵活。如果是要做全屋智能还是得走串口模式。3.3 UART数据模式读取距离和人体状态串口模式才是24G雷达的完全体。我把雷达TX/RX接到ESP32的串口引脚用115200波特率、8位数据、无校验、1位停止位去读就能持续收到数据帧。不同厂家的帧格式不一样但基本思路是一样的帧头 长度 数据段 校验。以我记得的LD2410标准帧为例帧头是0xAA 0xAA之后跟着长度字段数据段里包含目标状态无人、有人运动、有人微动/静止、运动目标距离、运动能量、静止目标距离、静止能量等字段最后是校验和。解析的关键是写状态机别一上来就按固定长度收。我建议用一个字节一个字节地处理先找帧头再根据长度字段收完整个帧最后校验这样在串口数据有粘包、断包的时候都能正确对齐。收到数据后我一般会把“目标状态”和“静止距离”单独拎出来用来驱动自动化逻辑。3.4 接入开源HA系统用ESPHome 20分钟完成配置如果你跟我一样用开源HA系统做全屋智能那接入24G雷达最省事的方式就是ESPHome。ESPHome在较新版本里已经内置了LD2410组件不用自己写解析代码。我当时的配置大概是这样的uart: rx_pin: GPIO16 tx_pin: GPIO17 baud_rate: 115200 binary_sensor: - platform: ld2410 has_target: name: 客厅人体存在 sensor: - platform: ld2410 moving_distance: name: 客厅移动距离 stationary_distance: name: 客厅静止距离 moving_energy: name: 客厅移动能量 stationary_energy: name: 客厅静止能量刷进去之后HA里会自动出现一个人体存在实体以及距离、能量等传感器。然后我就在自动化里配了一条很典型的规则当“客厅人体存在”状态从关闭变开启且光照传感器数值低于阈值就打开客厅主灯当“客厅人体存在”状态变为关闭延迟5分钟后关灯。这样配置完之后人坐在沙发上不动弹灯也不会灭真的就是“感知到人存在”了。需要注意的是ESPHome的LD2410组件不是所有版本都有建议把ESPHome升级到2023年5月之后的版本再试。3.5 基于STM32的智能家居集成方案除了接HA玩生态很多朋友做项目会选STM32做主控这也非常常见尤其是在做嵌入式课程设计或者产品原型的时候。我实测过STM32F103C8T6接LD2410接线很简单雷达TX接PA10、RX接PA9供电接5V串口配置成115200-N-1。主控这边要写串口解析。推荐用逐字节状态机方式我给出一个简化版示例逻辑#define FRAME_HEADER 0xAA #define FRAME_LEN_OFFSET 2 uint8_t rx_buf[64]; uint8_t rx_len 0; uint16_t frame_len 0; uint8_t frame_started 0; void uart_rx_byte(uint8_t byte) { if (!frame_started) { if (byte FRAME_HEADER) { rx_buf[0] byte; rx_len 1; frame_started 1; } return; } if (rx_len 1) { rx_buf[1] byte; rx_len 2; if (byte ! FRAME_HEADER) { frame_started 0; } return; } if (rx_len 2) { frame_len byte; } else if (rx_len 3) { frame_len | (byte 8); } rx_buf[rx_len] byte; rx_len; if (frame_len 0 rx_len frame_len 4) { parse_radar_frame(rx_buf, rx_len); frame_started 0; frame_len 0; rx_len 0; } }收到完整帧后把目标状态字段和静止距离字段提取出来。状态为“有人”时置高一个GPIO去控制继电器开灯状态为“无人”时启动一个定时器倒计时结束后关灯。做到这一步一个基于STM32的人体存在检测节点就完成了后续还可以通过NB-IoT、Wi-Fi或者CAN总线把状态上报给更上层的系统。4. 实测避坑误报、漏报和参数调优实录4.1 安装位置不对再贵的雷达也会误报我调测期间踩过最大的坑就是安装位置。第一次我把雷达放在客厅电视柜上正对着阳台推拉门结果一到傍晚太阳把窗帘晒热、风一吹窗帘摆动雷达就判定“有人”灯自己亮了。后来又试过把雷达放在墙角结果它正对着走廊人在走廊外走动隔着一层薄墙也能被雷达捕捉到客厅灯又乱亮。24G雷达的穿透性虽然不算强但普通的石膏板墙和木门是挡不住的所以安装时不要让它正对家里经常有人走动的走廊或者门外。我自己最终确定的位置是房间天花板的角落雷达斜向下45度角覆盖主要活动区域同时避开窗户和门。这样既不会漏检也不会因为窗帘和走廊误报。安装高度建议离地1.2到1.5米如果是吸顶安装尽量选带旋转底座的支架方便调整角度。4.2 四个关键参数灵敏度、无人延迟这样调24G雷达一般不推荐直接出厂默认值用到底尤其在不同房间大小、不同布局下误报漏报的表现差距很大。以LD2410为例主要通过串口指令配置内部的灵敏度门限和无人判定延迟。我把调参经验整理一下这几个参数是需要重点关注的运动灵敏度检测运动目标的门限。设太高人的微小动作容易被忽略设太低窗帘摆动、蚊虫飞过都可能触发。静止灵敏度微动灵敏度检测静止人体呼吸的门限。这个是存在检测的核心建议先保持默认等运动灵敏度调好后再微调。无人判定延迟目标消失后多长时间才判定为无人。我一般设置在30秒到3分钟之间客厅取30秒卧室取3分钟。检测距离上限超过该距离的目标直接忽略适合用来规避门外和窗外运动。调参的方法很直接接上串口打开串口调试工具盯着数据看。人从检测区域的远端慢慢往里走记录运动距离和能量值再坐下不动看静止能量值。然后把门限设在实际值的1.5倍左右留出余量既不会漏报也不容易被干扰源触发。提示调节参数时务必在“实际使用环境”下做不要在库房里调好了直接搬回家用。房间大小、家具布局甚至地毯颜色都会影响反射能量。4.3 常见问题速查表误报、漏报、串口不通实操中大家遇到最多的问题基本就这三类我整理成一张排查表方便直接对着查问题现象可能原因解决思路人没动灯自己亮雷达正对窗帘、风扇、窗户、走廊调整安装角度降低运动灵敏度开启距离上限人坐着不动灯灭了静止灵敏度太低或无人延迟太短提高静止灵敏度把无人延迟调到30秒以上人在门外走动屋里亮灯24G雷达穿透薄墙检测到门外目标调整安装位置设置最大检测距离串口没有数据TX/RX接反或者没有共地检查接线确保雷达TX接主控RX且电源共地读到的数据偶尔乱码供电电压不足或电源纹波大换稳压电源不要用劣质USB供电模块多台雷达互相干扰状态跳变雷达之间距离太近载波相互干扰拉开设备间距尽量错开朝向避免对射我遇到过最隐蔽的问题是供电不足。某次雷达忽然频繁重启串口数据时有时无测了一下才发现是那根USB线压降太大5V供电实际到模块只有4.2V。换成稳定的电源之后问题立刻消失。4.4 多雷达部署与全屋联动注意事项如果你打算做全屋智能不止装一个雷达我这里还有几条亲测有效的建议相邻房间的雷达不要面对面安装否则天线方向图重叠可能出现两套设备同时检测到同一个目标导致自动化逻辑互相打架。我一般会让相邻房间的雷达朝向相反方向或者上下错开高度。多雷达的数据在HA里建议做“或逻辑”联动处理。比如卫生间有人是A雷达卧室有人是B雷达全屋无人关电的逻辑要写成所有区域都没有人而不是某个雷达没有人。这点在node-red里实现起来很方便但在HA的自动化默认模式下容易写错建议用模板或者group把所有存在检测实体组合起来。最后是关于自动化流程的一个小建议灯的开和关不要绑定同一个触发条件。我之前图省事直接用“目标状态从开启变关闭”去关灯结果人坐在床边刷手机雷达短暂判断丢失灯就灭了过两秒又亮体验非常差。后来改为“关闭状态持续30秒以上才执行关灯”问题就没了。这种防抖思路虽然简单但在实际使用中非常关键。我个人在实际操作中最大的体会是24G毫米波雷达不是万能神器它解决了红外PIR“静止漏报”的痛点但引入了一系列新的调参和位置工程问题。如果你正处于改造阶段我建议别急着一次装全屋先拿一个房间试水用串口挂着看一段时间数据摸清这个房间的底噪再定参数这样后面大规模部署会省心得多。
返回列表