(boats-ballmould.ngc)
( Mill a concave 1/2 sphere into material )
( used to mill moulds for fishing sinker canon balls )
(1.8" finished radius is 10lbs of lead)
( 2.1" finished radius is 15.9lbs of lead )
( centered at x=0, y=0 below z=0 )
( Lawrence Glaister VE7IT@shaw.ca June 2014 )
( Sept 2014 added optional fin code - use / optional skip feature )
( for some reason, balls come out about 10% light even with fin... )
( so make them a little larger if weight is an issue )
(debug,boats-ballmould.ngc - cannon ball)
/(debug,with fin)
( setup for roughing concave sphere )
( center is cleared out as we go )
#100=1.75 ( roughing Radius of sphere )
#101=[0.375/2.0] ( roughing Radius of cutter )
#102=2.5 ( roughing Initial angle )
#103=12.5 ( roughing Angle increase )
#104=20 ( roughing Feedrate ipm )
#106=3000 ( roughing Spindle speed )
G20 ( compute/cut in inches )
M6T1 (round nose roughing tool)
G0 X0 Y0 Z0.1
M3 S[#106] (spindle cw)
F[#104]
M7 (mist coolant on)
o001 if [1]
( loop for each depth )
o200 do
#124= [[cos[#102] * #100] -#101] (compute new radius)
#126= [-sin[#102] * #100] (compute new depth )
( loop to cut out interior )
#125 = #124
o300 do
( avoid cutting when radius of cutter is too big to fit into hole )
o350 if [#125 GT 0]
G1 X[#125]
G1 Z[#126] F[#104/5]
G3 I[-#125] F[#104] (cut circle )
o350 endif
#125 = [#125 - #101 - #101] (step in by cutter diameter)
o300 while [#125 GT 0]
G0 Z[#126+#101] (lift cutter when moving to next depth)
#102=[#102+#103]
o200 while [#102 LE 90]
o001 endif
M6T2 (round nose finishing tool )
( setup for finish pass of concave sphere)
( just the final outside shape is cut )
#100=1.85 ( finish Radius of sphere )
#101=[0.375/2.0] ( finish Radius of cutter )
#102=1.5 ( finish Initial angle )
#103=3 ( finish Angle increase )
#104=20 ( finish Feedrate ipm )
#106=3000 ( finish Spindle speed )
#107 = [4.1888 * #100 * #100 * #100] ( vol = 4 pi r^3/3 )
#108 = [#107 * 0.4097] ( imperial: weight of lead sphere )
(debug,lead weight{radius:lbs} = #100 #108)
o002 if [1]
G0 X0 Y0 Z0.100
M3 S[#106] (spindle cw)
F[#104]
M7 (mist coolant on)
( loop for each depth )
o400 do
#124= [[cos[#102] * #100] -#101] (compute new radius)
#126= [-sin[#102] * #100] (compute new depth )
( avoid cutting when radius of cutter is too big to fit into hole )
o450 if [#124 GT 0]
G1 X[#124]
G1 Z[#126] F[#104/5] (plunge to new depth )
G3 I[-#124] F[#104] (cut circle )
o450 endif
#102=[#102+#103]
o400 while [#102 LE 90]
G0 Z0.100
o002 endif
( now we cut an optional fin .. use / switch to enable )
/#127 = [#100/2 - #101] ( current radius being cut )
/G0 X[-#100 -#100/2] Y[#127] (top start of fin arc)
/G1 Z-0.200
/o500 do
/G1 X[-#100 -#100/2] Y[#127] (top start of fin arc)
/G3 J[-#127]
/#127 = [#127 - #101*1.5]
/o500 while [#127 GT 0]
/G1 Z0.100
( cut body of fin connecting 2 circles )
#128 = fix[[#100 / [1.5 * #101]] + 0.5]( number of cuts to clear fin area at largest dia )
(debug,fin cuts: #128)
#<_x1> = [-#100 -#100/2]
#<_x2> = 0.0
#<_y1> = [[#100/2.0] - #101]
#<_y2> = [#100 - #101]
/o600 repeat [#128+1]
/G0 X[#<_x1>] Y[#<_y1>]
/G1 Z-0.200
/G1 X[#<_x2>] Y[#<_y2>]
#<_y1> = [#<_y1> - [2.0*[#100/2 - #101]/#128] ]
#<_y2> = [#<_y2> - [2.0*[#100 - #101]/#128]]
/G0 Z0.1
/o600 endrepeat
F[#104/4] (slow drill)
( now we drill bolt holes to hold mould closed )
M6T3 ( 1/4 drill ? )
G0 Z0.1
G0 X[-#100 -#100 +#101 +#101] Y[-#100 + #101 +#101]
G1 Z[-#100]
G0 Z0.1
G0 Y[#100 - #101 -#101]
G1 Z[-#100]
G0 Z0.1
G0 X[#100 -#101 -#101] Y[#100 -#101]
G1 Z[-#100]
G0 Z0.1
G0 Y[-#100 + #101]
G1 Z[-#100]
G0 Z0.1
G0 X0 Y0
G0 Z0.1
M5 M9 (spindle, coolant off)
M2