This post is a less interesting follow up to my recent catalogue of girth 6 graphs for keyboard wiring, which give 4-key roll over (4KRO). As explained in my first keyboard and Graph Theory blog post, the idea here is applying these graphs to the design of diode-free computer keyboards where the bipartite matrix becomes a sparse scanning matrix. Using a graph with girth 8 gives 6-key rollover (6KRO), high enough not to be a practical limitation, unless perhaps for stenography? Sadly from a mathematical point of view these are mostly subgraphs of the Tutte Coxetter Graph (aka the Tutte 8 Cage), the unique smallest trivalent graph of girth 8.
| Nodes, GPIO | Edges, Keys | Example Girth 8 graph(s) | Example Keyboard(s) |
|---|---|---|---|
| 11 | 12 | Theta graph θ_{4,4,4} | |
| 12 | 13 | Trivial addition to the above | |
| 13 | 14 | Theta graph θ_{2,6,6} | |
| 14 | 16 | Ring with two crossings, or this other Unnamed Graph. | 32-key split |
| 15 | 18 | Unnamed Graph | 36-key split Corne, Sweep, etc |
| 16 | 19 | Partial Tutte-Coxeter, or this Partial Tutte-Coxeter | 38-key split Totem |
| 17 | 20 | Unnamed Graph, or this Unnamed Graph | 20-key ChouChou |
| 18 | 22 | Partial Tutte-Coxeter | UT22 |
| 19 | 23 | Not in DB, but another partial TC | |
| 20 | 25 | Pretty Partial Tutte-Coxeter | |
| 21 | 26 | Not in DB, but another partial TC | 26-key ʻākohekohe, 26-key smallcat |
| 22 | 28 | Partial Tutte-Coxeter | 28-key Zilpzalp, 28-key Grumpy |
| 23 | 30 | Not in DB, partial version of next | 30 key Hummingbird |
| 24 | 32 | Pretty Unnamed Graph, or a another partial TC | 32-key Visorbearer |
| 25 | 34 | Not in DB, but another partial TC | 34-key Le Chiffre |
| 26 | 36 | Partial Tutte-Coxetter Graph | Gamma Omega TC36K |
| 27 | 38 | Not in DB, but another partial TC | |
| 28 | 40 | Partial Tutte-Coxetter Graph | 39-key Reviung39 |
| 29 | 42 | Not in DB, but another partial TC | 42-key Osprey |
| 30 | 45 | Tutte-Coxetter Graph | 45-key Splaynck, 44-key Masonry |
| 33 | 49 | Unnamed graph (extended TC) | |
| 34 | 51 | Unnamed Graph | |
| 36 | 54 | Unnamed cubic graph | My Slump52 has 52 keys |
| 38 | 57 | Unnamed Graph | |
| 40 | 60 | F040A in the Foster Census | |
| 44 | 66 | Unnamed graph | Lots of 60% keyboards |
| 48 | 72 | Unnamed graph | Lots of 70% keyboards |
| 52 | 78 | Unnamed graph | |
| 55 | 90 | Unnamed graph | |
| ... | ... | ||
| 80 | 160 | Unnamed graph |
The rows above without a DB entry are trivial changes of the entry above/below, mostly partial Tutte-Coxetter Graphs. There are probably many other graphs just as good (like the entry with 24 nodes and 32 edges, and subgraphs of that), but I am reasonable sure the above edge counts are upper bounds.
The very small graphs are unlikely to be attractive unless size rules out a larger controller with more GPIO pins, as otherwise direct wiring is possible (one GPIO per key-switch) as in the 20-key ChouChou example listed above using an RP2040-Zero.
Currently the only 6KRO keyboard built using Graph Theory that I know of is my 36-key Gamma Omega TC36K. Monobody keyboards around that size are a good fit to many of the readily available Raspberry Pi RP2040 controllers which offer up to 30 GPIOs.
Other than partial Tutte-Coxeter graphs (as in my TC36K design), the following seem most interesting:
- The 15 nodes with 18 edges graph would be good for a Bluetooth split 36-key keyboard using something like the ESP32-H2-Zero controller (with 15 GPIOs - not currently suppored in ZMK).
- This 17 nodes for 20 edges graph includes two nodes of degree 5 so you could use it as-is to have a 5-way navigation button (see previous blog post) and 15 keys with 6KRO. That would work in a split wired keyboard using the RP2040-Zero controller or similar with 20 GPIOs, and with one or two pins spare so you could even have 16 keys per half or a combined ANO Directional Navigation and Scroll Wheel Rotary Encoder.
- This 24 node and 32 edges graph would be be good for a Visorbearer-like monobody 32-key keyboard, using the PR2040 Pro Micro or Pico controller. Again with a few pins spare you would be able to add a 5-way navigation button (or two) by extending the graph (but only 4KRO with the navigation buttons used).
- Going larger, controllers like the Solder Party RP2350 Stamp XL have 48 GPIOs. At this scale there are multiple options with 1.5 keys per GPIO like F048A (40 nodes and 60 egdes), up to the 48 node 72 edge graph. So you could make a 6KRO diode-free 60% or even 70% keyboard (if you had the patience to do the wiring).
Going even larger is possible, with 80 GPIOs you'd reach two keys per GPIO for a 160 key monster. However I'm not aware of any controller chips with enough GPIOs. You could use IO extenders, but at that point there's no reason not to just use diodes.
No comments:
Post a Comment