Giter Club home page Giter Club logo

dometyl-keyboard's Introduction

Dometyl Keyboard

Splaytyl Build

Another Dactyl inspired keyboard. Supporting MX, Choc, and even rubber domes.

This is a library for generating paramaterized split-hand, concave, columnar, ergonomic keyboards in the spirit of the Dactyl, but written from the ground up in ocaml, rather than clojure. Dometyl also takes inspiration from a lineage of Dactyl-like keyboards that evolved from the original script, including the Compactyl itself a fork of forks of dactyl-manuform keyboards with many accumulated features, and the Skeletyl, a sleak, low-profile, open-case design built in Fusion360.

The name (rubber) dometyl comes from this library's introduction of a means of building split-hand concave keyboards with rubber domes. Taking advantage of the readily available Niz housing and sliders, and third-party non-sheet rubber domes (e.g. DES BKE DOMES), we can build dome-with-slider switches of our own without canabilizing an existing Topre or Niz board. You may be thinking that we still need expensive to obtain conical springs, and difficult to design (and very difficult to make use of inside a curved case) electro capacitive sensing PCBs to complete the picture, but then you would be wrong! One need simply glue magnets to sliders, and glue hall-effect sensors into a case, and voila the rubber dometyl is born.

niztyl - gone topless

The relevant code for generating the required keyhole can be found in the Niz module, the first example of a board configuration using them here, and the build showcase for it here.

Of course, if you aren't an insane person, the dometyl generator also supports more civilized Mx and Choc switch options.

Setup

This generator is written in ocaml, so you'll need to get an environment set up, including the package manager opam and the build system dune (which we'll install through opam). You'll of course also want OpenSCAD to preview/render/export the generated models (see OpenSCAD configuration for tips).

After installing opam, and confirming that you are in this branch, you can run the setup.sh script for convenience, or follow the instructions under the opam dependencies sub-section.

opam dependencies

All dependencies are available from the opam package manager including the build system dune, and of course OCADml, OSCADml and ppx_deriving_cad for the modelling. I'd also recommend that you pick up the listed dev tools (which you'll want to get the corresponding packages/plugins for in your editor of choice).

Required: From this folder (repo root):

  • opam install . --deps-only --with-doc
  • dune build

Highly recommended for dev experience:

  • opam install merlin ocp-indent ocaml-lsp-server ocamlformat ocamlformat-rpc

OpenSCAD configuration

It is highly recommended that you use a development snapshot of OpenSCAD, rather than whatever version your package manager may have for you. Then under the Features tab in Edit/Preferences and check the following:

  • fast-csg, fast-csg-trust-corefinement, fast-csg-remesh, fast-csg-remesh-predictability, lazy-union, vertex-object-* The newly added fast-csg and related features speed up rendering considerably, making the development cycle much more pleasant

Documentation

API documentation and usage guides are available online.

Usage

  1. Make a new .ml file in models, maybe starting with a copy of and existing one and and modifying it to suit your preferences / fit your hand.
  2. Modify main.ml, adding lines to generate and write your case models/parts to file with Scad.to_file.
  3. Run your main.ml with dune build @models from the dometyl project folder. Any .scad files produced will then appear in the models directory. For a more fluid experience, you can install fswatch (cross-platform) or inotify (GNU/linux) on your system, and use dune build -w @models to automatically build and execute on file changes.
  4. Open generated .scad files in OpenSCAD where they can be previewed/rendered/exported to .stl. If a viewed .scad is overwritten by compiling and running the generator, the changes will be visible in the GUI.

Direct Export

dune build @export_models is also made available for convenient batch stl export. When run, this rule will call out to the openscad cli (assumed to be installed on your system) to asynchronously export all of the scad files in models directory to stl models in the models directory at once.

Note:

  • Enabling fast-csg and the like is not currently supported by the OSCADml CLI helpers.
  • STL export can take quite a while (which is why this can be helpful) and consume a lot of resources, so one should be mindful of what one is signing up for by building this rule.
  • Unfortunately, CLI export sometimes fails in CGAL when the same model would pass via the GUI.

Example Output

  • An uglier recreation (yellow) of the BastardKB Skeletyl v4 (purple). bk skeletyl comparison This configuration can be a good place to start if what you are looking for is minor tweaks to more "standard" dactyl-like curvatures and offsets (or you want hotswap sockets).
  • Configurable heat-set insert screw holes, magnet insets, or bumpon feet can be placed at the base of walls of your choosing splaytyl bumpon view
  • Base plates and configurable tents can be generated to fit your case, using either screws (into brass insets in the case), or magnets for mounting. splaytyl bottom plate splaytyl tent

Builds / STLs

There is a showcase of finished builds and some example STLs here, including some pictures, bills of materials, and notes. If you've designed and built a board with the dometyl generator, and you are happy with it, please consider contributing the configuration to the models directory, and adding a folder to the boards showcase.

MCU / TRRS jack holders

  • A few solutions for MCU (elite-C and pro-micro currently) and TRRS jack mounting are available at the moment. Rough placement is done with the help of coordinates kept within the records of the Case.t type, with offset and rotation parameters available to fine-tune.
  • Firstly, there is support for using the familiar slot-in trays from dereknheiley (reversible, elite-C without and without reset button access) and carbonfet (non-reversible, elite-C and pro-micro). Eventually a more tailored tray holder that should be available, but these existing stls can get the job done today.
  • Second, the BastardKB shield pcb used in the Skeletyl (as well Quentin's other boards) is supported as well. In addition to making the required insets/holes in the case, the included helper functions will place configurable eyelets for heatset inserts for mounting. BK shield side-view BK shield under-view Some time ago, I ordered way too many of these off of JLCPCB, so if you are in NA, something could likely be arranged! Alternatively, if would like to use this mounting method rather than one of the trays, and you don't want get PCBs made, there is an stl available which you can print and solder your components around / glue to.
  • When using one of the trays, be mindful that the rails/slots are cut nicely in the wall, and for an option that cuts ports into the wall, be sure that they don't start too far away from the outside, so that the plugs will be able to reach. Walls.make has an index_scale parameter so that these holder-relevant walls can be tuned separately from the rest to adapt to your chosen mounting method.

The Hand

Hand There is an as yet undocumented (and subject to evolution) Hand module available to play around with. One can generate hand from knuckle (base of proximal bones, or the meta-carpal for the thumb) offset coordinates and bone lengths, then pose it with the available flexion/extension/abduction/adduction/etc functions, and place it over the home row of a generated Plate.t. Hopefully this can help give you a sense of what column offsets and curvatures are going to work for you before you commit to a test print.

Troubleshooting

Now and then, when you attempt to render a model, part of it will disappear. This is due to my imperfect abuse of OpenSCAD polyhedrons, which can sometimes self-intersect despite the so-far built-in preventative efforts. The walls (from keyholes to the ground) and the connections between the walls both use polyhedrons so they are prone to breaking in this manner.

When this happens, and more than one piece of the case disappears (e.g. all of the connections between the walls), it can be useful to narrow down which part(s) in particular caused it, since it isn't necessarily all of them that have gone bad. To help with this, you can use Thrown Together mode in the OpenSCAD GUI (found in the View menu, or activated by hitting F12), which will show pink where you can see into the inside of any shapes (unclosed mesh).

Generally, you should be able to fix the problem by adjusting the parameters used for drawing the polyhedrons in question, such as scaling walls to prevent them overlapping with eachother, adjusting resolution with ~fn parameters, etc.

Contributing

Contributions extending the functionality of the library (in addition to board configurations as mentioned above) are welcome. If you plan to make a PR, please have autoformatting working with your editor working (using the .ocamlformat profile included in this repo) beforehand, and ammend/write doc comments in the relevant interface files (already not 100% as is).

License

Copyright © 2023 Geoff deRosenroll

The source code for generating the models is distributed under the GNU AFFERO GENERAL PUBLIC LICENSE Version 3.

The generated models are distributed under the Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0).

dometyl-keyboard's People

Contributors

geoffder avatar jdart-bold avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

dometyl-keyboard's Issues

Closing walls between thumb cluster and main body

Hi,

Firstly, thank you for making this generator available. I think you have managed to incorporate many great features that make building a Dactyl-like keyboard a lot easier. (For me those would be the compatibility with BastardKB's shield PCB and simple tent/eyelets generations).

I'm currently using a handwired Skeletyl with the original design from BastardKB. It works perfectly, but I have come to realize that I wanted a "closed" version to hide the wiring mess inside. Starting with the dometyl's version of the Skeletyl as well as the Closed Splaytyl, I managed to reach halfway there: The columns are now connected and fully closed, eyelets are in correct spots, so the only thing left to do is connecting the thumb cluster with the main body.

image

However, that last task turned out to be more difficult than I anticipated. My unfamiliarity with ocaml is the main roadblock to understand the Documentation fully, and I didn't really get anywhere just trying different Generator.Connect options, so I figured that I should look for help instead.

Here is my very crude first stab at a Closed Skeletyl. Please advise me on how to achieve my goal (if it's even possible at the moment). Thank you very much!

https://github.com/kagoromo/dometyl-keyboard/blob/3358873e1051f339ca1889142dceba54c9ed996e/dometyl/lib/boards/skeletyl_but_closed.ml

scad extension not added to generated files

All the base models and incl_ models are being generated, but only as plain files with no extension. This causes dune build @export_models to not work as well (I'm assuming) as it can't detect any .scad files

Splaytyl 1u pcb's compatibility

Hello!

I'm thinking about making a splaytyl keyboard with some slight changes, and I wish to use the 1u pcps that you showed in the Dartyl Choc Edition.

The 1u pcbs will be compatible with the splaytyl?

Thanks for developing this awesome project!

4 rows

Hi,

I'm trying to generate a choc_skeletyl with 4 rows and 6 columns. I open the scad file generated with openscad 2019.05 and I can see all the columns connected at the base , as it should be, but when I do the render the connection on the east side (pinky) and the connections between the columns in the north side are gone. If I do the same thing with 3 or 5 rows the scad file is rendered properly.

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.