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 // 56mm wide neck
string_spacing_nut = 10; // 50mm E to e string_spacing_nut = 10; // 50mm E to e
string_spacing_bridge = 11.2; // 56mm 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 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; body_width = 96;
scallop_depth = 2.5; scallop_depth = 2.0;
_zero_fret_width = 3.0; _zero_fret_width = 3.6;
_fret_width = 2.4; _fret_width = 2.4;
fret_widths = flatten([[_zero_fret_width], [ for (i = [1:num_frets]) _fret_width ]]); 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)]; 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(8));
// echo(fret_scale_length(9)); // echo(fret_scale_length(9));
rx0 = -40; // Reinforcing rods start 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 = [];
// target_neck_thickness_additional_points = [[rx0+CF_Tube_Len+20, 22], [0, 22]]; // 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 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]]; 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( render() TaperNeck(
num_frets = num_frets, num_frets = num_frets,
fret_widths = fret_widths, fret_widths = fret_widths,
fret_angle = fret_angle,
num_strings = num_strings, num_strings = num_strings,
string_margin = string_margin, string_margin = string_margin,
string_spacing_nut = string_spacing_nut, 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([ reinforcing_tube_positions = flatten([
[ [
for (i=[-1,1]) each [ for (i=[-1,1]) each [
// Headside reinforcement // Headside reinforcement
[i*21.5, rx1, -4], [i*20.5, rx1, -4],
// Bridgeside reinforcement // Bridgeside reinforcement
// [i*21.5, rx0, -4], [i*20.5, rx0, -4],
[i*17.25, rx0, -10], // [i*17.25, rx0, -10],
// [i*17, rx0, -12], // [i*17, rx0, -12],
[i*3.95, rx0, -16.5], // [i*3.95, rx0, -16.5],
] ]
], ],
[ [
// Headside reinforcement // Headside reinforcement
[0, rx1, -4], // [0, rx1, -4],
[0, rx1, -11], // [0, rx1, -11],
// Bridgeside reinforcement // Bridgeside reinforcement
// [0, rx0, -11], // [0, rx0, -11],
]]); ]]);
@ -704,7 +729,7 @@ module Steel6String(include_colours, from_fret=0, to_fret=1, reference=false) {
// Through span construction // Through span construction
span_coords = CF_Span_Coords(ply=2); span_coords = CF_Span_Coords(ply=2);
reinforcing_square_positions = [ 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); 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]); translate([-100, x1, -100]) cube([200, xn-x1, 200]);
for (v = reinforcing_tube_positions) CFTubeCutout2(v, x0, x1); for (v = reinforcing_tube_positions) CFTubeCutout2(v, x0, x1);
for (v = reinforcing_square_positions) CFSquareCutout2(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() { function string_x(i, y) = (num_strings-i-1)*string_spacing(y) - neck_width_mm(y)/2 + string_margin;
x0 = fret_scale_length(0) + fret_width/2;
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; end_radius = 12;
x1 = x0 - rx0 + end_radius; x1 = x0 - rx0 + end_radius;
z1 = scallop_depth + max_fret_height;
module StringHoles() { module StringHoles() {
for (i = [0:num_strings-1]) translate([(num_strings-i-1)*string_spacing - neck_width/2 + string_margin,0,0]) { for (i = [0:num_strings-1]) translate([string_x(i, x0),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,0,z1+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);
hull() { hull() {
translate([0,29,-3.5]) sphere(d=5.5, $fn=360); translate([0,0,z1+string_diameters_mm[i]]) sphere(d=string_diameters_mm[i]*2, $fn=360);
translate([0,29+11,-17]) sphere(d=7, $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(){ render() difference(){
hull() { hull() {
translate([0,fret_width/2,0]) scale([neck_width/2, 0.01, target_neck_thickness]) 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/2, end_radius, target_neck_thickness*0.93]) 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, 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]) { translate([0, -fret_scale_length(0), 0]) {
for (v = reinforcing_tube_positions) CFTubeCutout2(v, x0, x1); for (v = reinforcing_tube_positions) CFTubeCutout2(v, x0, x1);
for (v = reinforcing_square_positions) CFSquareCutout2(v, x0, x1); for (v = reinforcing_square_positions) CFSquareCutout2(v, x0, x1);
} }
StringHoles(); 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); 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; bridge_channel_depth = 7;
if (reference) { if (reference) {
union() { translate([0, -fsl_mm, 0]) union() {
c_cf = [0.4, 0.5, 0.5]; c_cf = [0.4, 0.5, 0.5];
%MyNeck(); %MyNeck();
// CF square stacks // CF square stacks
truss_rods();
for (v = reinforcing_tube_positions) color(c_cf) translate(v) CFTube(); for (v = reinforcing_tube_positions) color(c_cf) translate(v) CFTube();
for (v = reinforcing_square_positions) color(c_cf) translate(v) CFSquare(); for (v = reinforcing_square_positions) color(c_cf) translate(v) CFSquare();
// Approximate tuner placement // Approximate tuner placement
TunerPlacement(); // TunerPlacement();
// Render strings above for spacing reference // Render strings above for spacing reference
string_excess = 80; string_excess = 80;
for (i = [0:num_strings-1]) { 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) { } else if (from_fret >= 0) {
RealPiece(from_fret, to_fret, include_from_fret = (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) { } else if (from_fret == -1) {
// String holding headpiece // String holding headpiece
echo("Making a 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]); 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 { } else {
has0 = list_has(include_colours, 0);
has1 = list_has(include_colours, 1); has1 = list_has(include_colours, 1);
has2 = list_has(include_colours, 2); has2 = list_has(include_colours, 2);
has3 = list_has(include_colours, 3); 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() { difference() {
carved_stock(); carved_stock();
if (!has1) intersect_fret_layers(); if (!has1) intersect_fret_layers();