A glove-type wearable Hangul keyboard — type Korean anywhere, in any posture, without looking.
16 tactile switches on the finger phalanxes of a pair of gloves, pressed by the same hand's thumb. The device enumerates as a standard USB HID keyboard sending Dubeolsik (두벌식) keycodes — no driver, no companion app; the OS IME composes Hangul exactly as with a desktop keyboard.
Built for the Mechatronics course at Seoul National University and exhibited at the 15th SNU College of Engineering Creative Design Festival (창의설계축전, 2026).
Keyboards have kept the "board on a desk" form factor for over a century, which breaks down when:
- VR/AR — with an HMD on, expert typists drop from 41.4 to 26.3 WPM on a physical keyboard, and controller-pointing virtual keyboards top out around 15 WPM. Text entry is a known bottleneck of XR (CHI 2025 survey).
- Accessibility — Korean braille notetakers cost ~₩6,000,000, yet only 13.7% of Korean visually-impaired people can read braille. There is no low-cost, braille-free tactile text-entry device for the remaining ~86%.
- Posture — desk-bound typing anchors the neck-forward, seated posture associated with musculoskeletal load (7.05M VDT-syndrome patients in Korea, 2024).
Total BOM: ₩14,184 — deliberately built from commodity parts. The contribution is the input mechanism, not the form factor; switches, gloves and wireless are swappable layers.
-
Phalanxes are built-in keycaps. HCI research (DigitSpace, CHI '16) shows people can distinguish ≥16 buttons on their fingers eyes-free via proprioception. 8 buttons per hand stays comfortably within that capacity. Button positions were selected from user tests of thumb-reach comfort ("sweet spots").
-
Multi-tap = stroke addition (가획). Base consonants/vowels are one tap; derived jamo come from tapping the same button again (ㄱ→ㅋ→ㄲ), mirroring how Hangul letters are graphically derived. One rule to memorize. Because Hangul base letters largely coincide with the highest-frequency jamo, this learnability-first layout inherits frequency-optimal coding: KSPC 1.27 (−26% vs. frequency-blind layout), 74% of input is a single tap (see
analysis/RESULTS.md). -
Sequential, never chorded. Chorded keyboards have failed for 40 years on memorization burden (Twiddler: 4.3 WPM in session 1). Discrete tactile switches give a deterministic, eyes-free confirmation click — no probabilistic gesture recognition.
-
Per-user calibration. The multi-tap window (default 300 ms) is calibrated per user: type one pangram-like sentence and the firmware stores your personal window in EEPROM (
firmware/calibrate_window.py).
Pilot speed: 9–15 WPM (3 users) — on par with state-of-the-art hands-/eyes-free techniques (9–16 WPM range at CHI '18–'26).
firmware/
keyboard_glove/ Arduino Leonardo firmware (USB HID, multi-tap engine,
serial-configurable tap window, EEPROM persistence)
keyboard_glove/legacy/ original course-project sketch (development history)
calibrate_window.py per-user tap-window calibration tool (pyserial)
experiments/
PROTOCOL.md 5-experiment protocol (Korean): button reach-time & mapping
cost, learning curve, usability/posture, cursor-OSK comparison,
eyes-free — standard text-entry methodology (MacKenzie et al.)
logger.py transcription/tapping logger GUI (stdlib only)
speed_test.py 1-minute random-word speed test GUI
tv_osk_test.py TV-remote-style cursor on-screen keyboard (comparison baseline,
incl. a full Dubeolsik composition automaton)
analyze.py metrics & figures: CPM/WPM, MSD error rate, learning curve,
mapping-cost vs. 10,000 random layouts
mapping.json 16-button ↔ jamo mapping (single source of truth)
analysis/
mapping_analysis.py corpus → jamo frequency, KSPC, same-button bigram rate
RESULTS.md current quantitative results
docs/images/ photos & diagrams
| Part | Qty | Note |
|---|---|---|
| Tactile switch | 16 | 2 per finger (index–ring), 1 on pinky + 1 function key, per hand |
| Arduino Leonardo (ATmega32u4) | 1 | native USB HID |
| Gloves, wiring harness | 1 set | |
| Total BOM | ₩14,184 |
Flash firmware/keyboard_glove/keyboard_glove.ino (Arduino IDE, board: Leonardo).
Serial commands at 115200 baud: W<ms> set tap window · S save to EEPROM ·
C1/C0 calibration stream · ? status.
# needs Python 3.8+; GUIs use tkinter (stdlib), no pip packages
python experiments/speed_test.py # 1-min speed test
python experiments/logger.py --mode transcribe --participant P01 --session S1
python experiments/logger.py --mode tap --self-test
python experiments/tv_osk_test.py # cursor-OSK baseline (--selftest available)
python experiments/analyze.py transcribe # figures (needs matplotlib)
python firmware/calibrate_window.py # needs: pip install pyserial- Mapping efficiency & pilot speed:
analysis/RESULTS.md - Learning curve, cursor-OSK comparison, eyes-free study: in progress (protocol in
experiments/PROTOCOL.md) - Competition report: to be published after the festival (Sept 2026)
Department of Mechanical Engineering, Seoul National University.
MIT — hardware design, firmware and experiment tools.




