Arduino-HID-USV: Dummy-Netzteil per USB zu intelligenter Backup-Stromversorgung aufrüsten
Komponenten und Zubehör
| Arduino Pro Micro (oder Leonardo/klon mit ATmega32U4) | × | 1 |
| Steckplatine (Breadboard) | × | 1 |
| Jumper-Kabel | × | 1 |
Über dieses Projekt
Ich besitze eine ältere „Dummy“-USV (unterbrechungsfreie Stromversorgung), die ihren Status nicht an den Host-Computer melden kann, da kein USB-Anschluss vorhanden ist. Ziel war es, mit einem Arduino eine „Intelligenz“ zu schaffen, die interne USV-Parameter (Batteriekapazität, Lade-/Entladestatus, Strom, Spannung) ausliest und über eine HID-konforme USB-Schnittstelle an das Betriebssystem übermittelt – genau wie bei kommerziellen Smart-USVs (z. B. APC).
Statt eigene Treiber zu entwickeln, setzte ich auf den HID-Standard (Human Interface Device), der ursprünglich für Tastaturen/Mäuse gedacht war, aber mittlerweile auch Stromversorgungsgeräte (UPS, Batterien, Ladegeräte) unterstützt. Arduinos mit nativer USB-Unterstützung (Leonardo, Pro Micro, Klone) können sich als HID-Geräte präsentieren. Nach Analyse der Arduino-HID- und Keyboard-Bibliotheken entwickelte ich die Bibliothek HIDPowerDevice.
Testaufbau
Der Versuchsaufbau ist minimal:
- Laptop (macOS, Windows 10 oder Ubuntu)
- Arduino Pro Micro per USB verbunden
- Steckplatine mit einem Schalter (bzw. Jumper) an Pin 4
- Zwei LEDs zur Diagnose
- Ein Potentiometer zur Simulation des Ladezustands
Funktionsweise: Schalter S1 verbindet Pin 4 mit GND → simuliert Batteriebetrieb. Ist S1 offen, meldet der Arduino „Laden“.
Ergebnisse auf verschiedenen Systemen
Windows 10
Erkennt den Arduino als HID-Batterie und zeigt den Kapazitätsprozentsatz korrekt im Infobereich an.
Wichtige Einschränkung: Windows 10 unterstützt mehrere Batterien, aber alle müssen im selben Modus berichten (mAh, mWh oder Prozent). Die meisten USVs melden nur Prozent. Bei Laptops mit ACPI-Batterie kann die Anzeige kollidieren.
Linux
Funktioniert ebenfalls, evtl. ist zusätzliche Konfiguration nötig (siehe README).
Synology / NUT-Unterstützung (Update 12.06.2021)
Nach Anfragen zur Synology-Unterstützung: Das Problem liegt in den Network UPS Tools (NUT), die von Synology genutzt werden. NUT geht standardmäßig von USB-Interface 0 aus, aber Arduino Leonardo/Pro Micro meldet sich als Composite-Device mit der USV auf Interface 2. Auch die Interrupt-Endpoints unterscheiden sich.
Eine modifizierte NUT-Bibliothek mit Arduino-Unterstützung findet sich hier. Sie kann aus dem Quellcode gebaut und auf der Zielplattform (Synology oder kompatible Linux-Distribution) installiert werden. Experimentell – Backup der aktuellen NUT-Dateien empfohlen!
Code
HIDPowerDevice Quellcode: https://github.com/abratchik/HIDPowerDevice
Schaltpläne
arduino_ups_mlvhJQLrSZ.fzz (Fritzing-Datei)
Herstellungsprozess
- Sensor-gesteuerte Audio-Effekte mit dem Satellite CCRMA Kit bauen
- K30 CO₂-Sensor: Echtzeit-Luftqualitätsmessung mit Arduino
- Kommunikationshilfe für Taubblinde: 1Sheeld + Arduino + Sprachausgabe & Anzeige
- Smartes Sparschwein: Münzprüfer mit Arduino Nano steuern
- LED per Bluetooth mit Arduino steuern – Einfache DIY-Anleitung
- DFRobot Kapazitiver Fingerabdrucksensor mit Arduino oder ESP8266 einbinden
- Interaktives Nextion HMI Projekt mit Arduino Mega und Sensoren
- Arduino-basierter 6-DoF Roboterarm mit Nunchuk-Steuerung
- Präzise Solareinstrahlungsmessung mit Arduino UNO & Ethernet Shield
- Kompaktes Arduino-Radar mit HC-SR04 Ultraschallsensor & 1,8″ Display