Talaan ng mga Nilalaman:

Programmable Keypad: 5 Hakbang (na may Mga Larawan)
Programmable Keypad: 5 Hakbang (na may Mga Larawan)

Video: Programmable Keypad: 5 Hakbang (na may Mga Larawan)

Video: Programmable Keypad: 5 Hakbang (na may Mga Larawan)
Video: 5 SCARY GHOST Videos That'll Make You Sleep with the Lights On 2024, Hulyo
Anonim
Programmable Keypad
Programmable Keypad
Programmable Keypad
Programmable Keypad

Sa proyektong ito ipapakita ko kung paano gumawa ng medyo simple at murang programmable keypad para sa pagmamapa ng iyong pinaka ginagamit na mga keyboard shortcut, application at marami pa.

Ang keypad na ito ay napansin bilang keyboard sa lahat ng pangunahing OS, walang kinakailangang karagdagang mga driver.

Mga gamit

  • Rotary encoder.
  • Maraming (nakasalalay sa iyong mga pangangailangan) mga pindutan ng itulak.
  • Arduino Pro Micro, Arduino Leonardo o anumang iba pang dev board kasama ang Atmega32U4 MCU.
  • Wire, solder, soldering iron, atbp.
  • (Opsyonal) Ang ilang mabibigat na base para sa pagpapanatili ng keypad mula sa pag-slide, gumagamit ako ng lumang 3.5 "HDD

Hakbang 1: Electrical Circuit

Electrical Circuit
Electrical Circuit

Pinili kong gamitin ang Arduino Pro Micro dev board na may Atmega32U4 MCU na mayroong 18 magagamit na mga digital na pin.

Ang mga pin upang ikonekta ang mga pindutan ng push at rotary encoder ay napili nang walang partikular na kaisipan, ngunit ang ilang mga bagay ay dapat tandaan:

  1. Ang lahat ng mga digital na may kakayahang basahin na mga pin ay may panloob na mga pull-up na nagbibigay-daan upang mapagaan ang panlabas na mga resistors ng pull-down. Siyempre ang code ay dapat na ma-update nang naaayon, dahil inaasahan nito ang estado ng pin na pumunta mula sa mababa hanggang sa mataas kapag ang mga pindutan ng push ay pinindot.
  2. Sa encoder.h halimbawa ng library na nabanggit na ang pinakamahusay na pagganap ng encoder ay naabot kapag ang parehong mga pin na konektado sa MCU ay nakakagambala sa may kakayahang mga pin. Karamihan sa mga analog na pin ng Atmega32U4 ay walang nakakagambalang kakayahan.
  3. Hindi mahalaga ang eksaktong mga halaga ng pull-down na risistor, ang anumang mula sa 1 kΩ hanggang 100 kΩ ay gagana nang maayos. Pinapayagan ng mas malaking halaga ng paglaban ang mas maliit na pagwawaldas ng kuryente ngunit nagreresulta sa mas mabagal na tugon ng pin sa mga pagbabago sa boltahe. Piliin lamang ang anumang halaga ng resistors na mayroon ka ng higit.
  4. Ang mga mekanikal na encoder ay hindi pinaka-maaasahang mga bagay dahil sa pagsusuot ng contact at pagba-bouncing. Iyon ang dahilan kung bakit kailangan ng isang mahusay na solusyon sa pag-debit. Ang aking napiling mga halaga ng capacitor at pagkaantala ng mga oras sa code ay marahil ay hindi magbibigay ng pinakamahusay na mga resulta para sa iyo. Kaya kailangan ng kaunting eksperimento. O lumipat sa isang bagay tulad ng optical encoder, ngunit ang presyo nito ay mas mataas nang mas mataas.

Hakbang 2: Assembly

Assembly
Assembly
Assembly
Assembly
Assembly
Assembly
Assembly
Assembly

Nais kong gawing malinis ang hitsura ng keypad, kaya hinangad ko ang lahat ng mga bahagi sa likuran ng prototype board. Naisip ko na ang keypad ay magiging mas ergonomic kung ginamit ito na nakataas sa maliit na anggulo. Iyon ang dahilan kung bakit hinihinang ko ang Arduino Pro Micro sa magkakahiwalay na board at konektado ang lahat ng mga digital na pin na may wire upang itulak ang mga pindutan. Mas maginhawa upang ikonekta ang USB cable sa ganoong paraan.

Natagpuan ko ang lumang 3.5 HDD na gagamitin bilang isang batayan para sa keypad, medyo mabigat at pinipigilan ang pag-slide ng board form sa buong desk kapag nagpapatakbo (tumutulong din ang mga anti-slip pad). Gayundin mayroon itong maginhawang 3 mm na butas ng tornilyo kung saan pinagsama ko ang mga standoff ng tanso at naayos ang board sa bahagyang anggulo.

Hakbang 3: Programming

Ang code ay nakasulat sa Arduino IDE. Kakailanganin mong mag-install ng 2 mga aklatan:

  • Encoder ni Paul Stoffregen
  • Keyboard ni Arduino

Upang makatipid para sa Atmega32U4 kailangan mo ring i-install ang Arduino Pro Micro board file, ang Sparkfun ay may mahusay na tutorial kung paano ito gawin.

Ang isang bagay na dapat tandaan nang maaga ay mag-ingat na huwag iwanan ang "mga pindutan na pinindot" sa iyong code. Nangyari ito sa akin at patuloy na nag-spam ang MCU ng ilang pangunahing kumbinasyon ng press. Ang tanging paraan na alam ko kung paano ayusin ito ay muling sunugin ang boot-loader sa MCU. Kung magtatapos ka tulad ko, maaari mong sundin ang gabay na ito upang sunugin ang boot-loader, kakailanganin mo ng isa pang arduino board upang magamit bilang isang programmer.

Sa pangunahing loop MCU unang nabasa ang bawat pindutan ng estado ng pindutan, kung ang pagbabago ng estado mula sa LOW to HIGH ay nakita, ang function na keyboard_shortcut (i) ay naisakatuparan. Ang variable na i ay isang id ng pinindot na pindutan, ang kabuuang numero ng pindutan ng push ay tinukoy ng ALL_BUTTONS (sa aking kaso 15). Kapag naisakatuparan, ang keyboard_shortcut (i) ay nagpapadala ng CTRL + SHIFT at pagkatapos ay isang sulat na nai-map sa button id: 1-> A, 2-> B, 3-> C atbp. Ang ilang mga kumbinasyon tulad ng CTRL + SHIFT + N ay tinanggal dahil ito ay ginamit na sa Windows10 bilang default (sa kasong ito upang lumikha ng isang bagong folder). Narito ang listahan ng lahat ng mga default na Windows shortcut. Pagkatapos ng maikling pagkaantala ang MCU ay nagpapadala ng signal upang palabasin ang lahat ng mga key at exit ng function pabalik sa pangunahing loop.

Matapos masuri ang lahat ng mga pindutan, susuriin ng MCU kung nagbago ang posisyon ng paikot na encoder at kung gagawin ito, ang keyboard_shortcut (i) ay naisakatuparan na may natatanging id.

Ang pindutan ng encoder pindutin ang invertts encoder ButtonFlag boolean variable. Kapag pinaikot ang encoder iba't ibang mga shortcut ay ipinadala sa PC, depende sa direksyon ng pag-ikot at halaga ng encoder ButtonFlag.

Kung ang debugFlag ay nakatakda sa 1 mga mensahe ng pag-debug ay ipinadala sa pamamagitan ng UART sa serial monitor.

Hakbang 4: Pag-configure ng Mga Shortcut

Pag-configure ng Mga Shortcut
Pag-configure ng Mga Shortcut
Pag-configure ng Mga Shortcut
Pag-configure ng Mga Shortcut

Ang ginagawa ng bawat shortcut ay nakasalalay din sa iyo, lahat tayo ay may iba't ibang mga kagustuhan. Ibibigay ko kung anong mga shortcut ang na-configure ko para sa aking sarili bilang isang halimbawa. Gumagamit ako ng Linux Mint 19.3 kasama ang xfce4 desktop manager, kaya't ang aking mga halimbawa ay pangunahing nagsasangkot ng mga script ng bash, ngunit magpapakita rin ako ng ilang pangunahing mga halimbawa para sa Windows10.

Sa unang larawan maaari mong makita kung aling mga script ang nai-mapa ko sa aling mga mga shortcut. Tapos na ito mula sa menu ng mga setting ng xfce, proseso para sa ito ay tuwid na pasulong. Mahahanap mo ang mga script na ito sa aking Repository ng GitHub

Ang mas maliit na 6 na pindutan ng push sa ibaba ay para sa pagsisimula ng mga application tulad ng web browser o file manager, ang ilan sa mga application na ito ay tinawag mula sa start_only_one_app.sh script, na nagsisimula sa lahat ng mga nagsimulang pangalan ng application at maghanap para sa application na nais mong simulan. Kung mayroon nang window ng application ay nakatuon ito, iba pang bagong halimbawa ng isang application ay nasimulan.

Iba pang mga script:

  • 2nd_display_control.sh - lumilipat sa pangalawang monitor na ON / OFF.
  • moon_lamp.sh - switch / I-OFF ang aking Moon Lamp.
  • pc_load.sh - lumilikha ng bubble ng abiso sa kasalukuyang paggamit ng CPU at GPU at mga temperatura.
  • shutdown.sh - pinasimulan ang pag-shutdown ng PC na may 1 minutong pagkaantala at lumilikha ng bubble ng notification kung saan ipinakita ang natitirang oras.
  • spec_vpn.sh - kumokonekta sa tukoy na OpenVPN server o kung mayroon nang koneksyon, mag-disconnect mula sa server.
  • shortcut_controll.sh - kumukuha ng utos (plus, minus, tab, close) bilang argument, nakita kung anong window ang nakatuon ngayon at kung ang tukoy na application ay matatagpuan na aktibong nagpapatupad ng pagkilos na kontrol. Halimbawa upang buksan ang bagong tab sa sublime text editor default na shortcut ay "CTRL + N" at sa xfce terminal - "CTRL + T", kaya pinapayagan ng script na ito na buksan ang bagong tab sa sublime at terminal na may parehong pindutan ng push.

Ang unang pag-andar ng rotary encoder ay upang makontrol ang dami, pangalawang pagpapaandar ay upang makontrol ang aktibong window zoom sa pamamagitan ng shortcut_controll.sh.

Para sa Windows OS maaari kang mag-map ng mga shortcut sa mga application sa pamamagitan ng window ng mga katangian ng programa tulad ng ipinakita sa pangalawang larawan. Para sa anumang bagay na gugustuhin mong gamitin ang AutoHotkey. Ito ang wika ng pag-script ng awtomatiko para sa Windows.

Ang ilang mga simpleng halimbawa ng AHK syntax:

; Pagkontrol sa dami

^ + t:: Ipadala ang {Volume_Up}

bumalik ka

^ + v:: Ipadala ang {Volume_Down}

bumalik ka

; Isara ang aktibong window

^ + h:: WinGetTitle, Pamagat, A

PostMessage, 0x112, 0xF060,,,% Pamagat%

bumalik ka

; Shutdown PC

^ + b:: Patakbuhin ang pag-shutdown / s

Hakbang 5: Mga Pagpapabuti

Mga pagpapabuti
Mga pagpapabuti

Ang ilang mga posibleng pagpapabuti:

  • Mas mahusay na kalidad ng mga pindutan ng itulak.
  • Ang prototype PCB ay medyo nagbaluktot kapag pinindot ang mga pindutan.
  • Ang pag-iilaw ng RGB upang baguhin ang kulay depende sa kung aling function ng rotary encoder ang nakatakda.
  • Higit pang mga pindutan (gumamit ng IO expander IC).
  • Mas mahusay na rotary encoder (o mas mahusay na solusyon sa pag-debog).

Inirerekumendang: