First 0.08mm print attempt - sadly overtight tolerances

This commit is contained in:
Luke Hubmayer-Werner 2025-02-02 14:52:25 +10:30
parent 56c70c68e5
commit f723e8c730
2 changed files with 84 additions and 27 deletions

View File

@ -641,15 +641,21 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
// 56mm wide neck
string_spacing_nut = 10; // 50mm E to e
string_spacing_bridge = 11.2; // 56mm E to e
function string_spacing(y) = lerp(string_spacing_bridge, string_spacing_nut, y/fret_scale_length(0));
string_margin = 3; // +6
neck_width = string_spacing_bridge*(num_strings-1) + string_margin*2;
neck_width_nut = (num_strings-1)*string_spacing_nut + string_margin*2;
neck_width_bridge = (num_strings-1)*string_spacing_bridge + string_margin*2;
function neck_width_mm(y) = lerp(neck_width_bridge, neck_width_nut, y/fret_scale_length(0));
body_width = 96;
scallop_depth = 2.5;
_zero_fret_width = 3.0;
scallop_depth = 2.0;
_zero_fret_width = 3.6;
_fret_width = 2.4;
fret_widths = flatten([[_zero_fret_width], [ for (i = [1:num_frets]) _fret_width ]]);
function get_fret_width(fret) = fret_widths[clamp(0, fret, num_frets)];
target_neck_thickness = 16; //22;
fret_angle = 60;
max_fret_width = max(fret_widths);
max_fret_height = sin(fret_angle) * max_fret_width/2;
target_neck_thickness = 16;
// echo(fret_scale_length(8));
// echo(fret_scale_length(9));
rx0 = -40; // Reinforcing rods start
@ -658,7 +664,7 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
target_neck_thickness_additional_points = [];
// target_neck_thickness_additional_points = [[rx0+CF_Tube_Len+20, 22], [0, 22]];
echo(str("Making a Steel 6 String with scale length ", fsl_mm, "mm = ", fsl_mm/25.4, "in and neck width ", neck_width, "mm"));
echo(str("Making a Steel 6 String with scale length ", fsl_mm, "mm = ", fsl_mm/25.4, "in and neck width ", neck_width_nut, "mm"));
assert(fsl_mm == Fender_Scale_mm); // Make sure the function correctly uses our changed global
function CF_Span_Coords(full_length = 700, ply = 3) = [for (i=[0:ply-1]) [0, lerp(0, full_length-CF_Tube_Len, i/(ply-1)), CF_Square_Width*i]];
@ -670,6 +676,7 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
render() TaperNeck(
num_frets = num_frets,
fret_widths = fret_widths,
fret_angle = fret_angle,
num_strings = num_strings,
string_margin = string_margin,
string_spacing_nut = string_spacing_nut,
@ -681,22 +688,40 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
);
}
module truss_rods() {
include_from_fret = (from_fret==0);
x0 = fret_scale_length(to_fret) - get_fret_width(to_fret)/2;
//x1 = fret_scale_length(from_fret) + ((include_from_fret)?1:(-1)) * get_fret_width(from_fret)/2;
x1 = include_from_fret ? (fret_scale_length(from_fret) - get_fret_width(from_fret)/2) : x0; // hacky fix for included headpiece
tolerance = reference ? 0 : 0.24;
rod_mm = 630;
v = [0, 40, -9];
// Nut facing bridge
// o = v[1];
// taper_points = reference ? [] : [x0-o, x1-o];
// translate(v) TrussRod(taper_points = taper_points, tolerance = tolerance, extra = !reference);
// Nut facing headstock
o = v[1];
taper_points = reference ? [] : [rod_mm-(x0-o), rod_mm-(x1-o)];
translate(v + [0, rod_mm, 0]) rotate([0, 0, 180]) TrussRod(taper_points = taper_points, tolerance = tolerance, extra = !reference);
}
reinforcing_tube_positions = flatten([
[
for (i=[-1,1]) each [
// Headside reinforcement
[i*21.5, rx1, -4],
[i*20.5, rx1, -4],
// Bridgeside reinforcement
// [i*21.5, rx0, -4],
[i*17.25, rx0, -10],
[i*20.5, rx0, -4],
// [i*17.25, rx0, -10],
// [i*17, rx0, -12],
[i*3.95, rx0, -16.5],
// [i*3.95, rx0, -16.5],
]
],
[
// Headside reinforcement
[0, rx1, -4],
[0, rx1, -11],
// [0, rx1, -4],
// [0, rx1, -11],
// Bridgeside reinforcement
// [0, rx0, -11],
]]);
@ -704,7 +729,7 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
// Through span construction
span_coords = CF_Span_Coords(ply=2);
reinforcing_square_positions = [
for (i=[-1,1]) each [ for (v = span_coords) [i*10, rx0, -10] + v ]
// for (i=[-1,1]) each [ for (v = span_coords) [i*10, rx0, -10] + v ]
];
echo(reinforcing_square_positions);
@ -723,6 +748,7 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
translate([-100, x1, -100]) cube([200, xn-x1, 200]);
for (v = reinforcing_tube_positions) CFTubeCutout2(v, x0, x1);
for (v = reinforcing_square_positions) CFSquareCutout2(v, x0, x1);
truss_rods();
}
}
@ -749,33 +775,44 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
}
}
module HeadPiece() {
x0 = fret_scale_length(0) + fret_width/2;
function string_x(i, y) = (num_strings-i-1)*string_spacing(y) - neck_width_mm(y)/2 + string_margin;
module HeadPiece(label=true) {
string_offsets = [-2, 0, 2.5, -2.5, 0, 2];
x0 = fret_scale_length(0) + fret_widths[0]/2;
end_radius = 12;
x1 = x0 - rx0 + end_radius;
z1 = scallop_depth + max_fret_height;
module StringHoles() {
for (i = [0:num_strings-1]) translate([(num_strings-i-1)*string_spacing - neck_width/2 + string_margin,0,0]) {
translate([0,0,scallop_depth+fret_width/2+string_diameters_mm[i]]) rotate([-105,0,0]) cylinder(h=30, d=string_diameters_mm[i]*2, $fn=cyl_ld_fn);
// translate([0,23,-4]) rotate([-150,0,0]) translate([0,0,0]) cylinder(h=20, d=4, $fn=cyl_ld_fn);
for (i = [0:num_strings-1]) translate([string_x(i, x0),0,0]) {
// translate([0,0,z1+string_diameters_mm[i]]) rotate([-105,0,0]) cylinder(h=30, d=string_diameters_mm[i]*2, $fn=cyl_ld_fn);
hull() {
translate([0,29,-3.5]) sphere(d=5.5, $fn=360);
translate([0,29+11,-17]) sphere(d=7, $fn=360);
translate([0,0,z1+string_diameters_mm[i]]) sphere(d=string_diameters_mm[i]*2, $fn=360);
translate([string_offsets[i],27,-3.5]) sphere(d=min(string_diameters_mm[i]*2.2, 2.7), $fn=360);
}
hull() {
// String ball ends are roughly 3mm by 4mm cylinder(d=4, h=3)
// translate([string_offsets[i],29,-3.5]) sphere(d=5.5, $fn=360);
// translate([string_offsets[i],29+11,-17]) sphere(d=7, $fn=360);
translate([string_offsets[i],27,-3.5]) rotate([0, 90, 0]) cylinder(d=4.5, h=3.5, center=true, $fn=360);
translate([string_offsets[i],27+24,-17]) rotate([0, 90, 0]) cylinder(d=6.5, h=5.0, center=true, $fn=360);
}
}
}
fw2 = fret_widths[0]/2;
render() difference(){
hull() {
translate([0,fret_width/2,0]) scale([neck_width/2, 0.01, target_neck_thickness]) sphere(r=1, $fn=360);
translate([0,-rx0-end_radius,0]) scale([neck_width/2, end_radius, target_neck_thickness*0.93]) sphere(r=1, $fn=360);
translate([0,fw2,0]) scale([neck_width_mm(x0)/2, 0.01, target_neck_thickness]) sphere(r=1, $fn=360);
translate([0,-rx0-end_radius,0]) scale([neck_width_mm(x1)/2, end_radius, target_neck_thickness*1.0]) sphere(r=1, $fn=360);
}
translate([-500, 0, scallop_depth]) cube([1000, 1000, 1000]);
translate([-500, fret_width/2 - 1000, -500]) cube([1000, 1000, 1000]);
translate([-500, fw2 - 1000, -500]) cube([1000, 1000, 1000]);
translate([0, -fret_scale_length(0), 0]) {
for (v = reinforcing_tube_positions) CFTubeCutout2(v, x0, x1);
for (v = reinforcing_square_positions) CFSquareCutout2(v, x0, x1);
}
StringHoles();
translate([-10,fret_width/2+1,-10]) rotate([90,0,0]) linear_extrude(10) {
if (label) translate([-10,fw2+1,-10]) rotate([90,0,0]) linear_extrude(10) {
text(str(id_line_0, id_line_1), size=2.9, halign="center", valign="center", $fn=100);
}
}
@ -853,22 +890,34 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
bridge_channel_depth = 7;
if (reference) {
union() {
translate([0, -fsl_mm, 0]) union() {
c_cf = [0.4, 0.5, 0.5];
%MyNeck();
// CF square stacks
truss_rods();
for (v = reinforcing_tube_positions) color(c_cf) translate(v) CFTube();
for (v = reinforcing_square_positions) color(c_cf) translate(v) CFSquare();
// Approximate tuner placement
TunerPlacement();
// TunerPlacement();
// Render strings above for spacing reference
string_excess = 80;
for (i = [0:num_strings-1]) {
translate([(num_strings-i-1)*string_spacing - neck_width/2 + string_margin,0,5]) rotate([-90,0,0]) translate([0,0,-string_excess/2]) cylinder(h=fsl_mm+string_excess, d=string_diameters_mm[i], $fn=cyl_ld_fn);
hull() {
translate([string_x(i, -string_excess), -string_excess, 5]) sphere(d=string_diameters_mm[i], $fn=cyl_ld_fn);
translate([string_x(i, fsl_mm+5), fsl_mm+5, 5]) sphere(d=string_diameters_mm[i], $fn=cyl_ld_fn);
}
}
}
%HeadPiece(false);
} else if (from_fret >= 0) {
RealPiece(from_fret, to_fret, include_from_fret = (from_fret==0));
if ((from_fret == 0) && list_has(include_colours, 0)) {
echo("Making a headpiece");
render() difference() {
translate([0, fret_scale_length(0), 0]) HeadPiece(false);
truss_rods();
}
}
} else if (from_fret == -1) {
// String holding headpiece
echo("Making a headpiece");

View File

@ -273,10 +273,18 @@ module TaperNeck(
translate([-neck_width_bridge, 0, 0]) cube([neck_width_bridge*2, (fret_scale_length(25)+fret_scale_length(24))/2, target_neck_thickness*3]);
}
} else {
has0 = list_has(include_colours, 0);
has1 = list_has(include_colours, 1);
has2 = list_has(include_colours, 2);
has3 = list_has(include_colours, 3);
render() intersection() {
if (has0) {
render() difference() {
carved_stock();
if (!has1) intersect_fret_layers();
if (!has2) fret_inlays();
if (!has3) fret_side_markers();
}
} else render() intersection() {
difference() {
carved_stock();
if (!has1) intersect_fret_layers();