2023-06-13 21:21:33 +09:30
include < common.scad >
include < 2BangerCommon.scad >
fret_width = 2.4 ; //2.8; // Jumbo = 0.11", 0.055" tall
module tube ( from_fret , to_fret , tang_depth = 3 ) {
z_min = ( fret_scale_length ( to_fret ) + fret_scale_length ( to_fret + 1 ) ) / 2 ;
z_max = ( fret_scale_length ( from_fret ) + fret_scale_length ( from_fret - 1 ) ) / 2 ;
z_offset = z_min ;
Cap_Length = z_max - z_min ;
echo ( str ( "Cap length from fret " , from_fret , " to " , to_fret , " is " , Cap_Length , "mm" ) ) ;
module solid_tube ( cap_taper = 1.5 , fingerboard_min_thick = 2.5 , fingerboard_max_thick = 5 , fret_angle = 60 ) { // Fret angle of 45° is normal, anything over 60 will not work correctly
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 ( 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 , Cap_Length - cap_taper ] ) linear_extrude ( 0.01 ) offset ( - cap_taper )
cap_outline ( fingerboard_min_thick = fingerboard_min_thick , fingerboard_max_thick = fingerboard_max_thick ) ;
}
linear_extrude ( Cap_Length ) offset ( - 1 ) cap_outline ( ) ;
translate ( [ 0 , 0 , cap_taper ] ) linear_extrude ( Cap_Length - cap_taper * 2 )
cap_outline ( 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 , Cap_Length ] ) ;
}
}
}
// Make a solid tube and then subtract the notches
difference ( ) {
union ( ) {
basic_fretboard ( ) ;
translate ( [ 0 , 0 , Cap_Length ] ) linear_extrude ( tang_depth ) tang_outline ( - 0.1 ) ;
}
difference ( ) {
scallops ( ) ;
fret_bumps ( ) ;
}
tapered_tang_groove ( depth = tang_depth + 0.5 , taper = 0 ) ;
tapered_tang_groove ( depth = 0.5 , taper = 0 , offset = 0.5 ) ;
}
// color("red") scallops();
}
difference ( ) {
solid_tube ( 1.5 ) ;
linear_extrude ( Cap_Length ) T_hole ( ) ;
tapered_T_hole ( z0 = 0 , z1 = 3 ) ;
tapered_T_hole ( z0 = Cap_Length - 3 , z1 = Cap_Length + 0.0001 , o0 = 0 , o1 = 1 ) ;
// Version number
translate ( [ - 10 , 10 , Cap_Length - 0.5 ] ) linear_extrude ( 1 ) text ( "05²" , size = 5 , halign = "center" , valign = "center" , font = "Noto Sans" ) ;
// Fret number markers
for ( fret = [ from_fret : to_fret ] )
translate ( [ - 3 , - 16 , fret_scale_length ( fret ) - z_offset ] ) rotate ( [ 90 , 25 , 16 ] ) linear_extrude ( 100 ) text ( str ( fret ) , size = 4 , halign = "center" , valign = "center" , font = "Noto Sans" ) ;
}
}
2024-04-01 20:22:15 +10:30
tube ( from_fret = - 5 , to_fret = - 5 ) ;
//translate([50, 0]) tube(from_fret = -4, to_fret = -3);
//translate([100, 0]) tube(from_fret = -2, to_fret = 0);
//translate([150, 0]) tube(from_fret = 1, to_fret = 3);
//translate([200, 0]) tube(from_fret = 4, to_fret = 7);
//translate([250, 0]) tube(from_fret = 8, to_fret = 12);
//translate([300, 0]) tube(from_fret = 13, to_fret = 19);
//translate([350, 0]) tube(from_fret = 20, to_fret = 30);