Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://gitlab.com/evils/waad

Getting my feet wet on keyboards, een voor de hand liggend project.
https://gitlab.com/evils/waad

capacitive dvorak keyboard plover qwerty steno stenography touch

Last synced: about 10 hours ago
JSON representation

Getting my feet wet on keyboards, een voor de hand liggend project.

Awesome Lists containing this project

README

        

= waad steno keyboard
Evils
:homepage: https://gitlab.com/evils/waad
:license: CERN-OHL-W-2.0
:keywords: steno, stenography, capacitive, touch, keyboard, plover, dvorak, qwerty
:toc2:
:sectanchors:
:sectlinks:

== Requirements
=== Hardware
* split unit from one 100x100mm PCB
* capacitive touch keys
* at least 22 keys for steno
* micro sd card slot
* all solder joints reworkable with iron
* at least 1 RGB status LED

=== Software
* output over USB as a HID
* raw key press output option

== Problems
* a chord consists one or more keys, possibly pressed by the same finger
** includes pressing multiple keys in a column
*** and pressing 2-4 of the outer pads at once (`H-*`, `-TD`, maybe `-TSDZ`)
* a word, phrase or character is a value in a dictionary the key for which being a sequence (length 1 to at least 11) of chords
* there are implicit rules (in plover) for appending common suffixes (like 'ing' or 's' for pluralization) to dictionary entries
* keeping the dictionary on the chip is not practical, external RAM could work, but price (and loading time?) rule that out

== Approaches
=== Hardware
==== Mechanical
* 100x100mm PCB (plus some compensation for the milled slot if the manufacturer allows it)
* single sided load
** USB type C on the bottom of one (left?) half
*** requires feet high enough to clear the cable
*** rules out through hole mechanical pins?
** interconnect, capacitive sense chip(s) and (minimal) MCU on top on the other half
* homing
** notch at the edge between the thumb pads as a resting spot
*** leave complementary bump at pinky?
*** these may need a dead zone / cut corners, to allow resting
** crosses/blobs of silicone on the nodes may help to detect a near miss
*** if these are thick enough, and the signal of a normal touch large enough, they may be a dead zone and allow for resting and dead reckoning
**** cutting corners under these may help
*** `-TSDZ` may also be needed, prefer not to make that a dead zone / resting position

=== Electrical

=== Software
* expand dictionary to make suffix rules etc. explicit
* retrief dictionary entries at decode time from sd card

== Rev 0 goals
* try out an MCU with integrated cap touch sensing
* try out USB Type C
* try out microSD card
* try out a recent board/pad design
** try at least the "dumb" row split (straight line, no interdigitation)
*** maybe try out {tilde}3mm truncated zigzag interdigitation with minimal clearance (0.2mm?)
** feel the thumb notch on a 1.6mm board on rubber feet
* try 20% hatched and solid ground fill behind pads
* trial having the MCU under pads
* find out if routing sense traces under pads is a problem

== Wanted Features
=== Hardware
* all components on top of both halves, to lay flat
** not possible with skewed split from 1 PCB
*** 2x left from 1 PCB, 2x right from 1 PCB would work
**** may still lack board area
* fallback to microswitches, if pad design and sensing allow it

=== Software
* multiple optional filter definitions
. map from available hardware pads (board specific naming) to something standardized
*** 22-32 capacitive pads to 22 steno keys or to qwerty/dvorak/whatever
. map chords to words
*** steno decompression / lookup in an (expanded) dictionary
. map words to an output format
*** to allow dealing with host side remapping (dvorak on qwerty main keyboard)
* "paper" output (display at least the buffered chords)
** separate output, maybe an emulated serial port? (mirror on hardware?)
* dotterel style sticky keys to build up a chord
* keep steno and qwerty keyboard connected to a PC set to remap qwerty to dvorak and use either without reconfiguring the PC
* steno standard output like `Gemini PR` or `TX Bolt`
* near infinite undo
* usage statistics
** error statistics
** problem: passwords
* fallback to raw output when sd card is missing

=== Both
* use either side standalone
* break out pins for PS/2 touchpad/trackpoint and/or GPIO
* break out pins for a display for the "paper" output
* DIP switches / solder blob programming
** 2 bits to set e.g.: `qwerty / no / azerty / dvorak` HID output
*** to compensate for what the receiving device expects
** 2 bits to set `60% emulation / steno / raw / arbitrary` pad to keystroke mapping
** 1 bit power switch
** 1 bit for firmware flashing or recovery
** 1 user bit

== Speculation
* quick estimate, 1M entries per language, 500 bytes per entry, 4 languages (and assuming none of these have any chords in common) and a doubling in size after pre-digesting to apply `-ing`, `-s`, etc rules
** that's 4gb, 32gb microsd card is < €10
* longest combo in the plover supplied dictionary is 11 chords (allow for at least 20?)
* a chord is defined by the keys pressed within the span of the first key being pressed pressed and the last being released?
** finger repositioning should be possible, especially with capacitive sense
** keys that were pressed some time before all are released

== Notes
* IME (Input Method Editor) is a portable OS native path to implementing the translation

== Copyright and License
This work is: +
Copyright 2020, evils. +
Licensed under CERN-OHL-W v2 +
(SPDX identifier: {LICENSE}) +
Source Location: {homepage} +
(Please keep that link available if you modify this work.)

== Links
=== Hardware
* {homepage}
** this project, experimental unrealized hardware
* https://www.st.com/en/microcontrollers-microprocessors/stm32f072rb.html
** all the touch related Application Notes in the resources
* Microchip, Renesas, Cypress, Semtech all have touch related ANs, i may link some here if i read any and find them useful

=== Software
* https://github.com/crides/steno
** reuses some stuff from dotterel
** expands dictionary with rules, collapses it to a tree
** runs on a 32u4 with an sd card, bottlenecked on output to computer
** dedicated hardware included
* https://github.com/nimble0/dotterel
* https://github.com/mike-ady/Stenokey
* https://github.com/StarGazer1258/Charadriidae
** a steno engine written in C from scratch
* https://github.com/CharleyShattuck/myforth-arduino
* https://github.com/stanographer/plover-pi/blob/master/plover_raspbian.sh
* https://github.com/FromtonRouge/qmk_firmware/tree/master/users/fromtonrouge
** uses several regex rulesets
* https://www.mykeyboard.co.uk/keyswitches/