UPS Berbasis Arduino: Tingkatkan Dummy Power Supply Anda Menjadi Cadangan Kompatibel USB
Komponen dan Perlengkapan
Arduino Pro Micro
1
Breadboard (generik)
1
Kabel jumper (generik)
1
Tentang Proyek Ini
Saya baru-baru ini bermain dengan Arduino untuk melihat apa yang dapat dilakukan untuk saya. Saya memiliki UPS “dummie” lama, yang tidak dapat melaporkan statusnya ke komputer host karena tidak ada port USB di dalamnya. Salah satu proyek yang ada di benak saya adalah membuat “otak” untuk UPS dummie ini dengan bantuan papan Arduino. Tujuan otak UPS tersebut adalah untuk membaca status internal UPS dengan mengukur kapasitas baterai yang tersisa, status pengisian/mengosongkan, arus baterai, tegangan dll. Semua pembacaan ini kemudian harus dilewatkan melalui antarmuka USB dan ditafsirkan oleh sistem operasi host komputer dengan cara yang sama seperti yang dilakukan dengan UPS pintar komersial (misalnya, oleh APC).
Saya tidak ingin repot-repot mengembangkan driver hardware untuk UPS kustom saya dan saya ingin itu menjadi “plug-and-play” jadi saya memutuskan, setelah beberapa riset, untuk mengimplementasikan antarmuka yang sesuai HID sesuai spesifikasi ini. HID singkatan dari “Human Interface Device” dan dirancang awalnya untuk keyboard, mouse, joystick dan perangkat serupa untuk input manusia, namun telah diperluas baru-baru ini untuk mendukung perangkat daya seperti UPS, baterai dan charger, yang dapat mendapat manfaat dari penggunaan standar HID untuk komunikasi cerdas dengan komputer host. Langkah selanjutnya saya adalah mempelajari bahwa beberapa Arduino seperti Leonardo, Pro Micro dan klon-klon mereka dapat menyajikan diri ke host sebagai keyboard HID atau mouse. Setelah beberapa analisis perpustakaan Arduino HID, perpustakaan Keyboard dan banyak pencarian di Google :) saya menulis perpustakaan HIDPowerDevice saya sendiri. Anda akan menemukan beberapa detail cara menyiapkannya dan menggunakannya di README GitHub.
Lab tes 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, sebuah breadboard dan satu saklar (sebenarnya saya menggunakan kabel jumper sebagai gantinya). Saya juga menambahkan beberapa LED untuk diagnostik dan sebuah potensiometer untuk mensimulasikan level charge. Skematik ada di bawah:
S1 menghubungkan pin 4 Arduino Pro Micro ke ground sehingga mensimulasikan UPS beralih ke daya baterai. Ketika S1 OFF, Arduino melaporkan ke PC bahwa sedang “mengisi daya”.
Karena “UPS” saya sesuai HID, Windows 10 juga mengenali Arduino sebagai HID Battery dan persentase kapasitas yang tersisa ditampilkan dengan benar:
Ada satu keterbatasan penting untuk disebutkan - Windows 10 memungkinkan beberapa baterai dalam sistem dan semuanya dapat ditampilkan di tray. Namun, baterai harus melaporkan statusnya dalam mode yang sama (spesifikasi HID mendukung maH, mwH dan persentase) namun sebagian besar UPS hanya melaporkan persentase charge. Jika Anda sudah memiliki baterai ACPI dalam sistem Anda (katakanlah Anda menguji pada laptop) maka persentase mungkin tidak tercermin dengan benar.
Demikian pula, UPS bekerja pada Linux juga meskipun beberapa konfigurasi tambahan mungkin diperlukan, lihat README.
UPDATE 12-Jun-2021 Setelah menerima beberapa kueri mengenai dukungan Synology (papan Arduino tidak dikenali oleh Synology sebagai perangkat UPS yang sesuai HID) saya memutuskan untuk meneliti sedikit tentang ini. Masalahnya ada di Network UPS Tools (NUT) yang digunakan oleh distro Synology - itu mengasumsikan antarmuka USB 0 secara default untuk semua model UPS yang sesuai HID tetapi Arduino Leonardo/Pro Mini menyajikan diri ke port USB sebagai perangkat gabungan dengan UPS yang dapat diakses pada Interface 2. Ada masalah yang serupa dengan endpoint interrupt. Detail teknis lebih lanjut tentang masalah ini dapat ditemukan di sini.
Perpustakaan NUT yang dimodifikasi dengan dukungan Arduino ada di sini. Anda dapat membangunnya dari sumber dan menginstalnya pada platform target Anda (Synology atau distro Linux kompatibel lainnya). Harap dipertimbangkan bahwa ini masih eksperimental jadi membuat cadangan dari file NUT saat ini sangat disarankan.