127 lines
3.9 KiB
OpenSCAD
127 lines
3.9 KiB
OpenSCAD
use <threads.scad>
|
|
|
|
// Body parameters
|
|
length_above = 25;
|
|
top_diameter = 11.6; // Original: 11.6 mm
|
|
|
|
pinch_length = 8;
|
|
pinch_gap = 1;
|
|
pinch_diameter_difference = 0.5;
|
|
pinch_minimum_diameter = 7;
|
|
|
|
screw_outer_diameter = 12;
|
|
screw_inner_diameter = 8.5;
|
|
screw_start_height = 9;
|
|
screw_pitch = ThreadPitch(screw_outer_diameter);
|
|
|
|
// Tolerances for threads
|
|
thread_gap = 0.3;
|
|
|
|
// Pen hole
|
|
pen_hole_diameter = 6.1;
|
|
|
|
nut_bottom_diameter = 15;
|
|
nut_top_diameter = 10;
|
|
nut_knurl_height = 10; // > screw_thread_length
|
|
nut_knurl_size = 0.5;
|
|
nut_knurl_count = 36;
|
|
nut_thread_extend = 1;
|
|
|
|
hook_width_shrink = 0.3; // Shrink original size
|
|
hook_squeeze = 0.25;
|
|
|
|
$fn = 48;
|
|
$eps = 0.1;
|
|
|
|
screw_thread_length = length_above - pinch_length - screw_start_height;
|
|
|
|
module holder() {
|
|
difference() {
|
|
union() {
|
|
// Base shape
|
|
rotate_extrude()
|
|
polygon([
|
|
[0, -4.8],
|
|
[9.25 / 2, -4.8],
|
|
[9.55 / 2, -4.8],
|
|
[9.55 / 2, -hook_squeeze],
|
|
[top_diameter / 2, (top_diameter - 9.55) / 2 - hook_squeeze], // 45° draft
|
|
[top_diameter / 2, screw_start_height - nut_thread_extend],
|
|
[screw_inner_diameter / 2, screw_start_height - nut_thread_extend],
|
|
[screw_inner_diameter / 2, length_above - pinch_length],
|
|
[pinch_minimum_diameter / 2 + pinch_diameter_difference / 4, length_above],
|
|
[0, length_above]
|
|
]);
|
|
|
|
// Retention hooks
|
|
intersection() {
|
|
rotate_extrude()
|
|
polygon([
|
|
[9.55 / 2, -4.8],
|
|
[11.3 / 2, (11.3 - 9.55) / 2 - 4.8],
|
|
[11.3 / 2, 2.4 - 4.8],
|
|
[9.55 / 2 + 0.3, 2.4 - 4.8],
|
|
[9.55 / 2, 2.4 - 0.3 - 4.8]
|
|
]);
|
|
|
|
cube([20, 4.5 - hook_width_shrink, length_above + 4.8], true);
|
|
}
|
|
|
|
// Outer thread
|
|
translate([0, 0, screw_start_height - nut_thread_extend])
|
|
ScrewThread(screw_outer_diameter - thread_gap / 2, screw_thread_length + nut_thread_extend, pitch = screw_pitch);
|
|
|
|
}
|
|
|
|
// Pen hole
|
|
union() {
|
|
translate([0, 0, -4.8 - $eps])
|
|
cylinder(d = pen_hole_diameter, h = length_above + 4.8 - pinch_length + 2 * $eps);
|
|
translate([0, 0, length_above - pinch_length])
|
|
cylinder(h = pinch_length + $eps, d1 = pen_hole_diameter, d2 = pen_hole_diameter - pinch_diameter_difference / 2);
|
|
}
|
|
|
|
for(angle = [0, 90]) {
|
|
translate([0, 0, length_above + $eps])
|
|
rotate([-90, 0, angle])
|
|
linear_extrude(screw_outer_diameter + $eps, center = true)
|
|
polygon([
|
|
[pinch_gap / 2, 0],
|
|
[0, pinch_length + $eps],
|
|
[-pinch_gap / 2, 0]
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
|
|
module nut() {
|
|
ScrewHole(screw_outer_diameter + thread_gap / 2, screw_thread_length + nut_thread_extend, pitch=screw_pitch)
|
|
rotate_extrude()
|
|
polygon([
|
|
[screw_inner_diameter / 2, 0],
|
|
[nut_bottom_diameter / 2, 0],
|
|
[nut_bottom_diameter / 2, nut_knurl_height],
|
|
[nut_top_diameter / 2, screw_thread_length + pinch_length],
|
|
[pinch_minimum_diameter / 2, screw_thread_length + pinch_length],
|
|
[screw_outer_diameter / 2, screw_thread_length],
|
|
[screw_inner_diameter / 2, screw_thread_length],
|
|
]);
|
|
for(i = [0:nut_knurl_count - 1]) {
|
|
rotate([0, 0, i * 360 / nut_knurl_count])
|
|
translate([-nut_knurl_size / 2, nut_bottom_diameter / 2 - nut_knurl_size / 2, 0])
|
|
cube([nut_knurl_size, nut_knurl_size, nut_knurl_height]);
|
|
}
|
|
}
|
|
|
|
|
|
// nut();
|
|
holder();
|
|
|
|
//difference() {
|
|
// union() {
|
|
// holder();
|
|
// translate([0, 0, screw_start_height])
|
|
// nut();
|
|
// }
|
|
// cube([100, 100, 100]);
|
|
//}
|