Onduleur HID Arduino : transformez votre UPS « muet » en sauvegarde compatible USB
Composants et fournitures
| Arduino Pro Micro | ×1 |
| Plaque d'essai (breadboard) | ×1 |
| Fils de câblage (jumper wires) | ×1 |
À propos du projet
J'expérimente avec Arduino pour voir ce qu'il peut m'apporter. J'ai un vieil onduleur « muet » (dummy UPS) qui ne peut pas communiquer son état à l'ordinateur hôte, faute de port USB. Mon idée : créer un « cerveau » pour cet onduleur avec une carte Arduino, capable de lire l'état interne (capacité restante de la batterie, état de charge/décharge, courant, tension, etc.) et de transmettre ces données via USB pour qu'elles soient interprétées par le système d'exploitation exactement comme un onduleur intelligent commercial (type APC).
Je ne voulais pas développer de pilotes matériels personnalisés et visais le « plug-and-play ». Après recherches, j'ai choisi d'implémenter une interface conforme HID (Human Interface Device) selon la spécification USB HID Power Device. Le HID, conçu à l'origine pour claviers, souris, joysticks, a été étendu aux dispositifs d'alimentation (onduleurs, batteries, chargeurs) pour une communication intelligente standardisée avec l'hôte.
J'ai découvert que certains Arduinos (Leonardo, Pro Micro et clones) peuvent s'identifier comme périphérique HID clavier ou souris. Après analyse de la bibliothèque HID Arduino, de la bibliothèque Keyboard et beaucoup de recherches, j'ai écrit ma propre bibliothèque HIDPowerDevice. Les détails de configuration et d'utilisation sont dans le README GitHub.
Banc de test
Configuration simple : ordinateur portable, Arduino Pro Micro connecté en USB (MacBook ici, mais fonctionne sur Windows 10 et Ubuntu), breadboard, un interrupteur (en réalité un cavalier/jumper). J'ai ajouté deux LED pour le diagnostic et un potentiomètre pour simuler le niveau de charge.


L'interrupteur S1 relie la broche 4 de l'Arduino Pro Micro à la masse, simulant le passage sur batterie. Quand S1 est OUVERT, l'Arduino signale « en charge ».

Reconnaissance par le système d'exploitation
Comme l'onduleur est conforme HID, Windows 10 le reconnaît comme une batterie HID et affiche correctement le pourcentage de capacité restante dans la barre des tâches :


Limitation importante : Windows 10 gère plusieurs batteries, mais toutes doivent reporter leur état dans le même mode (mAh, mWh ou pourcentage). La plupart des onduleurs ne rapportent que le pourcentage. Si vous avez déjà une batterie ACPI (ex: sur un portable), l'affichage du pourcentage peut ne pas être correct.
Ça fonctionne aussi sur Linux (configuration additionnelle parfois nécessaire, voir README) :



Mise à jour 12 juin 2021 : Support Synology
Suite à plusieurs demandes sur le support Synology (cartes Arduino non reconnues comme UPS HID), j'ai investigué. Le problème vient de Network UPS Tools (NUT) utilisé par Synology : il suppose l'interface USB 0 par défaut pour tous les UPS HID, mais les Arduino Leonardo/Pro Micro se présentent comme périphérique composite avec l'UPS sur l'interface 2. Problème similaire avec les endpoints d'interruption.
Plus de détails techniques ici.
La bibliothèque NUT modifiée avec support Arduino est ici. Vous pouvez la compiler et l'installer sur votre plateforme cible (Synology ou autre distribution Linux compatible). Attention : encore expérimental, sauvegardez vos fichiers NUT actuels avant installation.
Amusez-vous bien ! :)
Code
Code source HIDPowerDevice : https://github.com/abratchik/HIDPowerDevice
Schémas
arduino_ups_mlvhJQLrSZ.fzz
Processus de fabrication
- Créer des effets audio pilotés par capteurs avec le kit Satellite CCRMA
- Capteur CO2 K30 : Surveillance en temps réel de la qualité de l'air intérieur
- Faciliter la communication sourd-aveugle avec 1Sheeld et Arduino
- Construire une Tirelire Intelligente : Contrôler un Accepteur de Pièces avec Arduino Nano
- Contrôler une LED par Bluetooth avec Arduino et MIT App Inventor
- Intégrer un capteur d'empreintes capacitif DFRobot (ID809) avec Arduino ou ESP8266
- Station météo interactive Nextion HMI avec Arduino Mega et capteurs
- Bras robotique 6 DoF piloté par Nunchuk Wii – Kit Arduino Mega
- Mesure précise du rayonnement solaire avec Arduino UNO et shield Ethernet