This page is part of an archival collection and is no longer actively maintained.

It may contain outdated information and may not meet current or future WCAG accessibility standards. We provide this content, its subpages, and associated links for historical reference only. If you need assistance, please contact support@cs.washington.edu

use ; // Define constants pi = 3.1415926; // Create single width gear tooth module tooth1_wide(mm_per_tooth, number_of_teeth, hole_diameter, thickness, twist, pressure_angle, clearance, backlash){ tooth(mm_per_tooth, number_of_teeth, hole_diameter, thickness, twist, pressure_angle, clearance, backlash); rotate(360/number_of_teeth) tooth(mm_per_tooth, number_of_teeth, hole_diameter, thickness, twist, pressure_angle, clearance, backlash); } // Create double width gear tooth module tooth0_wide( mm_per_tooth, number_of_teeth, hole_diameter, thickness, twist, pressure_angle, clearance, backlash){ hull(){ tooth(mm_per_tooth, number_of_teeth, hole_diameter, thickness, twist, pressure_angle, clearance, backlash); rotate(360/number_of_teeth) tooth(mm_per_tooth, number_of_teeth, hole_diameter, thickness, twist, pressure_angle, clearance, backlash); } } // Create gear in which tooth width encodes data module gear_coded_width ( code ="101010101010", mm_per_tooth = 4, //this is the "circular pitch", the circumference of the pitch circle divided by the number of teeth number_of_teeth = 24, //total number of teeth around the entire perimeter thickness = 2, //thickness of gear in mm hole_diameter = 4, //diameter of the hole in the center, in mm twist = 0, //teeth rotate this many degrees from bottom of gear to top. 360 makes the gear a screw with each thread going around once teeth_to_hide = 0, //number of teeth to delete to make this only a fraction of a circle pressure_angle = 28, //Controls how straight or bulged the tooth sides are. In degrees. clearance = 0.0, //gap between top of a tooth on one gear and bottom of valley on a meshing gear (in millimeters) backlash = 0.0 //gap between two meshing teeth, in the direction along the circumference of the pitch circle ) { p = mm_per_tooth * number_of_teeth / pi / 2; //radius of pitch circle c = p + mm_per_tooth / pi - clearance; //radius of outer circle b = p*cos(pressure_angle); //radius of base circle r = p-(c-p)-clearance; //radius of root circle t = mm_per_tooth/2-backlash/2; //tooth thickness at pitch circle k = -iang(b, p) - t/2/p/pi*180; //angle to where involute meets base circle on each side of tooth deg=360/number_of_teeth; difference(){ for (a=[0:len(code)-1]) { if (code[a] == "1") { rotate(2*deg*a) tooth1_wide(mm_per_tooth, number_of_teeth, hole_diameter, thickness, twist, pressure_angle, clearance, backlash); } else { rotate(2*deg*a) tooth0_wide(mm_per_tooth, number_of_teeth, hole_diameter, thickness, twist, pressure_angle, clearance, backlash); } } cylinder(h=2*thickness, r=hole_diameter/2, center=true, $fn=20); } } // Create a gear in which the presence or absence of a tooth encodes data module gear_coded_simple ( code ="101010101010101010101010", mm_per_tooth = 4, //this is the "circular pitch", the circumference of the pitch circle divided by the number of teeth number_of_teeth = 24, //total number of teeth around the entire perimeter thickness = 2, //thickness of gear in mm hole_diameter = 4, //diameter of the hole in the center, in mm twist = 0, //teeth rotate this many degrees from bottom of gear to top. 360 makes the gear a screw with each thread going around once teeth_to_hide = 0, //number of teeth to delete to make this only a fraction of a circle pressure_angle = 28, //Controls how straight or bulged the tooth sides are. In degrees. clearance = 0.0, //gap between top of a tooth on one gear and bottom of valley on a meshing gear (in millimeters) backlash = 0.0 //gap between two meshing teeth, in the direction along the circumference of the pitch circle ) { p = mm_per_tooth * number_of_teeth / pi / 2; //radius of pitch circle c = p + mm_per_tooth / pi - clearance; //radius of outer circle b = p*cos(pressure_angle); //radius of base circle r = p-(c-p)-clearance; //radius of root circle t = mm_per_tooth/2-backlash/2; //tooth thickness at pitch circle k = -iang(b, p) - t/2/p/pi*180; //angle to where involute meets base circle on each side of tooth deg=360/number_of_teeth; difference(){ union(){ for (a=[0:len(code)-1]) { if (code[a] == "1") { rotate(deg*a) tooth(mm_per_tooth, number_of_teeth, hole_diameter, thickness, twist, pressure_angle, clearance, backlash); } } cylinder(h=thickness, r=r, center=true, $fn=20); } cylinder(h=2*thickness, r=hole_diameter/2, center=true, $fn=20); } } thickness = 2; // To be printed with PLA or other nonconductive material // Simple coded gear with teeth omitted to encode 1s or 0s translate([0,40,0]) gear_coded_simple(); translate([0,40,thickness]) gear(4,6,2,2*thickness); // Gear in which width of teeth encode data // 1 : 2 separate teeth // 0 : 1 tooth equal to the width of 2 adjacent teeth and the space between them gear_coded_width(); translate([0,0,thickness]) gear(4,12,2,2*thickness);