diskshelf iteration 3: more tolerances
This commit is contained in:
		
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 73 KiB | 
										
											Binary file not shown.
										
									
								
							| @@ -0,0 +1,273 @@ | ||||
| // supermicro SC808 (and others) extended slider drawers to re-utilize 3.5"-hdd-cages for multiple 2.5" ssds | ||||
| // by zeus - 2023-06-15 - CC-BY-NC-SA-4.0 - https://git.kostianix.de/zeus/3d-stuff/openscad/own/supermicro_sc808t/ | ||||
| // ##################################### | ||||
| $fn=50; | ||||
| q=0.01; | ||||
| Q=1; | ||||
| slack=0.5; | ||||
| mt=2; | ||||
| layer=0.5;    // layer height of the 3d-printer to archieve some very narrow walls or floors without strange rounding errors | ||||
| rod_hole_dia=4.5; // with some slack for m4 threaded bolts | ||||
| slide_base_hole_dia=4; // 4.0 for m3 short inserts from cnc-kitchen | ||||
| disk_w=72;  // real measurement more like 69.9 | ||||
| disk_l=102;  // real measurement more like 100.4/101 (connector overhang). effective length with cables at least 125mm! | ||||
| disk_h=7.25;  // unfortunately this is not really standardized. most relevant ssds will have 6.74-7.1mm thickness | ||||
|  | ||||
| //slider-vars | ||||
| slide_base_l=130; | ||||
| slide_base_w=82.5; | ||||
| slide_base_h=12; | ||||
| slide_top_h=12; | ||||
| slide_wall_t=10; | ||||
| slide_bottom_t=3.3; // for m3 short inserts from cnc-kitchen at least 3mm is needed, regular is 5.7mm | ||||
| slide_wall_hole_dia=slide_base_hole_dia; // same as bottom to accomodate same inserts | ||||
| slide_wall_hole_t=3; // minimal distance of 3mm, because space is tight here | ||||
| slide_wall_z_offset=5;      // distance from bottom | ||||
| slide_channel_w=17.5; | ||||
| // supermicro 3.5"-hdd-drawer mockup for reference | ||||
| draw_w_inner=101; | ||||
| draw_l_inner=150; // slightly less in reality, but non-critical dimension | ||||
| draw_h_inner=21; // from bottom upwards | ||||
| draw_w_front=107.5; | ||||
| draw_l_front=31.5; | ||||
| draw_h_front=27; | ||||
| draw_t_outer=(draw_w_front-draw_w_inner)/2; //thickness of the rails | ||||
| draw_hole_h=6.5; // height of the center of the mounting hole (from the bottom) | ||||
| draw_hole_dia=slide_base_hole_dia; | ||||
| draw_hole_y1=19; // distance of first sidehole (from front) | ||||
| draw_hole_y2=79; | ||||
| draw_hole_y3=121; | ||||
|  | ||||
| filler_w=draw_w_inner-slide_base_w-slack; | ||||
| flange_d=1; | ||||
| flange_h=3; | ||||
| post_h=4; | ||||
| link1_l=slide_base_w/2; | ||||
| link2_l=slide_base_w-(slide_base_hole_dia*3.4); | ||||
| // ##################################### | ||||
| module drawer_mockup(){ | ||||
|     color("brown")translate([0,draw_l_front/2,draw_h_front/2])cube([draw_w_front,draw_l_front,draw_h_front],center=true); | ||||
|     difference(){ | ||||
|         color("brown")translate([0,draw_l_front+draw_l_inner/2,draw_h_inner/2])cube([draw_w_inner+(2*draw_t_outer),draw_l_inner,draw_h_inner],center=true); | ||||
|         translate([0,draw_l_front+draw_l_inner/2,draw_h_inner/2])cube([draw_w_inner,draw_l_inner+q,draw_h_inner+q],center=true); | ||||
|         // hdd mounting-holes | ||||
|         for(x=[-(draw_w_front/2-draw_t_outer/2),(draw_w_front/2-draw_t_outer/2)],y=[draw_hole_y1,draw_hole_y2,draw_hole_y3]){ | ||||
|             translate([x,draw_l_front+y,draw_hole_h])rotate([0,90,0])cylinder(h=draw_t_outer+q,r=draw_hole_dia/2,center=true); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| module disk_mockup(){ | ||||
|     color("teal")translate([0,0,disk_h/2])cube([disk_w,disk_l,disk_h],center=true); | ||||
| } | ||||
|  | ||||
| module slider_base(){ | ||||
|     translate([0,slide_base_l/2,slide_base_h/2]){ | ||||
|         difference(){ | ||||
|             cube([slide_base_w,slide_base_l,slide_base_h],center=true); | ||||
|             translate([0,0,slide_bottom_t/2+q])cube([slide_base_w-(2*slide_wall_t),slide_base_l+q,slide_base_h-slide_bottom_t],center=true); | ||||
|             for(x=[-(slide_base_w/2-slide_wall_t/2),(slide_base_w/2-slide_wall_t/2)], // used for M4-rods | ||||
|                 x2=[-slide_channel_w/2:1:slide_channel_w/2], // center cable channel | ||||
|                 x3=[-(slide_base_w/3+slide_base_w/5)/2,(slide_base_w/3+slide_base_w/5)/2]){ // offset cable channels | ||||
|                 // M4-Rod-Holes for connecting the trays | ||||
|                 translate([x,0,-slide_base_h/2+slide_bottom_t/2+rod_hole_dia/2]){ | ||||
|                     rotate([90,0,0])cylinder(h=slide_base_l+q,r=rod_hole_dia/2,center=true); | ||||
|                 } | ||||
|                 // center cable-channel cutout | ||||
|                 hull(){ | ||||
|                     translate([x2,0,-slide_base_h/2+slide_bottom_t/3+rod_hole_dia/2]){ | ||||
|                         rotate([90,0,0])cylinder(h=slide_base_l+q,r=rod_hole_dia/2,center=true); | ||||
|                         } | ||||
|                 } | ||||
|                 // offset cable channel cutouts | ||||
|                 translate([x3,0,-slide_base_h/2+slide_bottom_t/3+rod_hole_dia/2]){ | ||||
|                     rotate([90,0,0])cylinder(h=slide_base_l+q,r=rod_hole_dia/2,center=true); | ||||
|                 } | ||||
|             } | ||||
|             // base bottom mounting holes | ||||
|             for(x=[-slide_base_w/3,-slide_base_w/5,+slide_base_w/3,+slide_base_w/5],y=[-slide_base_l/2.5,-slide_base_l/7.5,+slide_base_l/2.5,+slide_base_l/7.5]){ | ||||
|                 translate([x,y,-(slide_base_h/2)+(slide_bottom_t/2)]){ | ||||
|                 cylinder(h=slide_bottom_t+Q,r=slide_base_hole_dia/2,center=true); | ||||
|                 } | ||||
|             } | ||||
|             // mounting holes on top of the walls | ||||
|             for(x=[-(slide_base_w/2-slide_wall_t/2),(slide_base_w/2-slide_wall_t/2)],y=[-(slide_base_l/2-slide_wall_t/2),(slide_base_l/2-slide_wall_t/2)]){ | ||||
|                 translate([x,y,(slide_base_h/2)-(slide_wall_hole_t/2)]){ | ||||
|                     cylinder(h=slide_wall_hole_t+q,r=slide_wall_hole_dia/2,center=true); | ||||
|                 } | ||||
|             } | ||||
|             // hdd mounting-holes | ||||
|             for(x=[-(slide_base_w/2-slide_wall_hole_t/2),(slide_base_w/2-slide_wall_hole_t/2)],y=[draw_hole_y1,draw_hole_y2,draw_hole_y3]){ | ||||
|                 translate([x,-draw_hole_y3-draw_hole_dia*2.5+y+draw_hole_y3/2,-slide_base_h/2+slide_wall_z_offset])rotate([0,90,0])cylinder(h=slide_wall_hole_t+q,r=draw_hole_dia/2,center=true); | ||||
|             }             | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| module slider_filler(){ | ||||
|     difference(){ | ||||
|         cube([filler_w,draw_hole_y3,draw_hole_dia*2],center=true); | ||||
|         for(x=[draw_hole_y1,draw_hole_y2,draw_hole_y3]){ | ||||
|             translate([0,-(draw_hole_y3+draw_hole_dia)/2-7.5+x,0])rotate([0,90,0])#cylinder(h=filler_w+q,r=(draw_hole_dia/2)+0.5,center=true); | ||||
|             } | ||||
|     } | ||||
| } | ||||
|  | ||||
| module slider_top(){ | ||||
|     translate([0,slide_base_l/2,slide_top_h/2+slide_base_h]){ | ||||
|         difference(){ | ||||
|             cube([slide_base_w,slide_base_l,slide_top_h],center=true); | ||||
|             translate([0,0,0])cube([slide_base_w-(2*slide_wall_t),slide_base_l+q,slide_base_h+q],center=true); | ||||
|             for(x=[-(slide_base_w/2-slide_wall_t/2),(slide_base_w/2-slide_wall_t/2)],y=[-(slide_base_l/2-slide_wall_t/2),(slide_base_l/2-slide_wall_t/2)]){ | ||||
|                 translate([x,y,0]){ | ||||
|                     translate([0,0,flange_h])cylinder(h=slide_top_h+q,r=slide_wall_hole_dia/2+flange_d,center=true); | ||||
|                     cylinder(h=slide_top_h+q,r=slide_wall_hole_dia/2,center=true); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| module clip_small(){ | ||||
|     translate([(slide_base_w/3+slide_base_w/5)/2,slide_base_l/2-slide_base_l/2.5,slide_bottom_t/2+mt*1.5]){ | ||||
|         difference(){ | ||||
|             union(){ | ||||
|                 cube([(slide_base_w/3+slide_base_w/5)/2-slide_base_hole_dia,slide_base_hole_dia*2,mt],center=true); | ||||
|                 translate([0,0,mt/4])rotate([90,0,0])scale([1.25,1,1])cylinder(h=slide_base_hole_dia*2,r=rod_hole_dia/2,center=true); | ||||
|             } | ||||
|             for(x=[-(((slide_base_w/3+slide_base_w/5)/2-slide_base_hole_dia)/2-slide_base_hole_dia*0.75),(((slide_base_w/3+slide_base_w/5)/2-slide_base_hole_dia)/2-slide_base_hole_dia*0.75)]){ | ||||
|                 translate([x,0,0])cylinder(h=slide_bottom_t+Q,r=slide_base_hole_dia/2-0.5,center=true); | ||||
|             } | ||||
|             translate([0,0,-mt/2])rotate([90,0,0])cylinder(h=slide_base_hole_dia*2+q,r=rod_hole_dia/2,center=true); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| module clip_wide(){ | ||||
|     translate([0,slide_base_l/2-slide_base_l/2.5,slide_bottom_t/2+mt*1.5]){ | ||||
|         difference(){ | ||||
|             union(){ | ||||
|                 hull(){ | ||||
|                     translate([slide_base_w/5,0,0])cylinder(h=mt,r=slide_base_hole_dia*0.66,center=true); | ||||
|                     translate([-slide_base_w/5,0,0])cylinder(h=mt,r=slide_base_hole_dia*0.66,center=true);    | ||||
|                 } | ||||
|             } | ||||
|             translate([slide_base_w/5,0,mt/2])cylinder(h=mt*0.75,r=slide_base_hole_dia+q,center=true); | ||||
|             translate([-slide_base_w/5,0,mt/2])cylinder(h=mt*0.75,r=slide_base_hole_dia+q,center=true);  | ||||
|             for(x=[-(slide_base_w/5),(slide_base_w/5)]){ | ||||
|                 translate([x,0,0])cylinder(h=slide_bottom_t+Q,r=slide_base_hole_dia/2-0.5,center=true); | ||||
|             } | ||||
|             for(x=[-slide_channel_w/2:1:slide_channel_w/2]){ | ||||
|             hull(){ | ||||
|                 translate([x,0,-slide_base_hole_dia/2+mt/2-layer*2]){ | ||||
|                     rotate([90,0,0])cylinder(h=slide_base_hole_dia*0.66*2+q,r=rod_hole_dia/2,center=true); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| module clip_rear_base(){ | ||||
|     translate([0,slide_base_l/2-slide_base_l/2.5,slide_bottom_t/2+mt*1.5]){ | ||||
|         difference(){ | ||||
|             union(){ | ||||
|                 hull(){ | ||||
|                     translate([slide_base_w/5,0,mt*0.5])cylinder(h=mt*2,r=slide_base_hole_dia*1.15,center=true); | ||||
|                     translate([-slide_base_w/5,0,mt*0.5])cylinder(h=mt*2,r=slide_base_hole_dia*1.15,center=true);    | ||||
|                 } | ||||
|             } | ||||
|             translate([slide_base_w/5,0,mt*2])cylinder(h=mt*2,r=slide_base_hole_dia*0.75+q,center=true); | ||||
|             translate([-slide_base_w/5,0,mt*2])cylinder(h=mt*2,r=slide_base_hole_dia*0.75+q,center=true);  | ||||
|            // translate([slide_base_w/3,0,mt*2])cylinder(h=mt*2,r=slide_base_hole_dia*0.75+q,center=true); | ||||
|            // translate([-slide_base_w/3,0,mt*2])cylinder(h=mt*2,r=slide_base_hole_dia*0.75+q,center=true);            | ||||
|             for(x=[-(slide_base_w/3),(slide_base_w/3),-(slide_base_w/5),(slide_base_w/5)]){ | ||||
|                 translate([x,0,0])cylinder(h=slide_bottom_t+Q,r=slide_base_hole_dia/2-0.5,center=true); | ||||
|             } | ||||
|             for(x=[-slide_channel_w/2:1:slide_channel_w/2]){ | ||||
|             hull(){ | ||||
|                 translate([x,0,-slide_base_hole_dia/2+mt/2-layer*2]){ | ||||
|                     rotate([90,0,0])cylinder(h=slide_base_hole_dia*2.3+2*q,r=rod_hole_dia/2,center=true); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         translate([0,0,post_h/2+mt*1.5-q]){ | ||||
|             difference(){ | ||||
|                 cylinder(r=slide_base_hole_dia+q,h=post_h,center=true,$fn=100); | ||||
|                 cylinder(r=slide_base_hole_dia/2,h=post_h+q,center=true); | ||||
|             }             | ||||
|         } | ||||
|     }     | ||||
| } | ||||
|  | ||||
| module linkage(){ | ||||
|     translate([0,slide_base_l/2-slide_base_l/2.5,slide_bottom_t/2+mt*1.5+post_h/2+mt*1.5]){ | ||||
|         rotate([0,0,55])difference(){ | ||||
|             union(){ | ||||
|                 translate([0,-(link1_l/2),0])cube([post_h*2,link1_l,post_h-1],center=true); | ||||
|                 // set1 | ||||
|                 cylinder(h=post_h-1,r=slide_base_hole_dia+3,center=true); | ||||
|                 // set2 | ||||
|                 translate([0,-link1_l,0])cylinder(h=post_h-1,r=slide_base_hole_dia+3,center=true); | ||||
|             } | ||||
|             cylinder(h=post_h-1+q,r=slide_base_hole_dia+0.25,center=true); | ||||
|             translate([0,-link1_l,0])cylinder(h=post_h-1+q,r=slide_base_hole_dia+0.25,center=true); | ||||
|         } | ||||
|         translate([-0.66,-23.5,-post_h-5]){ | ||||
|             difference(){ | ||||
|                 union(){ | ||||
|                     cube([link2_l,post_h*2,post_h-1],center=true); | ||||
|                     translate([-(link2_l/2),0,0])cylinder(h=post_h-1,r=slide_base_hole_dia+3,center=true); | ||||
|                 } | ||||
|                     translate([-(link2_l/2),0,0])cylinder(h=post_h-1+q,r=slide_base_hole_dia+0.25,center=true); | ||||
|             } | ||||
|             translate([link2_l/2,0,(post_h)/2]){ | ||||
|                 difference(){ | ||||
|                     cylinder(r=slide_base_hole_dia+q,h=post_h-1+post_h,center=true,$fn=100); | ||||
|                     translate([0,0,post_h/2])cylinder(r=slide_base_hole_dia/2,h=post_h+q,center=true); | ||||
|                 } | ||||
|             }  | ||||
|         } | ||||
|     } | ||||
|     // washer, arbitrary values | ||||
|     translate([0,13,33])difference(){ | ||||
|         cylinder(r=7,h=1.5,center=true,$fn=100); | ||||
|          | ||||
|         cylinder(r=2,h=1.5+q,center=true,$fn=100); | ||||
|     } | ||||
| } | ||||
|  | ||||
| module base_end(){ | ||||
|     difference(){ | ||||
|         slider_base(); | ||||
|         translate([0,slide_base_l/2+slide_base_l/7,0])cube([slide_base_w+q,slide_base_l+q,slide_base_h*2+q],center=true); | ||||
|     } | ||||
|     clip_rear_base(); | ||||
|     linkage(); | ||||
| }; | ||||
| // ##################################### | ||||
| //drawer_mockup(); | ||||
| difference(){ | ||||
|     union(){ | ||||
|         translate([13,draw_l_front+5.5,0]){ | ||||
|             slider_base(); | ||||
|             translate([0,0,0.1])slider_top(); | ||||
|         } | ||||
|     } | ||||
|     translate([13,draw_l_front+63,6.5]){ | ||||
|         disk_mockup(); | ||||
|         translate([0,0,9])disk_mockup(); | ||||
|     } | ||||
| } | ||||
| translate([13,draw_l_front+5.5,5])clip_small(); | ||||
| translate([13,draw_l_front+5.5,10])clip_wide(); | ||||
| translate([-(draw_w_inner/2-filler_w/2-slack/2),draw_l_front+draw_l_inner/2-5,slide_wall_z_offset])color("pink")slider_filler(); | ||||
|  | ||||
| translate([13,draw_l_front-25.5,0])base_end(); | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
										
											Binary file not shown.
										
									
								
							
		Reference in New Issue
	
	Block a user