Mündəricat:

Proqramlaşdırıla bilən klaviatura: 5 addım (şəkillərlə)
Proqramlaşdırıla bilən klaviatura: 5 addım (şəkillərlə)

Video: Proqramlaşdırıla bilən klaviatura: 5 addım (şəkillərlə)

Video: Proqramlaşdırıla bilən klaviatura: 5 addım (şəkillərlə)
Video: WhatsApp-ın bu hiyləsini bilirsən? 😎 2024, Noyabr
Anonim
Proqramlaşdırıla bilən klaviatura
Proqramlaşdırıla bilən klaviatura
Proqramlaşdırıla bilən klaviatura
Proqramlaşdırıla bilən klaviatura

Bu layihədə ən çox istifadə etdiyiniz klaviatura qısa yollarını, tətbiqlərinizi və daha çoxunu xəritələşdirmək üçün nisbətən sadə və ucuz proqramlaşdırıla bilən klaviaturanın necə hazırlanacağını göstərəcəyəm.

Bu klaviatura bütün əsas əməliyyat sistemlərində klaviatura olaraq aşkarlanır, əlavə sürücülərə ehtiyac yoxdur.

Təchizat

  • Rotary kodlayıcı.
  • Bir çox (ehtiyaclarınızdan asılı olaraq) düymələr.
  • Arduino Pro Micro, Arduino Leonardo və ya Atmega32U4 MCU ilə hər hansı digər inkişaf etdirici lövhə.
  • Tel, lehim, lehimləmə dəmiri və s.
  • (İsteğe bağlı) Klaviaturanın sürüşməməsi üçün ağır bir baza, köhnə 3.5 "HDD istifadə edirəm

Addım 1: Elektrik dövrəsi

Elektrik dövrəsi
Elektrik dövrəsi

18 ədəd istifadə edilə bilən rəqəmsal sancağı olan Atmega32U4 MCU ilə Arduino Pro Micro dev board istifadə etməyi seçdim.

Düymələri və fırlanan kodlayıcıları birləşdirmək üçün sancaqlar xüsusi bir sifariş nəzərə alınmadan seçildi, lakin bəzi məqamlara diqqət yetirmək lazımdır:

  1. Bütün rəqəmsal oxuya bilən sancaqlar xarici açılan rezistorları azaltmağa imkan verən daxili çəkmələrə malikdir. Əlbəttə ki, kod müvafiq olaraq yenilənməlidir, çünki düymələrə basıldıqda pin vəziyyətinin aşağıdan yuxarıya doğru getməsini gözləyir.
  2. Encoder.h kitabxanasında nümunə qeyd etdi ki, MCU -ya qoşulan hər iki sancaq qabiliyyətli sancaqları kəsdikdə kodlayıcının ən yaxşı performansına nail olunur. Atmega32U4 analog pinlərinin əksəriyyətində kəsmə qabiliyyəti yoxdur.
  3. Tam açılan rezistor dəyərlərinin çox da əhəmiyyəti yoxdur, 1 kΩ-dan 100 kΩ-a qədər hər şey yaxşı işləyəcək. Daha böyük müqavimət dəyərləri daha az enerji sərf etməyə imkan verir, lakin gərginlik dəyişikliyinə daha yavaş pin reaksiyası ilə nəticələnir. Yalnız ən çox dəyər verən rezistorları seçin.
  4. Mexanik kodlayıcılar təmas aşınması və sıçrayış səbəbiylə ən etibarlı şeylər deyil. Buna görə yaxşı bir debuninq həllinə ehtiyac var. Seçdiyim kondansatör dəyərləri və koddakı gecikmə vaxtları sizin üçün ən yaxşı nəticələr verməyəcək. Buna görə bir az təcrübəyə ehtiyac var. Və ya optik kodlayıcı kimi bir şeyə keçin, amma qiyməti xeyli yüksəkdir.

Addım 2: Quraşdırma

Məclis
Məclis
Məclis
Məclis
Məclis
Məclis
Məclis
Məclis

Klaviaturanı mümkün qədər təmiz etmək istədim, buna görə prototip lövhəsinin arxasındakı bütün komponentləri lehimlədim. Klaviatura kiçik bir açıda yüksək istifadə olunarsa daha erqonomik olacağını düşündüm. Buna görə ayrı bir lövhədə Arduino Pro Micro -nu lehimlədim və düymələri basmaq üçün bütün rəqəmsal sancaqları tellə bağladım. USB kabelini bu şəkildə bağlamaq daha rahatdır.

Klaviatura üçün əsas kimi istifadə etmək üçün köhnə 3,5 HDD tapdım, olduqca ağırdır və işləyərkən lövhənin masanın üstündən sürüşməsini maneə törədir (sürüşmə əleyhinə yastıqlar da kömək edir). Ayrıca, pirinç dayaqları vidaladığım 3 mm rahat vida delikləri var. lövhəni yüngül bir açı ilə düzəldin.

Addım 3: Proqramlaşdırma

Kod Arduino IDE ilə yazılmışdır. 2 kitabxana qurmalısınız:

  • Paul Stoffregen tərəfindən kodlayıcı
  • Arduino tərəfindən klaviatura

Atmega32U4 üçün tərtib etmək üçün Arduino Pro Micro lövhə faylını da yükləməlisiniz, Sparkfun bunu necə etmək üçün böyük bir dərsliyə malikdir.

Əvvəlcədən qeyd etmək lazım olan bir şey, kodunuzda "düymələri basıldığını" buraxmamaq üçün diqqətli olmaqdır. Bu mənim başıma gəldi və MCU daim bəzi düymələr birləşməsini spamlayırdı. Bunun necə düzəldiləcəyini bildiyim yeganə yol, yükləyicini MCU-ya yenidən yandırmaqdır. Mənim kimi sona çatacaqsınızsa, yükləyicini yazmaq üçün bu təlimatı izləyə bilərsiniz, proqramçı olaraq istifadə etmək üçün başqa bir arduino lövhəsinə ehtiyacınız olacaq.

Əsas döngədə MCU əvvəlcə hər bir düymə vəziyyətini oxuyur, əgər LOW -dan HIGH -a vəziyyət dəyişikliyi aşkar edilərsə, keyboard_shortcut (i) funksiyası yerinə yetirilir. Dəyişən i basılan düymənin identifikatorudur, ümumi düymənin sayı ALL_BUTTONS ilə müəyyən edilir (mənim vəziyyətimdə 15). İcra edildikdə, keyboard_shortcut (i) CTRL+ÜST KRKT göndərir və sonra düymə id ilə eşlenen bir məktub göndərir: 1-> A, 2-> B, 3-> C və s. CTRL+SHIFT+N kimi bəzi kombinasiyalar buraxıldığı üçün Windows 10 -da standart olaraq istifadə olunur (bu vəziyyətdə yeni bir qovluq yaratmaq üçün). Burada bütün standart Windows qısa yollarının siyahısı verilmişdir. Qısa gecikmədən sonra MCU bütün düymələri buraxmaq üçün siqnal göndərir və funksiya əsas döngəyə qayıdır.

Bütün düymələr yoxlanıldıqdan sonra, MCU fırlanan kodlayıcı mövqeyinin dəyişib -dəyişmədiyini yoxlayır və əgər dəyişirsə, keyboard_shortcut (i) unikal id ilə icra edilir.

Encoder düyməsini basmaq encoderButtonFlag boolean dəyişənini ters çevirir. Enkoder döndərildikdə fırlanma istiqamətindən və encoderButtonFlag dəyərindən asılı olaraq fərqli yollar PC -yə göndərilir.

DebugFlag 1 olaraq təyin olunarsa, UART vasitəsilə serial monitora göndərilir.

Addım 4: Qısayolları konfiqurasiya edin

Qısayolların Konfiqurasiyası
Qısayolların Konfiqurasiyası
Qısayolların Konfiqurasiyası
Qısayolların Konfiqurasiyası

Hər bir qısayolun etdikləri sizdən asılıdır, hamımızın fərqli seçimlərimiz var. Nümunə olaraq özüm üçün konfiqurasiya etdiyim qısa yolları verəcəyəm. Xfce4 masa üstü meneceri ilə Linux Mint 19.3 istifadə edirəm, buna görə nümunələrim əsasən bash skriptlərini əhatə edir, lakin Windows10 üçün də bəzi əsas nümunələri göstərəcəyəm.

Birinci şəkildə hansı skriptləri hansı qısa yollarla xəritələdiyimi görə bilərsiniz. Xfce parametrləri menyusundan edilir, bunun üçün proses birbaşa irəli gedir. Bu skriptləri GitHub depomda tapa bilərsiniz

Altdakı daha kiçik 6 düymə veb brauzer və ya fayl meneceri kimi tətbiqləri işə salmaq üçündür, bu tətbiqlərin bəzilərinə start_only_one_app.sh skriptindən deyilir ki, bu da bütün başladılan tətbiqlərin adlarını alır və başlamaq istədiyiniz proqramı axtarır. Tətbiq pəncərəsi artıq varsa, diqqət mərkəzinə çevrilir, başqa bir tətbiq nümunəsi başlayır.

Digər skriptlər:

  • 2nd_display_control.sh - ikinci monitoru AÇMA/SÖNDÜRMƏK.
  • moon_lamp.sh - Ay Lampamı AÇIR/SÖNDÜR.
  • pc_load.sh - cari CPU və GPU istifadəsi və temperaturu ilə bildiriş balonu yaradır.
  • shutdown.sh - 1 dəqiqə gecikmə ilə kompüterin bağlanmasını başlatır və qalan vaxtın göstərildiyi bildiriş balonu yaradır.
  • spec_vpn.sh - xüsusi OpenVPN serverinə qoşulur və ya əlaqə artıq mövcuddursa, serverdən ayrılır.
  • shortcut_controll.sh - əmri (üstəgəl, eksi, nişanı, yaxın) arqument kimi qəbul edir, indi hansı pəncərənin fokuslandığını aşkar edir və xüsusi bir tətbiq tapılarsa nəzarət hərəkətini icra edir. Məsələn, möhtəşəm mətn redaktorunda yeni bir sekmə açmaq üçün standart qısayol "CTRL+N" və xfce terminalında - "CTRL+T" dir, buna görə də bu skript eyni düymə ilə yüksək və terminalda yeni sekmə açmağa imkan verir.

Döner kodlayıcının birinci funksiyası həcmi idarə etməkdir, ikinci funksiya shortcut_controll.sh vasitəsilə aktiv pəncərə böyütməsini idarə etməkdir.

Windows OS üçün, ikinci şəkildəki kimi proqram xüsusiyyətləri pəncərəsi vasitəsi ilə qısa yolları tətbiqlərə yerləşdirə bilərsiniz. Başqa bir şey üçün AutoHotkey istifadə etmək istəyəcəksiniz. Windows üçün avtomatlaşdırma skript dilidir.

AHK sintaksisindən bəzi sadə nümunələr:

Səs səviyyəsinə nəzarət

^+t:: {Volume_Up} göndərin

qayıt

^+v:: {Volume_Down} göndərin

qayıt

; Aktiv pəncərəni bağlayın

^+h:: WinGetTitle, Başlıq, A.

PostMessage, 0x112, 0xF060,,, %Başlıq %

qayıt

; PC -ni bağlayın

^+b:: Kapat /s işləyin

Addım 5: Təkmilləşdirmələr

Təkmilləşdirmələr
Təkmilləşdirmələr

Bəzi mümkün təkmilləşdirmələr:

  • Daha keyfiyyətli düymələr.
  • Düymələrə basıldıqda PCB prototipi çox bükülür.
  • Hansı funksiyaya görə fırlanan kodlayıcıdan asılı olaraq rəng dəyişdirmək üçün RGB işıqlandırma.
  • Daha çox düymə (IO genişləndirici IC istifadə edin).
  • Daha yaxşı fırlanan enkoder (və ya daha yaxşı sökülmə həlli).

Tövsiyə: