KeyV2: Parametric Mechanical Keycap Library

by rsheldiii Jul 27, 2018
Download All Files

Thing Apps Enabled

Please Login to Comment

I'm working on adding the option to put text on the front of a key. This should allow the top of the key to stay smooth and feel nice. This code in keys.scad will give me a letter on the front of the default key:

keytext("3", [0,0], 7, 0.5);

Do you have any advice for how I should add this into the library? I can scrape by with this but I would like to try a proper feature addition. I've never used children() to this extent and I'm having trouble following how everything fits together.

hey there! that would definitely be a neat addition to the library, top surfaces are pretty hard, plus you could go for a stealth keyset look.

I think this would go best in the features/ directory here: https://github.com/rsheldiii/KeyV2/tree/master/src/features since it's creating a new feature on the keycap and not modifying an existing one / creating a whole new class of features.

I made a writeup on the technical design of the keycap, since it's definitely confusing: https://github.com/rsheldiii/KeyV2/wiki/Technical-Design-of-a-Keycap. I think the easiest way to genericize this is to place the letter where you have, but allow for extra, configurable letter height. The shape used to just be defined by the height and width difference, but now it's actually a succession of hulls of a shape algorithm in order to support the bowed edges of SA and DSA keycaps, so that's why the code doesn't currently work with those types of keycaps.

Shouldn't be too hard. Whenever you've got the code ready, open a PR: https://github.com/rsheldiii/KeyV2/pulls and I can give it a further review and add it to the repo!

I don't know how to do this but I would love for this to be added. If someone knowledgeable could help that would be amazing!

Thank you for this thing! Thumbs up to you!

  • Posted with 3D Geeks Thingiverse Browser App

is there a way to make the SA keycaps deep dish/high pro/mt3 style?

not officially yet, no, but if you play around with the settings in sa_profile.scad you could come pretty close just through dead reckoning. I have /dev/tty keycaps, I've been meaning to measure them to recreate the profile, I just haven't got around to it yet

thanks i mess around with it and see if i can get it to work! and that would be incredible if you did MT3! i would for sure take the time to post process a while set of MT3, and your stems are the only ones that have worked for me, everything else always needed to be shaved inside.

So, I am trying to find a way to make a 2u POS style (2u with 2 stems that spam two normal key sizes). Any idea how/if it's possible?

2u() blank() stabilized(), you may need to put a number in the parameters for stabilized and play around with it to get the spacing right, but that should work.

Hi there, I have no background in engineering and/or autocad. but I am a keyboard enthusiast who is interested to 3d print some keycaps.
any guidance as to how i might be able to include legends on the keycaps?


To learn what types of keys you can generate with this library, check out the documentation at https://github.com/rsheldiii/keyV2

Comments deleted.

Having issues with stabilized keys. The cherry stem and box stem both conflict with the standard cherry stabilizer and the rounded stems are near impossible to print without unusable imperfections. Any Suggestions? (Yes, I'm trying to make a full keycap set, call me crazy...)

Haha, full keysets are supposed to be supported!

Yeah the standard rounded cherry stem never printed well for me, people kept asking for it though so I included it. Interesting, looks like I might have overlooked testing these with cherry stabilizers so far... Can you do me a favor, does a keycap stem fit sideways in the stabilizer or is it still too big? I can test when I have some time tomorrow too, I have a board with cherry stabilizers somewhere

There's no way of telling for sure, the stabilizer stem starts after the switch's ends (when its all the way up). The top of the stabilizer stem is pretty much flush with the top of the switch housing, so when trying to test if it fits sideways, the key conflicts with the housing of the switch that's being stabilized for, not to mention the surrounding keys (I removed those to test, of course). I hope you're able to figure something out.

hey! can you try with what's in master now? I was able to get it working on mine, though I'm having some stringing issues which is making the keycap sit a little high. they're a hard print, I would recommend printing upside down, at least for testing purposes

Getting a weird bar support after updating the Master and my Test file (with only the stabilized keys) https://puu.sh/BqbFd/49a22e9620.png Tried "cherry_stabilizer" as the stabilizer type as well.

pull it down and try again, looks like it was the box_cherry bar support not realizing the key was 2 units long or longer

Not sure what you mean by "pull it down", removing bar support doesn't fix or change the issue. Bar support is where it should be at the top of the key.

sorry, that's a git term, can you download what's in master again? I fixed the issue, it was with the box cherry stem, but you'll have to download the source again to see the changes. alternatively you can add if ($key_length < 2) to the beginning of this line here: https://github.com/rsheldiii/KeyV2/blob/19427c074a35d7c985edd203738f11ab7a0096c0/src/stem_supports/tines.scad#L5 which is all that it was

Ah, got it. Pulled, checked to ensure change was made to the file and line you specified, still no change. :(
MasterKeys M test.scad is the file I'm using. https://puu.sh/Bqs38/6f40d77cb7.zip I have no Idea what's wrong.

Is there a way to add a "use tines" bool somewhere that I can specify "false" as a parameter that's passed to something? Not sure what, since the center stem that isn't generated by the "stabilized" modifier also has the tines, but maybe you would know.

Hm, so it fixed it for the horizontal keys for me but the vertical keys still have an issue. you can disable stem support by writing $stem_support_type = "disable" at the top. you can also switch to brimmed stem support if you want with brimmed_stem_support(). I'll add an unsupported_stem() helper. I have a ton of trouble with stems even in the best of cases so I figured it was worth it to turn it on by default

The keys fit... Barely. They all stick down to the point where they're unusable, the stem is too big, I can't tell if it's the inside or the outside, I want to see what you can do before spending more plastic on a print with less slop. Anything helps, Thanks!

yeah, the stems are by far the hardest part to print because it's a delicate balance between sticking or breaking off at the lightest breeze. I tried to make a reasonable guess as to how much slop is prudent without sacrificing build quality but it's something that will always have to be tweaked. It's usually the outside that causes it to stick; the inside can be too small, causing it to bow outwards, but that means you are overextruding in which case the outside will also be too large.

My advice is to give the stems a quick sanding. If you feel resistance only at the top, focus on the bottom of the stem a little; if you can feel the individual ridges as you press down just sand all over. Without reprinting them that's probably the best option.

I cant sand the stems to the point that they'll work without breaking them off, any other ideas?

Is the problem that they shear off during sanding, or that you successfully sand them and then they break when you press down? If it's the former you could try shaving the stems with an X-acto knife, so you're pushing down through the layers instead of pushing on the side.

If it's the latter there are a few things to do, but I'm not sure how many would help. you can print at a higher infill and you can try sanding and then covering with some kind of varnish, to bind the layers together a little more. FDM printers can just barely eek out a good stem, which is why it's so square. As a last resort you could try rotating the keycaps some amount and printing with support, so the layers run in a different direction and allow you to sand more down without breaking.

hope that helps!

Will Do. I've been printing mine upside down so that the top of the keys are smooth, that's why I gave the different stems a shot, right side up would be a disaster.

printed a couple stems by their lonesome and it looks like the housing is slightly smaller than a normal cherry stem even if you rotate it :( gonna see if I can't make a smaller stem that'll fit

I'm trying to figure out the easiest way to get one of these into fusion360 to play around with some designs on top, any recommendations for the easiest way to get these into a more workable file rather than an .stl?

Open in openscad

I'm not sure what you mean, I use .stl files for most of my 3d printer models. Is there a specific format you are expecting? Most tools can export into a few formats, but if fusion360 can't import .stl files you could try importing to blender then exporting to whichever format you desire

This is simply the best thing that has happened to Thingiverse!!! Question, is there a way to make the text/legends INDENTED? Like many of the photos?

Ah! Figured that out. But I don't see how to increase the legend inset size. Is there a way to get deeper insets on text/legends?

hm you know, it looks like that isn't very configurable as of right now. are you booting this up in openSCAD? try modifying the 0.3 here: https://github.com/rsheldiii/KeyV2/blob/master/src/key.scad#L282 to be however deep you want. I can add an argument to allow you to specify the depth in the legends function when I get a chance.

For some reason very large / small numbers for that value can cause the legend to disappear, so if you put something in and it's gone, that's probably the culprit. I'm looking into why right now but it's not as simple as I had hoped...

Hi, I was unable to get the depth to change by modifying this. Are there any extra steps that need to be done to get this to work?

Thanks for the lib!

I have been printing some single keys from your DSA stl and the stems were a bit too tight (I think because of my first layer that is thicker to stick to the bed), I've cut bits of the stems and they fit well.
To avoid that, I added a raft and printed some 1.5u for my ergodox and now have the inverse problem, the stems seem to fit, but since those are 1.5u, if I push a bit on the side, they move. I think I will go back to no raft and cutting to size.

Or am I missing something?

Printer is an ender 3, I am printing at 0.1mm/layer.

hey there!

I don't think you're missing too much, the stem is by far the hardest part to get right since it has such tight tolerances, and I erred on the side of safety in order to get things printing for most people. There is a slop parameter though if you want to try to dial that in: https://github.com/rsheldiii/KeyV2/wiki/KeyV2-Helper-Documentation#cherryslop the lower the value the less tolerance you'll have.

I'm not sure if you'll ever get all the play out of the 1.5u keycaps since the stems themselves on cherry switches have a little room to wiggle, but it's worth a shot!

Thanks. I reduced the slope and it helps. I will see how low I can get before it doesn't fit.

For some reason, the legends show up on DSA keys, but not on G20s. I have them inset and have attached my code. Also, Is there any way to use a backup font like in CSS and other languages so that my legend is mostly in one font, but the Unicode symbols that that font is missing are grabbed from a secondary font? Can't find a solution to that second problem anywhere, and you're the only qualified person to resolve the first one. Any help is greatly appreciated, Thank You in advance!

hey, I replied to your issue in Github! short answer is I think I know what's wrong, and I'll be able to fix soon. thanks!

Comments deleted.