Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

HID-UPS на Arduino: превращаем «глупый» ИБП в умный USB-устройство

Компоненты и материалы

Arduino Pro Micro ×1
Беспаечная макетная плата ×1
Перемычки ×1

О проекте

У меня был старый «глупый» ИБП без USB-порта, который не мог сообщать компьютеру о своем состоянии. Задача: создать «мозги» для ИБП на Arduino, чтобы он считывал заряд батареи, режим заряда/разряда, ток, напряжение и передавал это по USB так, чтобы ОС воспринимала его как обычный умный ИБП (например, APC).

Не желая писать драйверы, я выбрал HID-интерфейс (Human Interface Device). Изначально для клавиатур/мышей, стандарт HID теперь поддерживает устройства питания (UPS, батареи, зарядные устройства), обеспечивая «plug-and-play» совместимость.

Arduino Leonardo, Pro Micro и их клоны могут представляться как HID-клавиатура или мышь. Изучив библиотеки HID и Keyboard, я написал свою библиотеку HIDPowerDevice. Детали настройки и использования в README на GitHub.

Тестовая стенда

Простая схема: ноутбук, Arduino Pro Micro по USB, макетная плата, переключатель (перемычка) для симуляции перехода на батарею, пара LED для диагностики и потенциометр для симуляции уровня заряда.

HID-UPS на Arduino: превращаем «глупый» ИБП в умный USB-устройство

Переключатель S1 соединяет пин 4 Pro Micro с землей — симуляция работы от батареи. Когда S1 открыт — Arduino сообщает «заряжается».

HID-UPS на Arduino: превращаем «глупый» ИБП в умный USB-устройство

Результат в Windows 10

Система распознает Arduino как HID-батарею и корректно показывает процент заряда в трее.

HID-UPS на Arduino: превращаем «глупый» ИБП в умный USB-устройство
HID-UPS на Arduino: превращаем «глупый» ИБП в умный USB-устройство

Важное ограничение: Windows 10 поддерживает несколько батарей, но все должны сообщать статус в одном формате (мАч, мВтч или проценты). Большинство ИБП выдают только проценты. Если в системе уже есть ACPI-батарея (ноутбук), проценты могут отображаться некорректно.

Работа в Linux

ИБП работает и в Linux, но может потребоваться дополнительная настройка (см. README).

HID-UPS на Arduino: превращаем «глупый» ИБП в умный USB-устройство
HID-UPS на Arduino: превращаем «глупый» ИБП в умный USB-устройство
HID-UPS на Arduino: превращаем «глупый» ИБП в умный USB-устройство

Обновление 12.06.2021: Поддержка Synology

После запросов по Synology (Arduino не определялся как HID-UPS) я исследовал проблему. В Network UPS Tools (NUT), используемом в Synology, по умолчанию ожидается USB-интерфейс 0, но Arduino Leonardo/Pro Micro представляется как композитное устройство с UPS на интерфейсе 2. Также есть нюансы с прерывающими эндпоинтами.

Модифицированная библиотека NUT с поддержкой Arduino: GitHub. Собирается из исходников, устанавливается на целевую платформу. Экспериментально — обязательно бэкап текущих файлов NUT.

Код

Исходный код HIDPowerDevice: https://github.com/abratchik/HIDPowerDevice

Схемы

arduino_ups_mlvhJQLrSZ.fzz

Производственный процесс

  1. Создание аудио-эффектов, управляемых датчиками, с набором Satellite CCRMA
  2. Датчик CO2 K30: мониторинг качества воздуха в реальном времени на Arduino
  3. Устройство для общения глухосліпых людей с помощью 1Sheeld и Arduino
  4. Умная копилка: управление монетоприёмником на Arduino Nano
  5. Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
  6. Интеграция ёмкостного сканера отпечатков DFRobot с Arduino или ESP8266
  7. Интерактивный HMI-проект на Nextion с Arduino Mega и датчиками
  8. Роботизированная рука 6 степеней свободы на Arduino Mega с управлением через Nunchuk
  9. Измерение солнечной радиации на Arduino UNO с Ethernet Shield
  10. Компактный радар на Arduino Nano с HC-SR04 и дисплеем 1.8"