本帖最后由 dscao 于 2026-5-1 01:32 编辑
【DIY】百元内自制 24W 12V UPS:集成 ESP32 电量监控与物理防错滑盖设计
前段时间有一天同事说内网的几个服务打不开,几个都是我之前部署在群晖里的服务。远程检查发现群晖进入安装页面了,奇怪了。没人动怎么会恢复出厂设置了?再发现有个邮件通知:“系统检测到在 存储空间 1 上的硬盘 1 发生异常断电。有关更多信息,请进入存储管理器 > 存储,并参考对应存储空间的建议。若不想再收到此消息,请进入存储管理器 > HDD/SSD,选择一个硬盘。然后单击操作 > 配置写入缓存,取消勾选启用写入缓存,再单击应用。来自 NAS……”
还好重新安装后数据都还在。虽然现在一年停不了一次电,停一次一般很快就来了,但因停电弄坏了硬盘丢了数据问题就大了,让老板看情况买个ups吧。
经此一事,想到研究一下diy-ups,也可以学习一下3D打印的玩意儿,先上makerworld参考别人的方案,试了好几个最终发现这些diy方案都没有通知系统电池状态的功能。于是想到esphome,应该可以实现需要的功能,还可以后期扩展更丰富功能。
自己主用的是j4125小主机,整机功耗平时约15W。还有oect功率不到10W,某宝上找到的ups电路板试了好几款目前只发现这款24W 12V 的效果比较好,是一种真正的ups方案,不是那种边充边放电压随电池变动的方案。暂时就用这款来玩了,实用性到底如何要等以后才知道了。
基于 2S 锂电池方案 集成了 ESP32 监控 和 INA226 高精度电量采集 的,计划再加两个输出端的继电器开关控制。
🛠️ 硬件清单与成本 (BOM)
总硬件成本控制在百元左右:
| 零件名称 |
规格备注 |
参考价格 |
| UPS 控制主板 |
24W 1A 新款 2S V4.0CN (12V/15V)1个 |
¥13.5 |
| 监控模块 |
INA226 高精度双向监控 R010 版本 1个或多个 |
¥5.8 |
| 主控板 |
ESP32-S3 SuperMini (WiFi/蓝牙)1个 |
¥14.9 |
| 降压模块 |
Mini560 (用于 ESP32 稳定供电) 1个 |
¥2.75 |
| USB母座 |
USB-A 母座 (焊线式,改装输出) 1个 |
¥2.6 |
| 直流母座 |
DC022D 5.5*2.1mm (输入/输出) 3个 |
¥4.75 |
| 电芯 |
18650 或 21700 锂电池 (2S 方案) 2至10节 |
约 ¥20 |
| 辅助材料 |
5mm LED、0.3平硅胶线、3D 打印外壳 |
约 ¥10 |
| MOS+光耦 |
PC817C 2个+IRF9540N 2个 |
约 ¥5 |
⚡ 核心设计思路
这款 UPS 不仅仅是一个后备电源,它还具备“智能化”属性:
- 高精度监测:采用 INA226 模块,通过 I2C 接口实时读取电池的电压、电流和功率。如果用多个的话可监控输入输入输出的电压电流和功率,我感觉监控电池就够用了。
- 智能联动:由于使用了 ESP32-S3,可以轻松接入 Home Assistant (ESPHome)。停电时可第一时间推送告警,甚至控制 NAS 正常关机。
- 提供5V电源:通过 Mini560 高效降压模块为 5V供电给ESP32,顺带提供5V供电输出。
- 电池通断开关:原本是不应该有这个开关的,误操作可能损坏主板。当时考虑如果长期不使用放在那esp32的功耗不小加个开关可以关闭电池。
- 用电设备是否在线探测:esphome判断设备是否在线,通过tcp访问回应来判断。分别填写设备1和设备2的IP地址和端口,windows=445/inux=22/web=80/PVE=8006/群晖=5000 ,具体要确认设备已经开放的端口。
- 智能通断输出:依托esphome的强大功能,市电断开后通知设备,设备按自动化或设置关机。关机后ups判断设备离线5分钟以上关闭输出,设备无电。当市电恢复后,输出打开,设备来电自启触发开机。
⚠️ 惨痛教训:关于 XR2861 芯片烧毁
在测试阶段我遇到了一个严重的硬件损坏:在外接电源供电状态下,想看电压变化,脑子晕了随手打开开关连接电池,导致 UPS 主板上的 XR2861 芯片瞬间冒烟烧毁。 这可能是由于电源与电池间的压差在接通瞬间产生了过大的涌浪电流导致的。只好重新下单,后又下一单备用。另外为此,我重新设计了一个物理锁死机构。
构思:物理联动防错开关滑盖
为了从根本上杜绝“带电操作电池”的风险,我在 3D 打印外壳上设计了一个带滑盖的开关仓:
- 设计逻辑:只有在拔掉外接 DC 电源插头的情况下,侧面的滑盖才有空间移动。
- 安全保护:电池开关隐藏在滑盖内。只要插着电源,滑盖就被插头挡住,无法操作开关。
注意事项:
组装好之后最后连接电池,连接电池前和上电前一定要再次用万用表检查线路是否有接错的,如果接反了可能烧坏电路板,或损坏用电设备。
esphome 问ai就可以搞定,只是优化还是折腾了好几天。一切都完成了,想起来我的设备很多情况下人不在旁边。如果市电断了,系统接到通知,在一定电量是自动关机了。如果电池电量还没耗尽,市电恢复,小主机就不会因为来电而启动了,还要跑过去按一下开机键,这完全不可接受。于是想到给输出加上继电器,当市电断开时输出功率持续小于1w可判断设备已经关机,则关闭输出,市电恢复时自动进行一次打开输出的操作。
稳定性有待测试,想法是这些,如果能找到功率达到100W以上的成品ups控制主板就好了,这个24W适用范围太有限了。
继电器太大了,改用mos+光耦方式(PC817C +IRF9540N)控制输出的通断。目前空间有点挤之前没规划后补加入只加了1路输出开关,目前效果还可以。
搞到这一步已经历时三个多星期了,不容易啊,记录加分享一下。
效果展示:
|