]> git.scottworley.com Git - tattlekey/blame - housing/cherryVoid.scad
housing: Start
[tattlekey] / housing / cherryVoid.scad
CommitLineData
7f78ee27
SW
1// Retrieved from https://www.thingiverse.com/thing:4120804
2
3// Riskable's Cherry MX void/cutout module for making keyboard (top) plates and key switch testers
4
5$fn = 32;
6
7use <roundedCube.scad> // Because it's nice to have rounded corners on these sorts of things
8
9// AUTHOR: Riskable <riskable@youknowwhat.com>
10// VERSION: 1.1 (Changelog is at the bottom)
11// LICENSE: Creative Commons - Attribution - Non-Commercial (if you want to use it in a commercial setting/product just ask!)
12
13// NOTES
14/*
15 * Feel free to use this .scad in your own projects to add proper Cherry MX-styled switch cutouts to keyboards, perhipherals, testers, or whatever you like.
16 * You can just copy cherry_switch_void() into your own code if you like--it's entirely self-contained and reasonably small. Just make sure to credit, "This module was written by Riskable:" or something like that =)
17*/
18
19/* Creates the shape of a (proper) Cherry MX switch hole.
20 height: The thickness, really. Doesn't impact PLATE_THICKNESS
21 x_extra: Extra (void) space on the X axis (e.g. to save some plastic). Doesn't change the top plate.
22 y_extra: Extra (void) space on the Y axis. Same thing as X.
23 tolerance: Extra room on all sides (0.1 default should be good for most printers)
24 plate_thickness: How thick the top plate will be. Typical Cherry MX plates are about 1.5mm thick.
25*/
26module cherry_switch_void(height=12, x_extra=0, y_extra=0, tolerance=0.1, plate_thickness=1.5, corner_radius=0.5) { // Cherry MX body is supposed to be 11.6mm
27 switch_width = 15.6;
28 switch_length = 14; // Slightly shorter because we're making an acurate profile (see below)
29 center_space = 3.5; // Space between the cutouts on the sides of the switch
30 sides_width = (5+center_space); // Taken from the Cherry MX developer PDF
31 // Make the basic switch shape:
32 cube(
33 [switch_length+tolerance, switch_length+tolerance, height],
34 center=true);
35 // Profile for the sides:
36 translate([0,sides_width/2,0])
37 cube([switch_width-tolerance, center_space+tolerance, height], center=true);
38 translate([0,-sides_width/2,0])
39 cube([switch_width-tolerance,center_space+tolerance, height], center=true);
40 // Fill out the rest with a solid cube so that there's a top plate + empty space beneath
41 translate([0,0,plate_thickness])
42 roundedCube(
43 [switch_width+x_extra, switch_width+y_extra, height],
44 r=corner_radius, center=true);
45}
46
47/*
48CHANGELOG:
49 1.1: Now using roundedCube so the interior edges aren't so sharp.
50 1.0: Initial release
51*/