Git Product home page Git Product logo

dactyl-lynx-keyboard's Introduction

The Dactyl Lynx Keyboard

The Dactyl Lynx is a parameterized, split-hand, concave, columnar, ergonomic keyboard.

This is my fork/rewrite of the original Dactyl. I've changed a few things:

  • Rewrote the generating code in Python instead of Clojure, using SolidPython2 and spkb.
  • Rotated thumb clusters to be close to vertical (inspired by the Dactyl-ManuForm and the way my thumbs move; see also Viktor Eikman's DMOTE and Concertina keyboards)
  • Steeper tenting angle
  • 1U or 2U keycaps - easy to source
  • A new adjustable skeletal design (which will probably change once I solidify the physical placement of the wells, but I'll likely keep around as an option)
  • Modified keyswitch holes to support Kailh hot-swap sockets

Skeleton prototype

Future plans

  • Adding a TrackPoint module between the D, H, B, and M keys (H, J, N, and M on QWERTY) - I already implemented this in the Clojure version, but I haven't yet ported it to the Python version
  • Adding mouse buttons and a scroll ball from an Apple Mighty Mouse next to the right-hand thumb cluster
  • Adding a thumbstick to the left side?
  • Multiple user-defined key maps that can be uploaded via USB and easily toggled between on the fly (I want this to replace my Orbweaver) - Use QMK's Raw HID support or maybe Vial. (though Vial has a limitation of 4 layers)
  • Adding support for ALPS or Choc switches instead of MX-style switches, along with appropriate hot-swap sockets (this will be mostly implemented in spkb first)

Assembly

Generating a design

Prerequisites

Installing dependencies

pipenv install

Generating

pipenv run python src/dactyl_lynx_keyboard/dactyl_lynx.py

To view the available options:

pipenv run python src/dactyl_lynx_keyboard/dactyl_lynx.py --help

Printing

Pregenerated STL files are available in the things/ directory. For now, you're better off generating the model directly instead of using any of the existing files in the things/ directory.

Bill of Materials

  • 2x microcontrollers - one of the following (see QMK docs for what combinations make sense)
  • 2x 4+-conductor jacks and matching cable to connect the two sides using full-duplex serial; one of:
    • 4-pin mini-DIN (A.K.A. S-Video) - recommended; if accidentally tugged on, it will cleanly disconnect without shorting anything and without pulling the other side of your keyboard off the desk
    • 4P4C, 6P4C, or similar modular connector (A.K.A. RJ11 or telephone plug)
    • TRRS audio jacks - not recommended; if you use this, be careful to not connect or disconnect the cable while the board is powered on!
    • any other 4-pin (or more) connector, though be wary of things like USB connectors that would be easy to mistake for other buses
  • 74x MX-style key switches (or maybe Alps-style; I haven't actually checked if that will still work correctly)
  • 74x signal diodes (1N4148 or similar works well)
  • 74x Kailh hot-swap sockets (optional - you can replace all mentions of mx_plate_with_backplate with mx_plate in <src/dactyl_lynx_keyboard/dactyl_lynx.py> if you want to solder directly to the switches; eventually this will be a command-line option)
  • A set of 74+ keycaps - symmetric unsculpted profiles work best with the sculpted form factor of Dactyl-style boards
    • 72x 1u keycaps
    • 2x 2u keycaps
  • A USB-C (or USB Micro-B, depending on your microcontroller) cable to plug in your keyboard
  • connection wires (and ideally some Dupont-style connectors for the microcontroller side of things, so you can swap the microcontroller if/when needed)

Wiring

This is by no means a comprehensive guide to wiring a keyboard, but here's the approach I chose when building my first Dactyl Lynx:

  • use COL2ROW diode orientation

  • solder diode leads together for the rows

  • use insulated hookup wire for the columns

  • pick a pinout for wiring the 4-pin mini-DIN connectors: 4-pin mini-DIN pinout

  • connect each column and row of a side to a different color of wire: (aside from some repetition because I ran out of colors)

    Position Left Side Right Side Pin
    Column 0 brown brown 2
    Column 1 red black 3
    Column 2 orange white 4
    Column 3 yellow grey 5
    Column 4 green purple 6
    Column 5 blue blue 7
    Row 0 red brown 8
    Row 1 orange red 9
    Row 2 yellow orange 10
    Row 3 green yellow 11
    Row 4 blue green 12
    Row 5 (thumb) purple green 13
    Row 6 (thumb) grey yellow 14

    Note: the right side's color scheme should probably not be used; it's definitely more haphazard because it was done ad-hoc. Note 2: the top columns cable on the left side finger well is wired in reverse; brown goes to column 5 instead of column 0, and so is on pin 7 instead of 2. The cable connecting to the thumb well is correctly wired, so the colors switch at the column connections.

Wire according to the key matrix in my whitelynx/dactyl_lynx QMK branch.

Firmware

See the corresponding firmware in my whitelynx/dactyl_lynx QMK branch for instructions on building and flashing the firmware.

License

Copyright © 2015-2024 Matthew Adereth and David H. Bronke

The source code for generating the models (everything excluding the things/ and resources/ directories) is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE Version 3. The generated models and PCB designs are distributed under the Creative Commons Attribution-ShareAlike License Version 4.0.

dactyl-lynx-keyboard's People

Contributors

adereth avatar dfc avatar erincall avatar joe-warren avatar joedevivo avatar mathias avatar whitelynx avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

starnamer

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.