立创开源:基于ESP32C3的吸顶式人体存在传感器DIY全攻略(含LD2410B+MG5850B双模探测)
立创开源:基于ESP32C3的吸顶式人体存在传感器DIY全攻略(含LD2410B+MG5850B双模探测)
最近在折腾智能家居,想给家里的几个房间装上人体存在传感器,实现人来灯亮、人走灯灭的自动化。市面上的成品要么功能单一,要么价格不菲,要么就是功耗太高不适合常开。于是,我决定自己动手做一个功能全面、能直接接220V市电、还能接入HomeAssistant的吸顶式传感器。
折腾了几个月,终于把这个项目做出来了,今天就把从硬件选型、PCB设计、焊接组装到软件烧录的完整过程分享给大家。这个传感器集成了人体存在雷达、运动传感器、温湿度和光照检测,待机功耗很低,非常适合家庭使用。
重要安全警告与免责声明:本项目涉及220V交流市电,具有致命危险!仅限具备相关电子知识和安全操作经验的个人在充分了解风险后尝试。操作时必须遵守所有安全规范,包括但不限于:断电操作、佩戴护目镜、由他人监护等。 如果你不理解这个警告,或者不具备安全操作高压电的能力,请千万不要尝试!一切风险自负!
1. 项目概览:我们要做一个什么样的传感器?
简单来说,我们要做的就是一个能吸在天花板上的“环境感知中枢”。它主要有四大功能:
- 人体存在检测:用LD2410B毫米波雷达,能精准判断房间里是否真的有人(哪怕你坐着不动),而不仅仅是检测到有动作。
- 人体运动检测:用MG5850B微波雷达,探测范围广,功耗极低,用来“守门”,有人进入区域再唤醒高精度的存在雷达。
- 环境温湿度检测:用SHT40传感器,测量房间的温度和湿度。
- 环境光照检测:用BH1750传感器,感知环境光亮度,可以用来实现“光线暗且有人才开灯”的智能逻辑。
所有这些数据,都会通过Wi-Fi(ESP32C3主控)发送到你本地的MQTT服务器,最终在HomeAssistant里显示和联动。
整个设备由三块PCB板和一个3D打印外壳组成,模块化设计,方便组装和维修。下面,咱们就一步步拆解开来看看。
2. 硬件设计与核心思路
2.1 整体架构:三块板子,各司其职
为了模块化和降低制作难度,我把整个硬件分成了三块独立的PCB:
- 电源板:负责最危险的环节——把220V交流电安全、稳定地转换成5V直流电,给整个系统供电。这块板子用了海凌科官方推荐的AC-DC电源芯片方案,并加了保险丝等安规元件,安全第一。
- 主控板:这是大脑。核心是ESP32-C3模组,负责控制所有传感器、处理数据、连接Wi-Fi和MQTT。板上还集成了LD2410B(存在雷达)和MG5850B(运动雷达)。
- 环境探测板:这块板子相对独立,集成了SHT40温湿度传感器和BH1750光照传感器,通过I2C接口与主控板通信。
三块板子之间用2.54mm间距的排针排母连接,可以灵活插拔。外壳用PETG材料3D打印,设计了角度调节结构,安装时可以对准你想要探测的区域。
2.2 主控板上的“双雷达”低功耗策略
这是本项目的核心设计亮点。LD2410B雷达精度高,但功耗和发热也大;MG5850B雷达功耗极低(微安级),但只能检测运动。
我的策略是让它们俩“协同作战”:
- 平时待机:只开启超低功耗的MG5850B(运动雷达),让它像哨兵一样持续监控。此时LD2410B(存在雷达)和LED指示灯都是断电关闭的。
- 有人闯入:当MG5850B检测到有运动时,主控会立刻给LD2410B和LED供电,启动高精度的人体存在探测。
- 精准判断:LD2410B开始工作,判断人是短暂经过还是持续停留。
- 无人后关闭:当LD2410B确认区域内无人存在后,主控会再次关闭LD2410B和LED的电源,系统回到仅MG5850B工作的超低功耗待机状态。
这样一来,既保证了有人时的探测精度,又极大地降低了无人时的待机功耗和发热。实测主控板在关闭两个雷达和LED的深度待机模式下,平均电流只有1mA左右。
硬件上如何实现电源控制?
- MG5850B:功耗太低,直接用ESP32-C3的一个GPIO引脚输出3.3V给它供电就行。
- LD2410B和WS2812 LED:需要5V供电,且电流较大。我用了一个NMOS管做“低边开关”来控制它们的GND回路。GPIO输出高电平时,MOS管导通,设备得电工作;输出低电平时,MOS管关闭,设备彻底断电。
注意:硬件上的两个大坑!
- NMOS开关不能PWM控制:控制LD2410B和LED电源的MOS管,只能用GPIO输出纯高电平或低电平来开关,绝对不能用PWM信号去控制,否则高频开关会瞬间烧毁LD2410B!
- Wi-Fi信道干扰:MG5850B的工作频率是5.8GHz。如果你家的Wi-Fi路由器也使用5G频段,请务必避免使用149及之后的信道(如149, 153, 157, 161等),否则Wi-Fi数据传输时会严重干扰雷达,导致频繁误报!建议将路由器5G信道固定在36, 40, 44, 48这些低频信道。
2.3 传感器选型与接口预留
- LD2410B(海凌科):性价比很高的毫米波存在雷达模块,支持串口通信,还有手机APP可以配置探测距离、灵敏度等参数,非常方便。因为可以用APP配置,所以我在主控板上没有连接它的串口线,你需要配置时,用USB转TTL工具直接接模块上的引脚即可。
- MG5850B(迈阶电子):超低功耗微波运动传感器,也支持串口配置。考虑到未来可能有网页配置工具,我在它的串口线路上预留了焊盘(R19, R20位置)。当前版本请不要焊接这两个0欧电阻,需要时再短接。
- SHT40 & BH1750:都是I2C接口的传感器,精度和稳定性对于智能家居应用完全足够。它们被集成在单独的环境板上,远离主控板上的发热源(主要是LD2410B),以减少温度测量误差。
3. 动手制作:焊接与组装指南
3.1 物料准备(BOM表之外)
除了在立创EDA导出的标准BOM表里的元件,你还需要额外准备几样东西:
| 物品 | 用途 | 备注/购买线索 |
|---|---|---|
| MG5850B模块 | 人体运动雷达 | 需单独购买,注意是2.8V-4.8V供电版本 |
| M2*6螺丝 | 固定外壳 | 4颗 |
| TYPE-C公头 | 烧录线接头 | 用于制作烧录线 |
| 弹簧卡扣 (2号小号) | 将传感器卡入天花板开孔 | 尺寸约40X16X5.5mm |
| 排母 (2.54间距,塑高3.5) | 可选,用于连接MG5850B模块 | 如果想把MG5850B做成可插拔的 |
| 弯针 (2.54间距) | 可选,用于直接焊接MG5850B | 如果想把MG5850B直接焊在主控板上 |
提示:以上链接仅供参考,你完全可以在淘宝、拼多多等平台自行寻找更优惠的渠道,但务必核对好型号和封装尺寸。
3.2 焊接要点与避坑指南
焊接顺序建议:电源板 -> 主控板 -> 环境探测板 -> 烧录工具线。
1. 电源板这块板子有高压部分,焊接后一定要仔细检查,防止虚焊、短路。焊接完可以用万用表测一下5V输出是否正常,切记不要在接220V的情况下用手触碰板子!
2. 主控板
- ESP32-C3模组:焊接时注意方向,引脚对齐焊盘。可以使用焊锡膏和热风枪,或者用烙铁仔细拖焊。
- LD2410B模块:可以选择直接焊接在主控板上,或者也通过排针排母连接。我选择直接焊接,更稳固。
- MG5850B模块:我强烈建议用排母连接!因为这款模块目前需要用电脑上位机软件配置,做成可插拔的会方便很多。如果你选择焊接,请使用弯针,让模块“躺”在板子上,以降低整体高度。
- 高度控制:无论用什么方式安装LD2410B和MG5850B,它们的顶部高度必须低于环境探测板的安装面,否则最后组装时外壳会盖不上!我的实物图中,MG5850B拆掉了排针的塑料底座并剪短了针脚,就是为了控制高度。
3. 环境探测板这是对新手挑战最大的一块!SHT40和BH1750都是非常小的贴片元件,引脚间距细。焊接时一定要有耐心:
- 使用尖头烙铁和细焊锡丝。
- 可以先给一个焊盘上少量锡,然后用镊子夹住元件对准位置,烙铁加热焊盘使锡熔化,元件落下后移开烙铁。
- 检查是否有桥接(短路),可以用放大镜或手机微距模式查看。
- 我当初就焊坏了好几个,别灰心。
4. 烧录线制作我们需要自制一根USB转串口的烧录线,用于给ESP32-C3下载程序。
- 找一个废弃的USB线,剪断,露出红(VCC)、黑(GND)、绿(D+)、白(D-)四根线。
- 按照下图,将它们焊接到主控板上的“烧录工具”接口:
- 红(VCC) -> 5V
- 黑(GND) -> GND
- 绿(D+) -> IO19
- 白(D-) -> IO18
警告:烧录线正负极千万不能接反!接反会直接烧毁板上的5V转3.3V稳压芯片(LDO),导致整个主控板报废。
3.3 3D打印与组装
外壳文件可以在项目开源页面找到。用PETG材料打印,强度足够。
- 打印注意:外壳内部有一些悬空结构,切片时记得添加支撑。
- 后处理:打印完成后,仔细检查MG5850B和LD2410B雷达透镜正前方的外壳内侧。如果有打印拉丝,一定要用小刀或镊子清理干净。哪怕是很细的拉丝,在空气对流时也可能轻微晃动,被高灵敏度的雷达误认为是微动,导致误触发!
组装步骤按照图示进行即可,注意两点:
- 把环境探测板卡进外壳的卡槽时,如果有点歪,可以用镊子轻轻拨正。
- 最后连接电源板和主控板时,排针方向不要插反!插反可能会让5V电源接到主控板的GPIO18脚上,烧毁芯片。
4. 软件烧录与配置
4.1 搭建开发环境与编译
代码是用乐鑫官方的ESP-IDF(版本5.3.2)框架,在VSCode里开发的。如果你不打算修改代码,只是烧录,可以跳过环境搭建,直接用我编译好的固件。如果想自己编译,需要先安装ESP-IDF和VSCode插件,这个过程网上教程很多,这里不赘述。
拿到源代码后,你只需要修改两个地方:
- Wi-Fi信息:在
main.c或wifi_config.h这样的文件里,找到你的Wi-Fi SSID和密码,替换成你家的。// 示例,具体变量名以代码为准 #define WIFI_SSID "你的Wi-Fi名称" #define WIFI_PASSWORD "你的Wi-Fi密码" - MQTT服务器信息:找到MQTT配置部分,填入你本地MQTT服务器的IP地址、端口、用户名和密码。
// 示例,具体变量名以代码为准 #define MQTT_BROKER "192.168.1.100" // 你的MQTT服务器IP #define MQTT_PORT 1883 #define MQTT_USER "mqtt_user" #define MQTT_PASSWORD "mqtt_password"
修改完成后,在VSCode里点击编译即可。
4.2 烧录固件到ESP32-C3
烧录前,确保烧录线已正确连接。
情况一:全新的ESP32-C3模组直接通过TYPE-C线连接电脑和烧录口,电脑识别到串口后,在VSCode或乐鑫的Flash Download Tools中选择对应端口,点击烧录即可。
情况二:已有固件或电脑无法识别如果板子已经有程序在跑,或者电脑完全不识别串口,你需要让ESP32-C3进入“下载模式”。
- 找到主控板上的IO9引脚和GND引脚。
- 用一根杜邦线或镊子,将IO9 和 GND 短接。
- 在短接的状态下,给板子上电(插上烧录线)。
- 此时再点击烧录按钮,程序就能顺利下载了。
- 烧录完成后,务必断开IO9和GND的短接,并重新上电,设备才会正常运行。
4.3 OTA网页升级(成品后的福音)
固件里已经内置了一个简单的网页升级(OTA)功能。这意味着一旦你的传感器安装到天花板上并成功联网,以后再想更新程序,就再也不用拆下来接烧录线了!
你只需要:
- 知道设备的IP地址(可以在路由器后台查看)。
- 在浏览器中输入
http://[设备IP]/update。 - 在网页上选择你编译好的新固件文件(.bin文件),点击上传即可。
这对于后期功能迭代和Bug修复来说,简直太方便了。
5. 部署、调试与注意事项
组装好、烧录完程序后,就可以通电测试了。接上220V市电(再次提醒,操作务必小心!),设备会自动启动,连接Wi-Fi和MQTT。
在HomeAssistant中,通过MQTT自动发现功能,你应该能看到名为ESP32C3_Sensor的设备,并包含人体存在、运动、温度、湿度、光照等多个实体。将它们添加到你的仪表盘,就可以开始设计自动化了,比如“当客厅有人且光照低于100 lux时,打开客厅灯”。
最后几个重要的提醒:
- 温湿度读数校正:LD2410B雷达工作时会发热,这个热量会严重影响紧挨着它的SHT40传感器的读数。目前的代码没有处理这个问题。一个实用的方法是,在软件逻辑中,在LD2410B开启期间以及关闭后的10-30分钟内,忽略或标记温湿度数据为“不可用”。这个功能需要你后续在代码中自行实现。
- 功耗与发热:虽然采用了双雷达协同的低功耗设计,但LD2410B工作时本身还是会发热。这是正常现象,只要确保外壳通风良好即可。待机时整机功耗很低,发热可以忽略。
- 雷达调试:LD2410B和MG5850B的最佳探测距离、灵敏度都需要根据你的实际安装环境(房间大小、家具布局)进行微调。请务必使用它们各自的官方配置工具(手机APP或电脑上位机)进行设置,以达到最好的探测效果,避免误报和漏报。
这个项目是我的第一个开源硬件设计,从画电路图、设计PCB、焊接调试到写代码,每一步都踩了不少坑。特别是环境板上那些小贴片,焊得我眼花缭乱。代码部分也主要靠AI辅助,可能结构比较臃肿,还有很多可以优化的地方。把它分享出来,是希望能给同样想DIY智能家居传感器的朋友一个可行的参考方案。如果你有更好的想法或发现了代码中的问题,非常欢迎一起交流改进。
