Apakah Anda pernah melihat bagaimana, di dunia teknologi yang gila, selalu ada satu proyek kecil yang unik yang mencoba memecahkan masalah sehingga ceruk sehingga satu-satunya pesaingnya mungkin obeng kidal dan jam alarm yang bersembunyi sendiri?
Saya menggunakan dua komputer yang berbeda dalam alur kerja harian saya dan berbagi satu pasangan keyboard/mouse di antara mereka. Mencoba beberapa kotak switching USB yang ditemukan di Amazon membuat saya menyadari bahwa mereka semua menderita dari masalah yang sama - butuh beberapa saat untuk beralih, prosesnya sangat canggung ketika mencoba menemukan tombol dan terus terang, itu tidak menjadi lebih baik dengan waktu.
Yang saya inginkan hanyalah cara untuk menggunakan pintasan keyboard untuk dengan cepat mengganti output, dipasangkan dengan kemampuan untuk melakukan hal yang sama dengan secara ajaib menggerakkan penunjuk mouse di antara monitor. Proyek ini memungkinkan Anda untuk melakukan keduanya, bahkan jika komputer Anda menjalankan sistem operasi yang berbeda!
Perangkat bertindak sebagai perantara antara keyboard/mouse Anda dan komputer, membangun dan memelihara koneksi dengan kedua komputer sekaligus. Kemudian ia memilih tempat untuk meneruskan mouse dan penekanan tombol Anda, tergantung pada pilihan Anda. Keyboard mengikuti mouse dan sebaliknya, jadi cukup menyeret mouse ke desktop lain akan beralih keduanya.
Untuk membuat kursor mouse melompat secara ajaib, deskriptor laporan HID mouse diubah untuk menggunakan koordinat absolut dan kemudian laporan mouse (yang masih masuk dalam gerakan relatif) menumpuk secara internal, menjaga penghitungan yang akurat pada posisi.
Ketika Anda mencoba meninggalkan area monitor ke arah monitor lainnya, itu membuat Y tetap koordinat dan menukar X maksimum untuk x minimum, kemudian membalik output. Ini memastikan bahwa kursor mulus muncul pada ketinggian yang sama pada monitor lain, meningkatkan persepsi transisi yang mulus.

Menyeret mouse dari Mac ke Linux secara otomatis beralih output.
Sakelar yang sebenarnya terjadi pada saat satu panah berhenti bergerak dan yang lainnya dimulai.
Bertindak sebagai host USB dan menanyakan keyboard Anda secara berkala, ia mencari hotkey yang telah dikonfigurasi sebelumnya dalam laporan HID (biasanya Ctrl + Caps Lock for Me). Ketika ditemukan, itu akan meneruskan semua karakter berikutnya ke output lainnya.
Untuk memiliki indikasi visual output mana yang Anda gunakan pada saat tertentu, Anda dapat menggunakan kembali LED keyboard dan memilikinya memberikan umpan balik yang diperlukan.
Ini juga mengingat keadaan LED untuk setiap komputer, sehingga Anda dapat mengambil dengan tepat bagaimana Anda meninggalkannya.

Untuk menghindari ketidakcocokan versi dan melaporkan masalah jalur saat membangun, serta untuk menyelamatkan Anda dari keharusan mengunduh SDK besar, proyek ini sekarang memikul minimal Pico SDK dan TinyusB.
Pada sistem Debian/Ubuntu, pastikan untuk menginstal ini:
sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential
Anda harus dapat membangun dengan menjalankan:
cmake -S . -B build
cmake --build build
Selain itu, untuk membangun kembali Web UI memeriksa webconfig/ dan mengeksekusi ./render.py , Anda akan perlu diinstal Jinja2.
Untuk membangun kembali disk, periksa disk/ folder dan jalankan ./create.sh , tweak ke sistem Anda jika diperlukan. Anda akan membutuhkan dosfstools (untuk menyediakan mkdosfs),
Atau, Anda dapat menggunakan gambar yang sudah dibangun. Karena versi 0.6 hanya ada satu gambar universal tunggal. Anda memerlukan file .uf2 yang cukup Anda salin ke perangkat dengan salah satu cara berikut:
Opsi 1 - (Firmware 0.6 dan yang lebih baru) Masukkan perangkat dalam "Mode Konfigurasi" dengan secara bersamaan menekan CTRL KIRI + SHIFT KANAN + C + O. Perangkat keyboard Anda terhubung ke reboot dan berubah menjadi drive USB yang disebut "Deskhop". Yang perlu Anda lakukan adalah menyalin file .uf2 ke sana. Setelah gambar diverifikasi, perangkat akan berkedip dan reboot, lalu lanjutkan untuk meningkatkan papan lainnya. Selama operasi ini LED akan berkedip. Setelah selesai, itu akan menulis flash dan reboot, menyelesaikan operasi.
Catatan - Ini bukan drive USB generik yang sebenarnya, Anda tidak dapat menggunakannya untuk menyalin file ke sana.
Opsi 2 - Menggunakan rom bootloader - tahan tombol on -board sambil menghubungkan setiap pico dan salin UF2 ke flash drive yang muncul. Gambar lebih dari 0,6 dukungan menahan tombol tanpa harus mengutak -atik catu daya, tetapi "tombol tahan sambil menyumbat" harus selalu berfungsi, terlepas dari keadaan perangkat.
Pernah mencoba untuk memindahkan slider video YT ke posisi tertentu tetapi mouse Anda bergerak terlalu gelisah dan tiba-tiba Anda menggerakkan tangan Anda dengan sangat hati-hati seperti Anda berusia 5 tahun dan bermain "operasi" lagi?
Tekan Kanan CTRL + ALT KANAN untuk beralih mode mouse lambat. Pointer mouse akan melambat secara signifikan, memungkinkan Anda untuk menyelesaikan pekerjaan presisi yang lebih baik dan masih membuat mouse Anda bergerak secara normal dengan cepat menekan tombol yang sama lagi.
Jika Anda ingin mengunci diri Anda ke satu layar, gunakan RIGHT CTRL + K . Ini akan memastikan Anda tidak secara tidak sengaja meninggalkan layar Anda saat ini. Untuk mematikan, tekan kombo tombol yang sama lagi.
Anda dapat mengunci kedua komputer sekaligus dengan menggunakan RIGHT CTRL + L . Untuk memanfaatkan fitur ini, pertama -tama atur OS untuk setiap output dalam konfigurasi (karena pintasan berbeda).
Jika Anda bermain game, ada kemungkinan gim Anda mungkin tidak berfungsi dengan baik dengan mode mouse absolut. Untuk mengatasi masalah itu, mode game diperkenalkan, diaktifkan oleh LEFT CTRL + RIGHT SHIFT + G . Saat dalam mode game, Anda dikunci ke layar saat ini dan mouse Anda berperilaku seperti mouse relatif standar. Ini juga harus memperbaiki berbagai masalah mesin virtual, sistem operasi yang saat ini tidak didukung dll.
Seharusnya dibangun untuk mencegah komputer memasuki siaga, tetapi sejujurnya - itu hanya menyenangkan untuk ditonton. Off Secara Default , akan membuat penunjuk mouse Anda memantul di sekitar layar seperti bola pong. Saat diaktifkan, itu diaktifkan setelah periode tidak aktif yang ditentukan dalam header konfigurasi pengguna dan secara otomatis dimatikan segera setelah Anda mengirim output ke layar itu.
Contoh Penggunaan Potensial - Saya memiliki dermaga USB kereta yang tidak akan melanjutkan video dari siaga, jadi tidak membiarkannya tidur bisa menjadi solusi yang berguna.
Sirkuit didasarkan pada dua papan Raspberry Pi Pico, yang dipilih karena murah (4,10 € / pc), dapat disolder tangan dan sebagian besar pemasok memilikinya.
PICO terhubung menggunakan UART dan dipisahkan oleh perangkat analog ADUM1201 Dual-Channel Digital Isolator (~ 3 €) atau Ti ISO7721DR yang jauh lebih murah, lebih cepat dan kompatibel dengan pin (~ 1,5 €) yang merupakan pilihan yang disukai.
Meskipun mereka biasanya tidak memiliki dukungan untuk USB ganda, berkat proyek yang luar biasa di mana USB diimplementasikan menggunakan IO Wizardry yang dapat diprogram yang ditemukan di RP2040, ada dukungan untuk itu untuk bertindak sebagai host dan perangkat USB.
Untuk menjaga hal -hal sesederhana mungkin untuk build DIY, jejak disimpan di satu sisi dan jumlah bagian yang disimpan seminimal mungkin.

USB D+/D-Lines diferensial harus panjangnya identik, tetapi mereka sedikit asimetris dengan sengaja untuk melawan perbedaan panjang pada GPIO yang sesuai dengan PICO PCB itu sendiri, sehingga panjang keseluruhan harus cocok.
ZD (Impedansi Diferensial) ditujukan sebagai 90 ohm (berhasil mendapatkan ~ 107, cukup dekat :)).
Ketebalan dirancang untuk menjadi 1,6 mm agar snap-fit berfungsi seperti yang diharapkan.
Ada 2 versi PCB (tidak ada perbedaan besar bagi pengguna). Asli (v1.0) lebih mudah disolder dan dirakit, sementara v1.1 menawarkan beberapa peningkatan seperti:
Versi ini sedikit lebih sulit untuk solder tangan karena IC penekan tegangan transien kecil dan resistor 0805, tetapi benar -benar bisa dilakukan. TVS secara teori dapat dihilangkan (tidak disarankan) dan masih akan berhasil.
Mendatang - Papan dengan RP2040 telanjang yang tidak membutuhkan PICO, lebih kecil dan lebih nyaman.
Karena saya tidak terlalu baik dengan 3D, kasusnya sederhana dan mendasar tetapi melakukan pekerjaan. Seharusnya mudah dicetak, menggunakan ~ 33g filamen dan membutuhkan beberapa jam.
Gerakan PCB horizontal dilawan oleh pasak yang meluncur melalui lubang dan gerakan vertikal dengan lugs snap -fit di samping - tidak diperlukan sekrup. Kasing ini diberi sedikit desain ulang untuk menampilkan logo dan dua lugs snap-fit tambahan, sehingga memberikan segel yang lebih baik.
Konektor USB mikro di kedua papan diimbangi dari sisi kasing, sehingga lubang yang sedikit lebih besar harus memungkinkan kabel untuk mencapai.
Tutupnya adalah desain snap-fit, dengan slot obeng untuk dibuka. Tanda-tanda di atasnya tersembunyi dan dapat diselesaikan dengan krayon misalnya untuk memberikan kontras yang lebih baik (atau hanya meninggalkan apa adanya).

| Komponen | Qty | Harga satuan / € | Harga / € |
|---|---|---|---|
| Raspberry Pi Pico | 2 | 4.10 | 8.20 |
| ADUM1201BRZ | 1 | 2.59 | 2.59 |
| Cap 1206 SMD 100NF | 2 | 0,09 | 0.18 |
| USB-A PCB Conn. | 2 | 0,20 | 0.40 |
| Header 2.54 1x03 | 2 | 0,08 | 0.16 |
| Total | 11.53 |
Ti ISO7721DR dapat digunakan sebagai pengganti adum - ini kompatibel dengan pin, jauh lebih murah dan dengan spesifikasi yang lebih baik.
| Komponen | Bagian | Qty | Harga satuan / € | Harga / € |
|---|---|---|---|---|
| U1, u2 | Raspberry Pi Pico | 2 | 4.10 | 8.20 |
| J1, J4 | USB-A PCB Conn. | 2 | 0,20 | 0.40 |
| U4 | TISO7721DR | 1 | 1.40 | 1.40 |
| ( Atau adum1201brz) | ||||
| C1, C2 | Cap 0805 SMD 100NF | 2 | 0,09 | 0.18 |
| R1, R2, R3, R4 | Res 0805 smd 27ohm | 4 | 0,03 | 0.12 |
| U3, U5 | TPD4E1U06DBVR | 2 | 0.31 | 0.62 |
| C3, C4 | CAP 4.7UF SMD 0805 | 2 | 0,07 | 0.14 |
| J2, J3 | Header 2.54 1x03 | 2 | 0,08 | 0.16 |
| Total | 11.22 |
Konektor USB-A dapat berupa Molex MX-67643-0910 atau yang lebih murah/anggaran yang memiliki dimensi yang sama.
Langkah Tambahan:
Jika Anda memiliki pengalaman dengan elektronik, Anda tidak membutuhkan ini. Namun, beberapa dari Anda mungkin tidak, dan dalam hal ini video ini dapat membantu memandu Anda melalui prosesnya. Harap dicatat, setelah menyolder Anda harus membersihkan fluks dari PCB untuk mencegah korosi.
Proses standar yang harus dilakukan adalah menggunakan alkohol isopropil dan sikat gigi tua. Tapi coba tebak? Saya tidak menempatkan sikat gigi lama saya secara online, jadi Anda hanya harus berimprovisasi bagian itu :)

[Catatan] Panduan perakitan video mencakup PCB v1.0. Versi yang direvisi sangat mirip dan prosedurnya pada dasarnya sama.
Konfigurasi
Left ShiftLeft Ctrl + Right Shift + C + O - Masukkan Mode KonfigurasiRight Shift + F12 + D - lepaskan flash configRight Shift + F12 + Y - Simpan Sakelar Layar OffsetPenggunaan
Right CTRL + Right ALT - Sakelar Mode Mouse Lebih LambatRight CTRL + K - Kunci/Buka Kunci Saklar Desktop MouseRight CTRL + L - Kunci Kedua Output sekaligus (atur OS Output sebelumnya, lihat Pintasan di bawah)Left ShiftLeft CTRL + Right Shift + G - Sakelar Mode Gaming (Kunci ke Layar, Bertindak sebagai Mouse Standar)Left CTRL + Right Shift + S - Aktifkan ScreensaverLeft CTRL + Right Shift + X - Nonaktifkan ScreensaverLeft CTRL + Caps Lock - Beralih di antara outputCatatan: Beberapa keyboard tidak mengirim kedua shift pada saat yang sama dengan benar, itu sebabnya jalan pintas diubah - untuk bekerja untuk semua orang. Permintaan maaf atas kebingungannya.
Langkah ini tidak diperlukan, tetapi bisa berguna jika layar Anda tidak selaras atau berbeda dalam ukuran. Tujuannya adalah agar penunjuk mouse keluar pada ketinggian yang persis sama.

Cukup parkir mouse Anda di layar yang lebih besar di ketinggian layar yang lebih kecil/bawah (diilustrasikan) dan tekan Right Shift + F12 + Y . LED Anda (dan Caps Lock) harus berkedip dalam konfirmasi.
Ulangi untuk perbatasan bawah (jika di atas perbatasan layar yang lebih besar). Ini akan disimpan untuk berkedip dan harus menjaga nilai kalibrasi ini mulai sekarang.
Windows dan Mac memiliki masalah dengan beberapa layar dan penentuan posisi absolut, sehingga solusi diperlukan (masih eksperimental). Ada solusi yang lebih baik dalam pembangunan, tetapi untuk saat ini Anda harus mengatur sistem operasi untuk setiap output dan jumlah layar.
Layar utama Anda harus berada di tengah, dan layar sekunder di tepi. Untuk mengonfigurasi opsi aktual, buka halaman Konfigurasi Web untuk perangkat Anda.

Dimulai dengan FW 0.6, mode konfigurasi yang ditingkatkan diperkenalkan. Untuk mengonfigurasi perangkat Anda, ikuti instruksi ini:


T: Mengapa tidak hanya membuat halaman web online yang bagus seperti Via alih -alih berurusan dengan hal drive usb yang aneh ini? A: Memuat JavaScript dari lokasi online acak yang berinteraksi dengan perangkat input Anda adalah risiko keamanan potensial. Halaman web konfigurasi hanya lokal dan tidak ada yang dimuat secara eksternal.
T: Kromium di Linux tidak berfungsi. A: Anda mungkin perlu men -tweak /dev izin atau membuat file aturan udev yang sesuai dan memastikan pengguna Anda ada di grup yang tepat, seperti itu:
/etc/udev/rules.d/99-deskhop.rules
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1209", ATTRS{idProduct}=="c000", GROUP="plugdev", MODE="0660"
Harap perhatikan halaman web konfigurasi tidak "aneh" karena kebingungan yang disengaja - ini adalah penghentian diri karena penyimpanan yang sangat terbatas. Seluruh sumber terbuka 100% dan bagian dari repo ini. Anda didorong untuk membangun kembali semuanya sendiri.
Saat Anda menghubungkan periferal USB baru, papan akan mem -flash LED dua kali, dan menginstruksikan papan lain untuk melakukan hal yang sama. Dengan cara ini Anda dapat menguji apakah USB dan komunikasi keluar berfungsi untuk setiap papan.
Lakukan tes ini dengan terlebih dahulu mencolokkan keyboard di satu sisi dan kemudian di sisi lain. Jika semuanya baik -baik saja, LED akan berkedip dengan cepat bolak -balik dalam kedua kasus.
Beberapa fitur hilang dengan sengaja, meskipun faktanya itu akan membuat perangkat lebih mudah digunakan atau lebih sederhana untuk dikonfigurasi. Berikut adalah rincian cepat dari keputusan ini:
Ini masih belum menjamin apa pun, tetapi saya percaya itu membuat serangkaian aturan dasar yang masuk akal untuk membuat Anda tetap aman dan terlindungi.
Tentu. Disarankan memiliki isolator tetapi harus berhasil tanpanya.
Gerakan mouse dilakukan dalam ruang koordinat abstrak dan komputer Anda mencari tahu bagaimana hal itu sesuai dengan layar fisik, jadi itu seharusnya berfungsi.
Saya tidak menjual apa pun, ini hanya proyek hobi pribadi, non-komersial.
[Perbarui] Tampaknya Anda dapat memesannya di QTY 1 (untuk PCB, PCB yang dirakit atau perangkat yang dirakit sepenuhnya) dari Elecrow jika Anda mengikuti tautan ini seperti yang dilaporkan oleh pengguna, papan Anda akan tiba kosong dan Anda harus menulis sendiri firmware.
[UPDATE2] - Saya tidak pernah meminta Elecrow untuk apa pun, tetapi beberapa hari yang lalu mereka menawarkan untuk mensponsori proyek dengan anggaran kecil yang akan digunakan untuk pembuatan prototipe dewan di masa depan. Karena tujuan saya adalah membuat papan yang lebih baik dengan lebih dari 2 output dll, saya percaya layanan prototipe mungkin bermanfaat bagi proyek.
Ya, idenya adalah untuk membuatnya berperilaku seperti satu komputer tunggal.
Itu harus berhasil. Setelah pembaruan FW baru -baru ini, dukungan untuk penerima kombo harus jauh lebih baik.
Seharusnya berhasil - mencoba mouse nirkabel anker dengan penerima terpisah dan itu berfungsi dengan baik.
Lihatlah pemecahan masalah wiki yang mungkin memiliki beberapa jawaban.
Ada beberapa alternatif perangkat lunak yang dapat Anda gunakan jika itu berfungsi dalam situasi khusus Anda.
Jadi, apa masalahnya dengan semua antusiasme? Saya tidak percaya - izinkan saya untuk berterima kasih kepada Anda semua! Saya tidak pernah mengharapkan minat semacam ini pada proyek pribadi yang sederhana, jadi fitur awalnya cukup mendasar (seperti keterampilan memasak saya) dan sebagian besar menutupi usecase saya sendiri. Nantikan pembaruan firmware yang seharusnya membawa kompatibilitas perangkat yang lebih luas, lebih banyak fitur dan lebih sedikit bug. Karena ini adalah proyek hobi, saya menghargai pemahaman Anda karena dibatasi waktu dan berjanji untuk melakukan yang terbaik yang saya bisa.
Fitur yang direncanakan:
Bekerja pada versi Lite yang menyediakan fungsionalitas dasar hanya dengan satu papan PICO W, menurunkan biaya lebih jauh dan memungkinkan Anda untuk mencobanya bahkan tanpa perangkat keras tambahan atau PCB.
Polling mouse sekarang harus bekerja pada 1000 Hz (Dips dalam grafik adalah lengan saya yang terluka dari semua gerakan :-)):

Saya tidak melakukan ini untuk keuntungan atau alasan lain kecuali untuk mencoba dan membantu orang dengan menciptakan lingkungan kerja yang lebih baik untuk semua orang. Jika Anda ingin mendukung proyek lebih lanjut, silakan pertimbangkan untuk memberikan donasi kecil untuk amal seperti Dokter tanpa batas .
Tolong izinkan saya untuk berterima kasih kepada semua orang yang membantu atau mempertimbangkannya!
Saya dengan ramah meminta siapa pun yang mencoba membangun proyek ini memahami dan mengakui bahwa saya tidak bertanggung jawab atas cedera, kerusakan, atau konsekuensi lainnya. Keselamatan Anda penting, dan saya mendorong Anda untuk mendekati proyek ini dengan hati-hati, mengambil tindakan pencegahan yang diperlukan dan memikul tanggung jawab pribadi atas kesejahteraan Anda selama proses tersebut. Tolong jangan tersengat listrik, terbakar, stres atau marah. Bersenang -senang dan nikmati!
Selamat beralih!