import gears import pyPolyCSG as csg def make_clamp_hub( B ): thickness = 9 hub = csg.cylinder( B/2.0+6, thickness, True ) hub = hub + csg.cylinder( 4.0, B+10, True ).rotate( 90.0, 0.0, 0.0 ).translate( B/2+3, 0, 0 ) hub = hub - csg.cylinder( 2.0, 100, True ).rotate( 90.0, 0.0, 0.0 ).translate( B/2+3, 0, 0 ) hub = hub - csg.box( B/2+6, thickness, 2, True ).translate( B/2+3.5, 0, 0 ) return hub.rotate(90,0,0).translate( 0, 0, thickness/2-0.01 ) def make_gear( pressure_angle, pitch, teeth, thickness, bore ): px, py = gears.gears_make_gear( pressure_angle, teeth, pitch ) coords = [] for i in range( 0, len(px) ): coords.append( ( px[i], py[i] ) ) gear = csg.extrusion( coords, thickness ) + make_clamp_hub( bore ).translate( 0, 0, thickness ) gear = gear - csg.cylinder( bore/2.0, thickness*100, True ).rotate( 90.0, 0.0, 0.0 ) return gear pressure_angle = 20.0 pitch = 0.8 N1 = 12 B1 = 8.0+0.7 T1 = 10.0 N2 = 36 B2 = 5.0+0.7 T2 = 5.0 backlash = 1.0 dp1 = gears.gears_pitch_diameter( pressure_angle, N1, pitch ) dp2 = gears.gears_pitch_diameter( pressure_angle, N2, pitch ) do1 = gears.gears_outer_diameter( pressure_angle, N1, pitch ) do2 = gears.gears_outer_diameter( pressure_angle, N2, pitch ) dc = ( dp1 + dp2 )/2.0 + backlash gear1 = make_gear( pressure_angle, pitch, N1, T1, B1 ) gear1.save_mesh("gear_%gdeg_P%g_%d_tooth.obj" % ( pressure_angle, pitch, N1 )) gear2 = make_gear( pressure_angle, pitch, N2, T2, B2 ) gear2.save_mesh("gear_%gdeg_P%g_%d_tooth.obj" % ( pressure_angle, pitch, N2 )) def hole_xy( x, y, radius, height ): return csg.cylinder( radius, height, True ).rotate( 90.0, 0.0, 0.0 ).translate( x, y, height/2.0 ) B1s = 10.0 B1p = 22 B2p = 10 box_pad = 5.0 screw_diam = 4.0 box_thick = 4.0 nema_offset = 31.0/2.0 box_height = max( (do1, do2 ) ) + box_pad*2.0 box_width = max( ( dc + (max( ( B1p, do1 ) )+do2)/2.0 + box_pad*2.0, nema_offset+dc+dp1/2 + screw_diam*2.0 + box_pad*2.0 ) ) screw_x_off = box_width/2.0-screw_diam screw_y_off = box_height/2.0-screw_diam g1_coords = ( box_pad+max((do1,B1p))/2.0, box_height/2.0 ) g2_coords = ( g1_coords[0]+dc, g1_coords[1] ) plate = csg.box( box_width, box_height, box_thick ) plate = plate - hole_xy( box_pad, box_pad, screw_diam/2.0, box_thick*2.0 ) plate = plate - hole_xy( box_width-box_pad, box_pad, screw_diam/2.0, box_thick*2.0 ) plate = plate - hole_xy( box_width-box_pad, box_height-box_pad, screw_diam/2.0, box_thick*2.0 ) plate = plate - hole_xy( box_pad, box_height-box_pad, screw_diam/2.0, box_thick*2.0 ) plate = plate + hole_xy( g1_coords[0], g1_coords[1], B1p/2.0+4.0, box_thick ).translate( 0, 0, box_thick/2+3 ) plate = plate - hole_xy( g1_coords[0], g1_coords[1], B1p/2.0, box_thick ).translate( 0, 0, box_thick/2+3 ) plate = plate - hole_xy( g1_coords[0], g1_coords[1], B1s/2.0, box_thick*2.0 ) plate = plate - hole_xy( g2_coords[0], g2_coords[1], B2p/2.0, box_thick*2.0 ) plate = plate - hole_xy( g2_coords[0]-nema_offset, g2_coords[1]-nema_offset, screw_diam/2.0, box_thick*2.0 ) plate = plate - hole_xy( g2_coords[0]+nema_offset, g2_coords[1]-nema_offset, screw_diam/2.0, box_thick*2.0 ) plate = plate - hole_xy( g2_coords[0]+nema_offset, g2_coords[1]+nema_offset, screw_diam/2.0, box_thick*2.0 ) plate = plate - hole_xy( g2_coords[0]-nema_offset, g2_coords[1]+nema_offset, screw_diam/2.0, box_thick*2.0 ) #plate = plate + gear1.translate( g1_coords[0], g1_coords[1], -10.0 ) #plate = plate + gear2.translate( g2_coords[0], g2_coords[1], -10.0 ) plate.save_mesh( "gearbox_plate.obj" )
This generates two gears and two gearbox plates that are mounted together using M3 screws. The printed gearbox is shown below, although I'm missing some bearings and hardware. Each plate has a recess into which a 608ZZ bearing can be press-fit. Depending on the orientation it can either serve as a fixed or floating end.
I hope to use gearboxes like this to increase the speed that I can drive leadscrews at for my CNC project, which currently has pretty limited feedrates. This would allow the use of cheap hardware store threaded rods, rather than expensive leadscrews, while still being a self-locking drive.
No comments:
Post a Comment