2024-04-01 20:22:15 +10:30
include < common.scad >
include < 2BangerCommon.scad >
// Nice big jumbo fret for the bridge
2025-02-03 13:43:14 +10:30
fret_width = 3.5 ; //2.4*1.5; //2.4; //2.8; // Jumbo = 0.11", 0.055" tall
2024-04-01 20:22:15 +10:30
module headpiece ( from_fret , to_fret , tang_depth = 3 ) {
2025-02-03 13:43:14 +10:30
z_min = fret_scale_length ( to_fret ) - fret_width / 2 ;
//z_min = (fret_scale_length(to_fret) + fret_scale_length(to_fret+1))/2;
2024-04-01 20:22:15 +10:30
z_max = ( fret_scale_length ( from_fret ) + fret_scale_length ( from_fret - 1 ) ) / 2 ;
z_offset = z_min ;
Tube_Length = z_max - z_min ;
echo ( str ( "Cap length from fret " , from_fret , " to " , to_fret , " is " , Tube_Length , "mm" ) ) ;
2025-02-03 13:43:14 +10:30
//fingerboard_max_thick = 5+8
module solid_tube ( cap_taper = 1.5 , fingerboard_min_thick = 2.5 , fingerboard_max_thick = 5 + 2 , fret_angle = 60 ) { // Fret angle of 45° is normal, anything over 60 will not work correctly
2024-04-01 20:22:15 +10:30
module fret_bumps ( w = 50 ) {
translate ( [ 0 , 0 , - z_offset ] ) for ( fret = [ from_fret : to_fret ] )
translate ( [ fingerboard_max_thick - fret_width / 2 , w / 2 , fret_scale_length ( fret ) ] )
rotate ( [ 90 , 0 , 0 ] ) cylinder ( h = w , r = fret_width / 2 ) ;
}
module scallops ( w = 50 ) {
for ( fret = [ from_fret : to_fret + 1 ] )
let (
f_prev = fret_scale_length ( fret - 1 ) - z_offset ,
f_next = fret_scale_length ( fret ) - z_offset ,
o = fret_width / 2 * sin ( fret_angle ) ,
x0 = f_prev - o ,
x1 = f_next + o ,
y0 = fingerboard_min_thick ,
y1 = fingerboard_max_thick - ( fret_width / 2 * cos ( fret_angle ) ) ,
pts = [ [ x0 , y1 ] , [ x1 , y1 ] , [ ( x0 + x1 ) / 2 , y0 ] ] ,
cc = tri_circumcenter ( pts ) ,
r = norm ( [ x0 , y1 ] - cc )
) {
translate ( [ 0 , - w / 2 , 0 ] )
rotate ( [ - 90 , - 90 , 0 ] )
translate ( cc ) cylinder ( h = w , r = r ) ;
}
}
module basic_fretboard ( ) {
intersection ( ) {
hull ( ) {
minkowski ( $fn = mink_fn ) {
sphere ( cap_taper , $fn = mink_fn ) ;
translate ( [ 0 , 0 , cap_taper ] ) linear_extrude ( 0.01 ) offset ( - cap_taper )
cap_outline_bridge ( fingerboard_min_thick = fingerboard_min_thick , fingerboard_max_thick = fingerboard_max_thick ) ;
}
minkowski ( $fn = mink_fn ) {
sphere ( cap_taper , $fn = mink_fn ) ;
translate ( [ 0 , 0 , Tube_Length - cap_taper ] ) linear_extrude ( 0.01 ) offset ( - cap_taper )
cap_outline_bridge ( fingerboard_min_thick = fingerboard_min_thick , fingerboard_max_thick = fingerboard_max_thick ) ;
}
linear_extrude ( Tube_Length ) offset ( - 1 ) cap_outline_bridge ( ) ;
translate ( [ 0 , 0 , cap_taper ] ) linear_extrude ( Tube_Length - cap_taper * 2 )
cap_outline_bridge ( fingerboard_min_thick = fingerboard_min_thick , fingerboard_max_thick = fingerboard_max_thick ) ;
}
union ( ) {
fret_bumps ( ) ;
translate ( [ - 50 , - 50 , 0 ] ) cube ( [ 50 + fingerboard_max_thick - ( fret_width / 2 * cos ( fret_angle ) ) , 100 , Tube_Length ] ) ;
}
}
}
// Make a solid tube and then subtract the notches
difference ( ) {
union ( ) {
basic_fretboard ( ) ;
// translate([0,0,Tube_Length]) linear_extrude(tang_depth) tang_outline(-0.1);
}
difference ( ) {
scallops ( ) ;
fret_bumps ( ) ;
}
// Shear off the top at an angle
// translate([-1,-50,Tube_Length])
// rotate([0,83.8])
// cube([45,100,100]);
// Tang for connecting to next tube
// tapered_tang_groove(depth = tang_depth + 0.5, taper = 0);
// tapered_tang_groove(depth = 0.5, taper = 0, offset = 0.5);
}
// color("red") scallops();
}
module string_hole ( ) {
2025-02-03 13:43:14 +10:30
//translate([12, 0, Tube_Length - 5])
translate ( [ 6.5 , 0 , Tube_Length - 5 ] )
2024-04-01 20:22:15 +10:30
rotate ( [ 0 , - 5 ] )
cylinder ( h = 50 , r = 1.5 , center = true ) ;
}
difference ( ) {
solid_tube ( 1.5 ) ;
linear_extrude ( Tube_Length + 10 ) T_hole ( ) ;
tapered_T_hole ( z0 = 0 , z1 = 3 ) ;
tapered_T_hole ( z0 = Tube_Length - 3 , z1 = Tube_Length + 0.0001 , o0 = 0 , o1 = 1 ) ;
// String holes
translate ( [ 0 , - 10 , 0 ] )
string_hole ( ) ;
translate ( [ 0 , 10 , 0 ] )
string_hole ( ) ;
2025-02-03 13:43:14 +10:30
// Pickup wiring holes
translate ( [ - 15 , - 10 , 0 ] )
string_hole ( ) ;
translate ( [ - 15 , 10 , 0 ] )
string_hole ( ) ;
2024-04-01 20:22:15 +10:30
// Version number
2025-02-03 13:43:14 +10:30
translate ( [ - 10 , 10 , Tube_Length - 0.5 ] ) linear_extrude ( 1 ) text ( "05³" , size = 5 , halign = "center" , valign = "center" , font = "Noto Sans" ) ;
2024-04-01 20:22:15 +10:30
// Fret number markers
for ( fret = [ from_fret : to_fret ] )
2025-02-03 13:43:14 +10:30
translate ( [ - 3 , - 16 , fret_scale_length ( fret ) - z_offset + fret_width / 2 ] ) rotate ( [ 90 , 25 , 16 ] ) linear_extrude ( 100 ) text ( "Br" , size = 2.5 , halign = "center" , valign = "center" , font = "Noto Sans" ) ;
2024-04-01 20:22:15 +10:30
}
}
2025-02-03 13:43:14 +10:30
headpiece ( from_fret = 22 , to_fret = 22 ) ;
2024-04-01 20:22:15 +10:30
//translate([50, 0]) headpiece(from_fret = 0, to_fret = 0);