HID-Compliant UPS with Arduino
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
关于这个项目
我最近一直在玩 Arduino,看看它可以为我做什么。我有一个旧的“虚拟”UPS,它无法向主机报告其状态,因为它没有 USB 端口。我想到的项目之一是在 Arduino 板的帮助下为虚拟 UPS 创建“大脑”。这种 UPS 大脑的目的是通过测量剩余电池容量、充电/放电状态、电池电流、电压等来读取内部 UPS 状态。所有这些读数应通过 USB 接口传递,并由主机操作系统解释以与使用商用智能 UPS(例如,由 APC)相同的方式对计算机进行操作。
我不想为我的定制 UPS 开发硬件驱动程序而烦恼,我希望它是“即插即用”的,所以我决定,经过一些研究,根据这个规范实现一个符合 HID 的接口。 HID 代表“人机接口设备”,最初是为键盘、鼠标、操纵杆和类似的人机输入设备设计的,但最近已扩展到支持电源设备,如 UPS、电池和充电器,这些设备可以从使用 HID 中受益与主机进行智能通信的标准。我的下一步是了解一些 Arduinos,如 Leonardo、Pro Micro 和他们的克隆产品可以将自己作为 HID 键盘或鼠标呈现给主机。在对 Arduino HID 库、键盘库和大量谷歌搜索进行了一些分析之后:) 我编写了自己的 HIDPowerDevice 库。您将在 GitHub 自述文件中找到有关如何设置和使用它的一些详细信息。
我的测试实验室非常简单,包括我的笔记本电脑、连接到笔记本电脑的 Arduino Pro Micro(在我的例子中是 Macbook,但它也可以在 Windows 10 和 Ubuntu 上运行)通过 USB、一个面包板和一个开关(我实际上使用了一个而是跳线)。我还添加了几个用于诊断的 LED 和一个电位计来模拟充电水平。示意图如下:
图>S1 将 Arduino Pro Micro 的引脚 4 连接到地面,从而模拟 UPS 使用电池供电。当 S1 关闭时,Arduino 向 PC 报告它正在“充电”。
图>由于我的“UPS”符合 HID 标准,Windows 10 也将 Arduino 识别为 HID 电池,并且剩余容量百分比显示正确:
图>有一个重要的限制需要提及 - Windows 10 确实允许系统中有多个电池,并且所有电池都可以显示在托盘中。但是,电池必须以相同的模式报告其状态(HID 规范支持 maH、mwH 和百分比),但大多数 UPS 仅报告充电百分比。如果您的系统中已经有 ACPI 电池(假设您正在笔记本电脑上进行测试),那么百分比可能无法正确反映。
同样,UPS 也可以在 Linux 上运行,但可能需要一些额外的配置,请参阅自述文件。
图> 图>2021 年 6 月 12 日更新 在收到有关 Synology 支持的几个查询(Synology 未将 Arduino 板识别为符合 HID 的 UPS 设备)后,我决定对此进行一些研究。问题恰好出在 Synology 发行版使用的网络 UPS 工具 (NUT) 中 - 默认情况下,所有 HID 兼容的 UPS 型号都假定 USB 接口为 0,但 Arudino Leonardo/Pro Mini 将自己作为可访问 UPS 的复合设备宣传到 USB 端口在接口 2 上。中断端点也有类似的问题。可以在此处找到有关此问题的更多技术细节。
带有 Arduino 支持的修改后的 NUT 库在这里。您可以从源代码构建它并安装在您的目标平台(Synology 或任何其他兼容的 Linux 发行版)上。请注意,这仍处于试验阶段,因此强烈建议您创建当前 NUT 文件的备份。
享受! :)
代码
HIDPowerDevice 源代码
https://github.com/abratchik/HIDPowerDevice示意图
arduino_ups_mlvhJQLrSZ.fzz制造工艺