Tentang proyek ini
Saya telah bermain dengan Arduino baru-baru ini untuk melihat apa yang dapat dilakukannya untuk saya. Saya memiliki UPS "dummy" lama, yang tidak dapat melaporkan statusnya ke komputer host karena tidak ada port USB di dalamnya. Salah satu proyek yang ada dalam pikiran saya adalah membuat "otak" untuk UPS dummy dengan bantuan papan Arduino. Tujuan dari otak UPS tersebut adalah untuk membaca status UPS internal dengan mengukur kapasitas baterai yang tersisa, status pengisian/pengosongan, arus baterai, tegangan, dll. Semua pembacaan ini kemudian harus diteruskan melalui antarmuka USB dan ditafsirkan oleh sistem operasi host dari komputer dengan cara yang sama seperti yang dilakukan dengan UPS pintar komersial (misalnya, oleh APC).
Saya tidak ingin dipusingkan dengan mengembangkan driver perangkat keras untuk UPS kustom saya dan saya ingin itu menjadi "plug-and-play" jadi saya memutuskan, setelah beberapa penelitian, untuk mengimplementasikan antarmuka yang sesuai dengan HID sesuai dengan spesifikasi ini. HID adalah singkatan dari "Human Interface Device" dan awalnya dirancang untuk keyboard, mouse, joystick, dan perangkat serupa untuk input manusia, namun baru-baru ini telah diperpanjang untuk mendukung perangkat daya seperti UPS, baterai, dan pengisi daya, yang dapat memanfaatkan penggunaan HID standar untuk komunikasi cerdas dengan komputer host. Langkah saya selanjutnya adalah mempelajari bahwa beberapa Arduino seperti Leonardo, Pro Micro dan kloningan mereka dapat menampilkan diri ke host sebagai keyboard atau mouse HID. Setelah beberapa analisis perpustakaan HID Arduino, perpustakaan Keyboard dan banyak googling :) Saya menulis lib HIDPowerDevice saya sendiri. Anda akan menemukan beberapa detail tentang cara menyiapkan dan menggunakannya di readme GitHub.
Lab pengujian saya sangat sederhana dan terdiri dari laptop saya, Arduino Pro Micro yang terhubung ke laptop (Macbook dalam kasus saya tetapi akan bekerja pada Windows 10 dan Ubuntu juga) melalui USB, papan tempat memotong roti dan satu sakelar (saya sebenarnya menggunakan a pelompat sebagai gantinya). Saya juga menambahkan beberapa LED untuk diagnostik dan potensiometer untuk mensimulasikan tingkat pengisian daya. Skema di bawah ini:
S1 menghubungkan pin 4 Arduino Pro Micro ke ground sehingga mensimulasikan UPS menggunakan daya baterai. Saat S1 MATI, Arduino melaporkan ke PC bahwa itu "mengisi daya".
Karena "UPS" saya sesuai dengan HID, Windows 10 juga mengenali Arduino sebagai Baterai HID dan persentase kapasitas yang tersisa ditampilkan dengan benar:
Ada satu batasan penting untuk disebutkan - Windows 10 memungkinkan banyak baterai dalam sistem dan semuanya dapat ditampilkan di baki. Namun, baterai harus melaporkan statusnya dalam mode yang sama (spesifikasi HID mendukung maH, mwH, dan persentase) tetapi sebagian besar UPS hanya melaporkan persentase pengisian daya. Jika Anda sudah memiliki baterai ACPI di sistem Anda (misalkan Anda menguji di laptop), persentasenya mungkin tidak ditampilkan dengan benar.
Demikian pula, UPS juga berfungsi di Linux meskipun beberapa konfigurasi tambahan mungkin diperlukan, lihat README.
PERBARUI 12-Jun-2021 Setelah menerima beberapa pertanyaan tentang dukungan Synology (papan Arduino tidak dikenali oleh Synology sebagai perangkat UPS yang sesuai dengan HID), saya memutuskan untuk meneliti sedikit tentang ini. Masalahnya ada di Network UPS Tools (NUT) yang digunakan oleh distro Synology - ia mengasumsikan antarmuka USB 0 secara default untuk semua model UPS yang sesuai dengan HID tetapi Arudino Leonardo/Pro Mini mengiklankan dirinya ke port USB sebagai perangkat komposit dengan UPS yang dapat diakses pada Antarmuka 2. Ada masalah serupa dengan titik akhir interupsi. Detail teknis selengkapnya tentang masalah ini dapat ditemukan di sini.
Pustaka NUT yang dimodifikasi dengan dukungan Arduino ada di sini. Anda dapat membangunnya dari sumber dan menginstalnya pada platform target Anda (Synology atau distro Linux lain yang kompatibel). Harap perhatikan bahwa ini masih eksperimental sehingga sangat disarankan untuk membuat cadangan file NUT Anda saat ini.
Menikmati! :)
Kode
Kode sumber HIDPowerDevice
https://github.com/abratchik/HIDPowerDevice Skema
arduino_ups_mlvhJQLrSZ.fzz