Arduino Pro Micro 实现 HID UPS:将"哑"电源升级为 USB 智能后备电源
组件与物料
| 组件 | 数量 | 备注 |
|---|---|---|
| Arduino Pro Micro | 1 | Leonardo 等支持 HID 的板卡均可 |
| 面包板 | 1 | |
| 杜邦线 | 1 |
项目简介
我手头有一台老旧的"哑"UPS,无 USB 接口,无法向主机汇报状态。我想用 Arduino 为其添加"大脑":读取电池剩余容量、充放电状态、电流电压等,并通过 USB 以 HID 电源设备规范与主机通信,实现即插即用,无需自定义驱动。
HID(人机接口设备)原为键鼠手柄设计,现已扩展支持 UPS、电池、充电器等电源设备。Arduino Leonardo、Pro Micro 等原生支持 HID 键鼠模拟,经研究 Arduino HID 库与键盘库,我编写了 HIDPowerDevice 库(详见 GitHub README)。
测试平台
笔记本 + Arduino Pro Micro (USB) + 面包板 + 拨码开关(模拟跳线) + 电位器(模拟电量) + 诊断 LED。


开关 S1 连接引脚 4 至 GND,模拟 UPS 切换至电池供电;S1 断开时上报"充电中"。

跨平台兼容性
Windows 10:识别为 HID 电池,任务栏正确显示剩余电量百分比。

注意:Win 10 支持多电池,但所有电池必须用相同单位(mAh/mWh/百分比)上报。若系统已有 ACPI 电池(如笔记本自带),百分比可能显示异常。
Linux:同样工作,可能需额外配置(见 README)。

Synology/NAS 兼容性更新 (2021-06-12)
收到反馈 Arduino 在 Synology 上不被识别为 HID UPS。经排查,Synology 使用的 Network UPS Tools (NUT) 默认假设 UPS 在 USB 接口 0,但 Leonardo/Pro Micro 为复合设备,UPS 功能在接口 2。中断端点也有差异。技术细节见此处。
修改版 NUT 库(含 Arduino 支持):此处。需自行编译安装,属实验性质,强烈建议先备份原 NUT 文件。
代码
HIDPowerDevice 源码: https://github.com/abratchik/HIDPowerDevice
原理图
文件: arduino_ups_mlvhJQLrSZ.fzz (Fritzing 格式)
制造工艺
- Satellite CCRMA 套件:构建传感器驱动的音频效果器
- K30 CO₂ 传感器:室内空气质量实时监测
- 基于 1Sheeld 与 Arduino 的盲聋人士沟通辅助系统
- 智能存钱罐:Arduino Nano 控制硬币识别器实现余额显示
- Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
- DFRobot 电容指纹传感器 (ID809) 接入 Arduino/ESP8266 完整教程
- 基于 Arduino Mega 与 Nextion 显示屏的交互式气象站
- Arduino Mega 驱动 Wii Nunchuk 控制 6 自由度机械臂
- Arduino UNO + 以太网盾板实现低成本太阳辐射测量仪(热电堆原理)
- 紧凑型Arduino雷达系统:HC-SR04超声波传感器配1.8英寸显示屏
- Arduino 合成乐音:从零实现 88 键钢琴全音域
- TinyML 咳嗽检测:Arduino Nano 33 BLE Sense 实现早期流感筛查