| // Parameters
|
| rack_length = 152.4; // 6 inches in mm
|
| rack_height = 10; // Height of the rack
|
| rack_thickness = 2; // Thickness of the rack
|
| plate_thickness = 1; // Thickness of the plate connecting racks
|
| module = 1; // Gear module (metric)
|
| num_teeth_pinion = 20; // Number of teeth in the pinion
|
| pitch_diameter = num_teeth_pinion * module; // Pitch diameter of the pinion
|
| tooth_height = 2 * module; // Tooth height for the rack
|
|
|
| // Function to create a single tooth for the rack
|
| module tooth() {
|
| difference() {
|
| // Rack tooth profile (basic trapezoidal shape)
|
| polygon(points=[[0,0], [module, 0], [module/2, tooth_height], [-module/2, tooth_height]]);
|
| }
|
| }
|
|
|
| // Rack
|
| module rack() {
|
| union() {
|
| for (i = [0 : (rack_length / module) - 1]) {
|
| translate([i * module, 0, 0])
|
| tooth();
|
| }
|
| }
|
| }
|
|
|
| // Pinion Gear
|
| module pinion() {
|
| difference() {
|
| // Gear body (cylinder)
|
| cylinder(h = 10, d = pitch_diameter);
|
|
|
| // Inner hole of the pinion (optional, if needed)
|
| translate([0, 0, -1])
|
| cylinder(h = 12, d = module * 2);
|
| }
|
| }
|
|
|
| // Plate to join two racks
|
| module connecting_plate() {
|
| union() {
|
| // The plate will be centered between two racks
|
| translate([0, 0, -plate_thickness / 2])
|
| cube([rack_length * 2 + 10, rack_height + 10, plate_thickness]);
|
| }
|
| }
|
|
|
| // Create the assembly of two racks and a pinion
|
| module assembly() {
|
| union() {
|
| // First rack
|
| translate([0, 0, 0])
|
| rack();
|
|
|
| // Second rack
|
| translate([rack_length + 10, 0, 0])
|
| rack();
|
|
|
| // Connecting plate
|
| translate([rack_length / 2, 0, -plate_thickness / 2])
|
| connecting_plate();
|
|
|
| // Pinion positioned in the middle of the racks
|
| translate([rack_length / 2, rack_height + 20, 0])
|
| pinion();
|
| }
|
| }
|
|
|
| // Render the assembly
|
| assembly();
|