Compare commits

..
10 Commits
Author SHA1 Message Date
Quinn 6cbb9e94fb Update readme 2022-04-27 11:38:49 -07:00
Quinn 99f51f334e Add README and license 2022-04-27 11:33:44 -07:00
Quinn 08847469d3 Improve descriptions 2022-04-27 11:22:32 -07:00
Quinn 072675e970 Cleanup for release 2022-04-27 11:14:25 -07:00
Quinn 85c738c57e Final version for now (3.1) 2022-04-27 10:44:10 -07:00
Quinn 4516981892 Repo cleanup 2022-04-27 10:43:43 -07:00
Quinn 4176e95000 Upgraded shape gate for 3.0 2022-02-06 17:02:59 -08:00
Quinn a098affecc Improve individual part rendering 2022-02-06 16:47:15 -08:00
Quinn 9625b42172 Improved throw accuracy of alpha collar 2022-02-05 14:14:16 -08:00
Quinn 29d5dc173e Add 2-piece adapter and alpha collar 2022-02-05 12:05:07 -08:00
41 changed files with 170 additions and 99 deletions
+7
View File
@@ -0,0 +1,7 @@
Copyright 2022 quinnvoker
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+9
View File
@@ -0,0 +1,9 @@
# JUQS Collars for Sanjuks V6
A personal project to develop additional collar types and "gate" shapes for Sanjuks V6 levers. I devoted most of my time towards fine-tuning the "OCTN" model (nobi pro-like shape), but there are several other shapes available.
I'm pretty happy with the results, but don't wish to pursue production myself, so I've made this repo open source.
Some pre-rendered OCTN collars are included in the `renders` folder. You can render collars with different shapes and profiles using the source files and OpenScad.
I have no plans to develop this further and will not provide support. I've done a little bit of explaining in comments, but for the most part you'll just have to hop into OpenScad and mess around with `juqs_collar.scad` if you want to play around with it. Good luck! This was my first-ever OpenScad project so be prepared to find a mess if you go digging.
+50 -29
View File
@@ -1,4 +1,6 @@
use<juqs_collar.scad>;
$fn = 100;
/*
measurements
@@ -23,49 +25,68 @@ screw_hole_padding_lower = 1.8
alpha_adaptor();
module alpha_adaptor() {
$fn = 100;
difference(){
union(){
lower();
translate([0, 0, 3.6])
upper();
}
screw_holes();
cylinder(h = 10, r = 35 / 2);
translate([0,0,7.6 - 2.8])
base(b = 0);
union(){
lower();
translate([0, 0, 3.6])
upper();
}
}
module upper(){
rounded_rect(h = 4, size = 59.6, r = 2);
module upper(solo = false, h = 4, size = 59.6, r = 3.5){
difference() {
rounded_rect(h = h, size = size, r = r);
screw_holes();
center_hole();
translate([0,0,h - 2.8])
base(b = 0);
if(solo)
guide_posts();
}
}
module lower(){
rounded_rect(h=3.6, size = 52.6, r = 13);
module lower(solo = false, h = 3.6, size = 52.6, r = 15){
difference() {
union(){
rounded_rect(h = h, size = size, r = r);
if(solo)
guide_posts();
}
screw_holes(r2 = 4.8/2);
center_hole();
}
}
module screw_holes(r = 4.8 / 2){
offset = 52.6 / 2 - 1.8 - r;
module center_hole() {
cylinder(h = 10, r = 35 / 2);
}
module guide_posts(h = 7.6, r = 6.5 / 2) {
rotate([0,0,45])
screw_holes(h = 7.6, r1 = r, r2 = r, pos = 61.8 / 2);
}
module screw_holes(h = 10, r1 = 4.8 / 2, r2 = 5.6 / 2, pos = 52.6 / 2 - 1.8){
offset = pos - r1;
chamfer_height = r2 - r1;
translate([offset, 0, 0]){
cylinder(h = 10, r = r);
translate([0, 0 ,7.6 - 1.8])
cylinder(h = 1.8, r1 = r, r2 = 8.2 / 2);
cylinder(h = h, r = r1);
translate([0, 0 ,4 - chamfer_height])
cylinder(h = chamfer_height, r1 = r1, r2 = r2);
}
translate([-offset, 0, 0]){
cylinder(h = 10, r = r);
translate([0, 0 ,7.6 - 1.8])
cylinder(h = 1.8, r1 = r, r2 = 8.2 / 2);
cylinder(h = h, r = r1);
translate([0, 0 ,4 - chamfer_height])
cylinder(h = chamfer_height, r1 = r1, r2 = r2);
}
translate([0, offset, 0]){
cylinder(h = 10, r = r);
translate([0, 0 ,7.6 - 1.8])
cylinder(h = 1.8, r1 = r, r2 = 8.2 / 2);
cylinder(h = h, r = r1);
translate([0, 0 ,4 - chamfer_height])
cylinder(h = chamfer_height, r1 = r1, r2 = r2);
}
translate([0, -offset, 0]){
cylinder(h = 10, r = r);
translate([0, 0 ,7.6 - 1.8])
cylinder(h = 1.8, r1 = r, r2 = 8.2 / 2);
cylinder(h = h, r = r1);
translate([0, 0 ,4 - chamfer_height])
cylinder(h = chamfer_height, r1 = r1, r2 = r2);
}
}
+13
View File
@@ -0,0 +1,13 @@
SHORT = [8.7, [1.6, 0.5], false];
FULL = [18, [4.6, 0.5], false];
STEPPED = [8.7, [2.6, 0.5], true];
FLAT = [2.1 + 2.8, [0.5, 0.5], false];
ISLAND = [8.7 + 5.8 + 1, [2.6, 0.5], false];
CIR = "CIR";
SQR = "SQR";
OCT = "OCT";
OCTR = "OCTR";
OCTN = "OCTN";
SQRN = "SQRN";
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

+76 -60
View File
@@ -1,42 +1,59 @@
include<round_gates.scad>;
include<shape_gate.scad>;
include<shapes.scad>;
include<collar_types.scad>;
$fn = 100;
VERSION = "V3.1";
collar_r = 34.7/2;
//short_collar = 8.7;
short_collar = [8.7, [1.6, 0.5], false];
//full_collar = 18;
full_collar = [18, [4.6, 0.5], false];
stepped_collar = [8.7, [2.6, 0.5], true];
flush_collar = [8.7 + 5.8, [2.6, 0.5], false];
island_collar = [8.7 + 5.8 + 1, [2.6, 0.5], false];
shaft_r = (9/2)/cos(180/$fn);
//shaft_r = 9/2;
throw_types = [
[10, "B"],
[10 / sqrt(2), "S"],
[10 / sqrt(2 / 1.4), "SN"]
];
grommet_dist = 6.8; //distance the grommet sits below this component
grommet_depth = 6.4; //thickness of grommet (when compressed)
pivot_depth = grommet_dist + grommet_depth / 2;
VERSION = "V2.8";
/*
Update the following line to change which kind of collar is being rendered.
Available model values:
CIR (circle)
SQR (square)
OCT (octagon),
OCTR (octagon with round notches, seimitsu octo-like)
OCTN (octagon with deep corners, nobi pro-like)
SQRN (square with cardinal notches, nobi standard-like)
Available collar values:
SHORT (standard short or "chopped" collar)
FULL (standard full collar)
STEPPED (stepped collar, like Bandit F3)
FLAT (flat collar, like alphas)
ISLAND (unique, almost-full collar. only beveled part of top protrudes when using AFS case)
For different throw types, change number in brackets (throw_types[x]):
0 ("S": Emulates full throw of standard sanjuks v6 circle gate)
1 ("SQ": Reduces throw for SQR model, corners will have same throw as "S" but cardinals are short)
2 ("SN": Similar to "SQ", but slightly larger. Tuned for OCTN model)
*/
juqs(model = OCTN, collar = FULL, throw_type= throw_types[2], production = false);
CIR = "CIR";
SQR = "SQR";
OCT = "OCT";
OCTR = "OCTR";
OCTN = "OCTN";
SQRN = "SQRN";
/*
change shaft_r to match radius of shaft you wish to use. for example, a 10mm shaft:
shaft_r = (10/2)/cos(180/$fn);
juqs(model = OCTN, ver = VERSION, collar = island_collar, throw_type= throw_types[2]);
NOTE: adjusts fit and dimensions of collar to retain same throw as standard 9mm shaft.
if you want to increase/decrease throw, modify or add values in throw_types
*/
shaft_r = (9/2)/cos(180/$fn);
module juqs(model, ver, collar = short_collar, throw_type = throw_types[0]) {
/*
throw types are arrays with two values:
- the max desired cardinal throw angle in degrees (diagonal throw is dependent on gate shape)
- a string to use as an identifier, embossed on bottom of collar if not production mode
*/
throw_types = [
[10, "S"],
[10 / sqrt(2), "SQ"],
[10 / sqrt(2 / 1.4), "SN"]
];
module juqs(model = CIR, ver = VERSION, collar = SHORT, throw_type = throw_types[0], shaft_r = shaft_r, pivot_depth = pivot_depth, production = false) {
throw = throw_type[0];
collar_h = collar[0];
bevel = collar[1];
@@ -49,49 +66,48 @@ module juqs(model, ver, collar = short_collar, throw_type = throw_types[0]) {
base(b=0);
collar(collar_h);
if(stepped)
collar(collar_h + step_h, 23.5 / 2);
collar(h = collar_h + step_h, r = 23.5 / 2, bevel =0.5);
};
bevels(collar_h + step_h, bevel[0], bevel[1]) {
translate([0,0,-pivot_depth]){
if(model == CIR)
cir_gate(throw, shaft_r);
if(model == SQR)
shape_gate(sqr_poly, throw, shaft_r);
if(model == OCT)
shape_gate(oct_poly, throw, shaft_r, 0.5);
if(model == OCTR)
octr_gate(throw, shaft_r);
if(model == OCTN)
shape_gate(octn_poly, throw, shaft_r, 0.5);
if(model == SQRN)
sqrn_gate(throw, shaft_r);
}
}
inner_bevel(collar_h + step_h, bevel[1]) {
hollow(model, throw, shaft_r, pivot_depth, collar_h + step_h, bevel);
};
};
font = "Open Sans:style=Bold";
fontsize = 4.2;
translate([0,0,-0.1]) {
mirror([1,0,0]) {
linear_extrude(0.7){
translate([0, 10.6, 0])
text(str("JUQS"), font=font, size=fontsize, halign = "center");
translate([0, -14.75, 0])
text(str(VERSION, " ", throw_type[1]),font=font, size=fontsize, halign = "center");
}
};
if(!production) {
font = "Open Sans:style=Bold";
fontsize = 4.2;
translate([0,0,-0.1]) {
mirror([1,0,0]) {
linear_extrude(0.7){
translate([0, 10.6, 0])
text(str("JUQS"), font=font, size=fontsize, halign = "center");
translate([0, -14.75, 0])
text(str(ver, " ", throw_type[1]),font=font, size=fontsize, halign = "center");
}
};
}
}
};
};
};
module bevels(collar_height, b_size = 0.8, t_size = 0.8){
if(b_size > 0) {
translate([0,0,-0.1])
linear_extrude(b_size + 0.1)
projection(cut = true)
translate([0,0,-b_size])
children();
module hollow(model = CIR, throw, shaft_r, pivot_depth, collar_h, bevel){
translate([0,0,-pivot_depth]){
if(model == CIR)
cir_gate(throw, shaft_r);
if(model == SQR)
shape_gate(sqr_poly, throw, shaft_r, 0, collar_h, pivot_depth, bevel);
if(model == OCT)
shape_gate(oct_poly, throw, shaft_r, 0.5, collar_h, pivot_depth, bevel);
if(model == OCTR)
octr_gate(throw, shaft_r);
if(model == OCTN)
shape_gate(octn_poly, throw, shaft_r, 0.5, collar_h, pivot_depth, bevel);
if(model == SQRN)
qrn_gate(throw, shaft_r);
}
}
module inner_bevel(collar_height, t_size = 0.8){
if(t_size > 0) {
translate([0,0,collar_height - t_size])
linear_extrude(height = t_size + 0.1, scale = 1 + 0.125 * (t_size + 0.1))
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
+15 -10
View File
@@ -1,17 +1,22 @@
$fn = 100;
gate_height = 50;
gate_height = 28;
include<math.scad>;
include<round_poly.scad>;
module shape_gate (shape, throw, shaft_r, sharpness = 0) {
function throw_travel(throw) = gate_height * tan(throw);
hull(){
linear_extrude(0.1)
round_poly(shape, shaft_r, 0, sharpness);
translate([0,0,gate_height])
linear_extrude(0.00001)
round_poly(shape, shaft_r, throw_travel(throw), sharpness);
module shape_gate (shape, throw, shaft_r, sharpness = 0, collar_h, pivot_depth, bevel) {
function throw_travel(throw, height) = height * tan(throw);
union(){
translate([0,0, pivot_depth])
linear_extrude(bevel[0] + 1)
round_poly(shape, shaft_r, throw_travel(throw, pivot_depth + bevel[0]), sharpness);
hull(){
translate([0,0, pivot_depth + bevel[0]])
linear_extrude(0.00001)
round_poly(shape, shaft_r, throw_travel(throw, pivot_depth + bevel[0]), sharpness);
translate([0,0,collar_h + pivot_depth - bevel[1]])
linear_extrude(1)
round_poly(shape, shaft_r, throw_travel(throw, pivot_depth + collar_h - bevel[1]), sharpness);
}
}
}