/* --------------------------------------------------------------------------------------- * * Double Helix Toothbrush Holder Oral-B Revision - Copyright Matthew McClain 2024 * * MCGIT : https://mcgit.place/MatCat-Models/Double_Helix_Toothbrush_Holder * * Printables: https://www.printables.com/model/713927-double-helix-toothbrush-holder * * * * This project is licensed as such: * * You are free to use this code for personal use. If you alter or include this code * * in your own projects you must include credit to my name and a link to this project * * either to the printables.com page, or mcgit repository. * * Commercial use is prohibited without a commercial license. This includes either * * selling the code or model files derived from the code, as well as printing for * * the purpose of selling. I am more then happy to offer a commerical license for * * a reasonable offer. Please contact me via printables.com or mcgit if you are * * interested in a commercial license. * * * * Parameters: * * There are 9 parameters to this model as follows, * * * * height : The height of the helix in mm. The total model height will be * * this height + thickness/2 +1-2 * * steps : This setting will control the granularity of the design, a lower number* * will result in smoother model but take much longer to render * * radius : The radius of the entire toothbrush holder * * thickness : The radius of the helix spirals * * brushhole : This is the diameter of the hole the toothbrish will sit in * * tubethickness : This will be the tube wall thickness of the toothbrush holder * * floorthickness: The thickness from the bottom of the model to floor of brush tube * * drainholediam : The diameter of the drain hole at the buttom of each brush tube * * brushes : Total number of toothbrushes the holder will have * * * * --------------------------------------------------------------------------------------- */ $fn = 60; height = 100; // This is the total height of the toothbrush holder steps = 3; // Number of steps to take to get to height radius = 35; // This is the total radius of the tothbrush holder thickness = 32; // This is the thickness of the toothbrush holder twists brushhole = 26; // This is the thickness of the hole a toothbrush will sit in tubethickness = 2; // This is the wall thickness of the toothbrush tube walls floorthickness = 2; // How thick should the floor be on the bottom of the holder drainholediam = 5; // Diamater of drain hole at bottom of brush holder tubes brushes = 5; // Total number of brushes difference() { union() { for (i=[0:steps:height-steps]) { // Twist 1 hull() { rotate([0,0,(360*i)/height]) translate([radius,0,i]) sphere(d=thickness); rotate([0,0,(360*(i+steps))/height]) translate([radius,0,i+steps]) sphere(d=thickness); } // Twist 2 hull() { rotate([0,0,(360*(i-(height/2)))/height]) translate([radius,0,i]) sphere(d=thickness); rotate([0,0,(360*((i+steps)-(height/2)))/height]) translate([radius,0,i+steps]) sphere(d=thickness); } } // Base Ring rotate_extrude(convexity=10) translate([radius,0,0]) circle(d=thickness); // Top Ring translate([0,0,height]) rotate_extrude(convexity=10) translate([radius,0,0]) circle(d=thickness); // Toothbrush pillar for (i=[0:brushes-1]) { rotate([0,0,(360/brushes)*i]) translate([radius,0,0]) cylinder(d=brushhole+(tubethickness*2),h=height); } } // Toothbrush Hole for (i=[0:brushes-1]) { rotate([0,0,(360/brushes)*i]) translate([radius,0,floorthickness]) cylinder(d=brushhole,h=height+(thickness/2)); // Drain Hole rotate([0,0,(360/brushes)*i]) translate([radius,0,-thickness/2]) cylinder(d=drainholediam,h=thickness); } // Flatten bottom some to make for better print adhesion translate([-(radius*1.5),-(radius*1.5),-((thickness/2)+floorthickness)]) cube([radius*3,radius*3,thickness/2]); }