reorder supermicro-sc808t stuff
							
								
								
									
										
											BIN
										
									
								
								openscad/own/supermicro_sc808t/fanholder/IMG/fanholder-rear.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 43 KiB | 
							
								
								
									
										
											BIN
										
									
								
								openscad/own/supermicro_sc808t/fanholder/IMG/fanholder.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 39 KiB | 
							
								
								
									
										
											BIN
										
									
								
								openscad/own/supermicro_sc808t/fanholder/STL/fanholder-rear.stl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								openscad/own/supermicro_sc808t/fanholder/STL/fanholder.stl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										92
									
								
								openscad/own/supermicro_sc808t/fanholder/fanholder-rear.scad
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,92 @@ | ||||
| // supermicro SC808 (and others) fan holder for 2x 40x40x28mm fans instead of 3x 40x40x56mm | ||||
| // by zeus - 2022-09-09 - CC-BY-NC-SA-4.0 - https://git.kostianix.de/zeus/3d-stuff/openscad/own/supermicro_sc808t/ | ||||
| // ##################################### | ||||
| $fn=100; | ||||
| mt=1.75; | ||||
| mt_center=22.5; | ||||
| nipple_offset=5.5; | ||||
| fan_w=42.0; | ||||
| fan_h=fan_w; | ||||
| fan_d=28.75; | ||||
| fan_holedist=32.2; | ||||
| fan_block_w=fan_w*0.55; | ||||
| base_w=2*fan_w+2*mt+mt_center; | ||||
| base_d=fan_d+2*mt+2*nipple_offset; | ||||
| base_h=10; | ||||
| base_hole_dist=157; | ||||
| base_hole_dia=6.4; | ||||
| base_hole_sleeve_h=4; | ||||
| base_hole_sleeve_dia=base_hole_dia+1.5; | ||||
|  | ||||
| base_hole_y_offset=7.5; | ||||
| base_w_cpl=base_hole_dist+2*mt; | ||||
| base_w_tab=base_w_cpl/2-mt-mt_center/2-fan_w; | ||||
| // ##################################### | ||||
| module fanblock(){ | ||||
|     union(){     | ||||
|         difference(){ | ||||
|             cube([base_w,base_d,base_h],center=true); | ||||
|             cube([base_w-2*mt,base_d-2*mt,base_h+0.1],center=true); | ||||
|             for (x=[-mt_center/2-fan_w/2,-(-mt_center/2-fan_w/2)],y=[(fan_d+2*nipple_offset)/2-mt,-(fan_d+2*nipple_offset)/2+mt],z=[mt,-mt]){ | ||||
|                 translate([x,y,0]){ | ||||
|                         rotate([90,0,0])translate([0,fan_w/2-base_h/2+mt,z])cylinder(r=fan_w/2,h=2*mt+0.1,center=true); | ||||
|                     } | ||||
|             } | ||||
|         } | ||||
|     for (x=[-mt_center/2-fan_w/2,-(-mt_center/2-fan_w/2)],y=[(fan_d+2*nipple_offset)/2-mt,-(fan_d+2*nipple_offset)/2+mt]){ | ||||
|         translate([x,y,0]){ | ||||
|             difference(){ | ||||
|                 cube([fan_block_w,2*mt,base_h],center=true); | ||||
|                 rotate([90,0,0])translate([0,fan_w/2-base_h/2+mt,0])cylinder(r=fan_w/2,h=2*mt+0.1,center=true); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     cube([mt_center,fan_d+2*nipple_offset,base_h],center=true); | ||||
|     }     | ||||
| } | ||||
| module sleeve(){ | ||||
|     difference(){ | ||||
|         cylinder(d=base_hole_sleeve_dia,h=base_hole_sleeve_h,center=true); | ||||
|         cylinder(d=base_hole_dia,h=base_hole_sleeve_h+0.1,center=true); | ||||
|     } | ||||
| } | ||||
|  | ||||
| module sleeve6(){ | ||||
|     $fn=6; | ||||
|     difference(){ | ||||
|         cylinder(d=base_hole_sleeve_dia+2,h=base_hole_sleeve_h,center=true); | ||||
|         cylinder(d=base_hole_dia+2,h=base_hole_sleeve_h+0.1,center=true); | ||||
|     } | ||||
| } | ||||
|  | ||||
| module tab(){ | ||||
|     difference(){ | ||||
|         hull(){ | ||||
|             translate([-mt/2,0,0])cube([mt,base_d,mt],center=true); | ||||
|             translate([-base_w_tab,-base_hole_y_offset-mt,0])cylinder(r=base_hole_dia/2-1,h=mt,center=true); | ||||
|             translate([-base_w_tab,+base_hole_y_offset+mt,0])cylinder(r=base_hole_dia/2-1,h=mt,center=true); | ||||
|         } | ||||
|         translate([-base_hole_dist/2+base_w/2,base_hole_y_offset,0])cylinder(d=base_hole_dia+2,h=mt+0.1,center=true,$fn=6); | ||||
|         translate([-base_hole_dist/2+base_w/2,-base_hole_y_offset,0])cylinder(d=base_hole_dia,h=mt+0.1,center=true);     | ||||
|     } | ||||
|     translate([-base_hole_dist/2+base_w/2,base_hole_y_offset,base_hole_sleeve_h/2-mt/2])sleeve6(); | ||||
|     translate([-base_hole_dist/2+base_w/2,-base_hole_y_offset,base_hole_sleeve_h/2-mt/2])sleeve(); | ||||
|     hull(){ | ||||
|         translate([-mt/2,0,0])cube([mt,mt,mt],center=true); | ||||
|         translate([-mt/2,0,base_h-mt])cube([mt,mt,mt],center=true); | ||||
|         translate([-mt/2-base_w_tab,0,0])cube([mt,mt,mt],center=true); | ||||
|     } | ||||
| } | ||||
| module hole_control(){ | ||||
|     for(x=[-base_hole_dist/2,base_hole_dist/2],y=[-base_hole_y_offset,base_hole_y_offset]){ | ||||
|         translate([x,y,0])#cylinder(d=base_hole_dia-1,h=4*mt,center=true); | ||||
|         } | ||||
| } | ||||
| // ##################################### | ||||
| translate([0,0,base_h/2])fanblock(); | ||||
|  | ||||
| translate([-base_w/2,0,mt/2])tab(); | ||||
| rotate([0,0,180])translate([-base_w/2,0,mt/2])mirror([0,1,0])tab(); | ||||
|  | ||||
|  | ||||
| //hole_control(); | ||||
							
								
								
									
										83
									
								
								openscad/own/supermicro_sc808t/fanholder/fanholder.scad
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,83 @@ | ||||
| // supermicro SC808 (and others) fan holder for 2x 40x40x28mm fans instead of 3x 40x40x56mm | ||||
| // by zeus - 2022-09-09 - CC-BY-NC-SA-4.0 - https://git.kostianix.de/zeus/3d-stuff/openscad/own/supermicro_sc808t/ | ||||
| // ##################################### | ||||
| $fn=100; | ||||
| mt=1.75; | ||||
| mt_center=22.5; | ||||
| nipple_offset=5.5; | ||||
| fan_w=42.0; | ||||
| fan_h=fan_w; | ||||
| fan_d=28.75; | ||||
| fan_holedist=32.2; | ||||
| fan_block_w=fan_w*0.55; | ||||
| base_w=2*fan_w+2*mt+mt_center; | ||||
| base_d=fan_d+2*mt+2*nipple_offset; | ||||
| base_h=10; | ||||
| base_hole_dist=161.50; | ||||
| base_hole_dia=6.4; | ||||
| base_hole_sleeve_h=4; | ||||
| base_hole_sleeve_dia=base_hole_dia+1.5; | ||||
|  | ||||
| base_hole_y_offset=7.5; | ||||
| base_w_cpl=base_hole_dist+2*mt; | ||||
| base_w_tab=base_w_cpl/2-mt-mt_center/2-fan_w; | ||||
| // ##################################### | ||||
| module fanblock(){ | ||||
|     union(){     | ||||
|         difference(){ | ||||
|             cube([base_w,base_d,base_h],center=true); | ||||
|             cube([base_w-2*mt,base_d-2*mt,base_h+0.1],center=true); | ||||
|             for (x=[-mt_center/2-fan_w/2,-(-mt_center/2-fan_w/2)],y=[(fan_d+2*nipple_offset)/2-mt,-(fan_d+2*nipple_offset)/2+mt],z=[mt,-mt]){ | ||||
|                 translate([x,y,0]){ | ||||
|                         rotate([90,0,0])translate([0,fan_w/2-base_h/2+mt,z])cylinder(r=fan_w/2,h=2*mt+0.1,center=true); | ||||
|                     } | ||||
|             } | ||||
|         } | ||||
|     for (x=[-mt_center/2-fan_w/2,-(-mt_center/2-fan_w/2)],y=[(fan_d+2*nipple_offset)/2-mt,-(fan_d+2*nipple_offset)/2+mt]){ | ||||
|         translate([x,y,0]){ | ||||
|             difference(){ | ||||
|                 cube([fan_block_w,2*mt,base_h],center=true); | ||||
|                 rotate([90,0,0])translate([0,fan_w/2-base_h/2+mt,0])cylinder(r=fan_w/2,h=2*mt+0.1,center=true); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     cube([mt_center,fan_d+2*nipple_offset,base_h],center=true); | ||||
|     }     | ||||
| } | ||||
| module sleeve(){ | ||||
|     difference(){ | ||||
|         cylinder(d=base_hole_sleeve_dia,h=base_hole_sleeve_h,center=true); | ||||
|         cylinder(d=base_hole_dia,h=base_hole_sleeve_h+0.1,center=true); | ||||
|     } | ||||
| } | ||||
| module tab(){ | ||||
|     difference(){ | ||||
|         hull(){ | ||||
|             translate([-mt/2,0,0])cube([mt,base_d,mt],center=true); | ||||
|             translate([-base_w_tab,-base_hole_y_offset-mt,0])cylinder(r=base_hole_dia/2-1,h=mt,center=true); | ||||
|             translate([-base_w_tab,+base_hole_y_offset+mt,0])cylinder(r=base_hole_dia/2-1,h=mt,center=true); | ||||
|         } | ||||
|         translate([-base_hole_dist/2+base_w/2,base_hole_y_offset,0])cylinder(d=base_hole_dia,h=mt+0.1,center=true);     | ||||
|         translate([-base_hole_dist/2+base_w/2,-base_hole_y_offset,0])cylinder(d=base_hole_dia,h=mt+0.1,center=true);     | ||||
|     } | ||||
|     translate([-base_hole_dist/2+base_w/2,base_hole_y_offset,base_hole_sleeve_h/2-mt/2])sleeve(); | ||||
|     translate([base_hole_dist/2+base_w/2,base_hole_y_offset,base_hole_sleeve_h/2-mt/2])sleeve(); | ||||
|     hull(){ | ||||
|         translate([-mt/2,0,0])cube([mt,mt,mt],center=true); | ||||
|         translate([-mt/2,0,base_h-mt])cube([mt,mt,mt],center=true); | ||||
|         translate([-mt/2-base_w_tab,0,0])cube([mt,mt,mt],center=true); | ||||
|     } | ||||
| } | ||||
| module hole_control(){ | ||||
|     for(x=[-base_hole_dist/2,base_hole_dist/2],y=[-base_hole_y_offset,base_hole_y_offset]){ | ||||
|         translate([x,y,0])#cylinder(d=base_hole_dia-1,h=4*mt,center=true); | ||||
|         } | ||||
| } | ||||
| // ##################################### | ||||
| translate([0,0,base_h/2])fanblock(); | ||||
|  | ||||
| translate([-base_w/2,0,mt/2])tab(); | ||||
| rotate([0,0,180])translate([-base_w/2,0,mt/2])tab(); | ||||
|  | ||||
|  | ||||
| //hole_control(); | ||||
							
								
								
									
										
											BIN
										
									
								
								openscad/own/supermicro_sc808t/hdd-holder/IMG/hdd-holder.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 41 KiB | 
							
								
								
									
										
											BIN
										
									
								
								openscad/own/supermicro_sc808t/hdd-holder/IMG_SRC/hdd1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 113 KiB | 
							
								
								
									
										
											BIN
										
									
								
								openscad/own/supermicro_sc808t/hdd-holder/IMG_SRC/hdd2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 62 KiB | 
							
								
								
									
										11766
									
								
								openscad/own/supermicro_sc808t/hdd-holder/IMG_SRC/hdds.dxf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								openscad/own/supermicro_sc808t/hdd-holder/IMG_SRC/hdds.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 125 KiB | 
							
								
								
									
										59
									
								
								openscad/own/supermicro_sc808t/hdd-holder/IMG_SRC/hdds.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 16 KiB | 
							
								
								
									
										
											BIN
										
									
								
								openscad/own/supermicro_sc808t/hdd-holder/IMG_SRC/hdds.xcf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										3
									
								
								openscad/own/supermicro_sc808t/hdd-holder/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,3 @@ | ||||
| The actual model is in SCAD/hdd-holder.scad  | ||||
| the folderstructure and the box.scad is from another project that I borrowed from 'Joaquín Fernández' | ||||
| (https://gitlab.com/joaquinfq/openscad/, CC-BY-NC-4.0) | ||||
| @@ -0,0 +1,83 @@ | ||||
| use <./modules/disk_lff.scad> | ||||
| use <./modules/disk_sff.scad> | ||||
| tolerance=0.3; | ||||
| mt=3; | ||||
| $fn=25; | ||||
| lff_w=101.60+tolerance; | ||||
| lff_l=147.00+tolerance; | ||||
| lff_h=28.50+tolerance; | ||||
| sff_w=69.85+tolerance; | ||||
| sff_l=100.45+tolerance; | ||||
| sff_h=8.50+tolerance; | ||||
| f1_w=15; | ||||
| f1_h=17.5; | ||||
| f1_l=167.5; | ||||
| f2_w=32.5; | ||||
| f2_h=20; | ||||
| f2_l=167.5; | ||||
| lff_tab_d=9; | ||||
| lff_tab_l=88; | ||||
| lff_tab_hole_dia=4; | ||||
| lff_tab_mt=4; | ||||
| h_dia=7.75; | ||||
| // ############################## | ||||
|  | ||||
| module lff_tab(){ | ||||
|     difference(){ | ||||
|         hull(){ | ||||
|             cube([lff_tab_d,lff_tab_mt,lff_tab_l-6*lff_tab_mt],center=true); | ||||
|             for(x=[lff_tab_l/2+lff_tab_mt/2,-lff_tab_l/2-mt/2],y=[-lff_tab_d/2]){ | ||||
|                 translate([y,0,x])#cube([0.1,lff_tab_mt,0.1],center=true); | ||||
|             } | ||||
|         } | ||||
|         for(x=[lff_tab_l/4,-lff_tab_l/4]){ | ||||
|             translate([0,0,x])rotate([90,0,0])#cylinder(h=lff_tab_mt+0.1,d=lff_tab_hole_dia,center=true); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|                | ||||
|  | ||||
| module frame(){ | ||||
|     difference(){ | ||||
|         union(){ | ||||
|             translate([0,-(lff_h/2+mt/2-tolerance-0.1),lff_l/2])cube([lff_w+2*mt,lff_h,lff_l],center=true); //lff-box | ||||
|             for(x=[-(sff_w/2+mt/2+0.1),(sff_w/2+mt/2+0.1)]){ | ||||
|                 translate([x,mt+tolerance,sff_l/2+42.9]){ | ||||
|                     hull(){ | ||||
|                         cube([mt,sff_h,sff_l],center=true); | ||||
|                         translate([0,-sff_h/2,-sff_l/2-sff_h-15])cube([mt,0.1,0.1],center=true); | ||||
|                     } | ||||
|                 } | ||||
|                 translate([lff_tab_d/2+lff_w/2+mt,-lff_h-sff_h/2+2*mt-0.7,lff_l/2-6])lff_tab(); | ||||
|                 mirror([1,0,0])translate([lff_tab_d/2+lff_w/2+mt,-lff_h-sff_h/2+2*mt-0.7,lff_l/2-6])lff_tab(); | ||||
|             } | ||||
|         } | ||||
|         union(){  | ||||
|             // lff, connectors up top | ||||
|             translate([-lff_w/2,-30,0])#sff8300Model(0,8,4,10,0.3,1); | ||||
|             //sff | ||||
|             translate([-sff_w/2,-mt/20,45])#sff8200Model(0,8,0,8,tolerance,5); | ||||
|         } | ||||
|   | ||||
|     } | ||||
| } | ||||
|  | ||||
| module mount(){ | ||||
|     difference(){ | ||||
|         cylinder(d=h_dia+mt,h=mt+1,center=true); | ||||
|         cylinder(d=h_dia,h=mt+2,center=true); | ||||
|          | ||||
|     } | ||||
|      | ||||
| } | ||||
|  | ||||
| // ############################# | ||||
| translate([94.25,-85,30+mt/2])rotate([90,0,180])frame();  | ||||
| //translate([94.25-25-lff_w,-85,30+mt/2])rotate([90,0,180])frame();  | ||||
| //translate([94.25-25-lff_w-25-lff_w,-85,30+mt/2])rotate([90,0,180])frame();  | ||||
|  | ||||
|  | ||||
|  | ||||
| %linear_extrude(10)scale(0.75)import("IMG/hdds.svg",center=true); | ||||
| translate([155,-78.5,0])%cube([1,157,1]); | ||||
| translate([-222.5,-88.5,0])%cube([380,1,1]); | ||||
| @@ -0,0 +1,82 @@ | ||||
| /** | ||||
|  * Model that draws a box that can have screws and slots and that can be used as a negative on another box and obtain the difference. | ||||
|  * can be used as a negative on another box and obtain the difference. | ||||
|  * | ||||
|  * @author Joaquín Fernández | ||||
|  * @url https://gitlab.com/joaquinfq/openscad/blob/master/Modules/Models/box.scad | ||||
|  * @license CC-BY-NC-4.0 | ||||
|  * | ||||
|  * @ @param {Float} width Width of the model to generate. | ||||
|  * @ @param {Float} height Height of the model to generate. | ||||
|  * @param {Float} length Length of the model to be generated. | ||||
|  * @param {Float} thickness Thickness of the block where the model will be inserted. | ||||
|  * @param {Float} screw Diameter of the screw to be used. | ||||
|  * @param {Float} slot Length of the slot where the screws will be inserted. | ||||
|  * @param {Float} tolerance Value to be used to adjust the standard dimensions. | ||||
|  * @param {Float[]} side Coordinates of the side holes. | ||||
|  * @param {Float[]} bottom Coordinates of the bottom holes. | ||||
|  */ | ||||
| module modelBox(width, height, length, thickness, screw = 0, slot = 0, side = [], bottom = []) | ||||
| { | ||||
|     cube([ width, height, length ]); | ||||
|     // Side holes | ||||
|     for (_side = side) | ||||
|     { | ||||
|         if (slot) | ||||
|         { | ||||
|             hull() | ||||
|             { | ||||
|                 for (_n = [ - slot / 2, slot / 2 ]) | ||||
|                 { | ||||
|                     translate([ width / 2, _side[0], _side[1] + _n ]) | ||||
|                     { | ||||
|                         rotate([ 0, 90, 0 ]) | ||||
|                         { | ||||
|                             cylinder(d = screw, h = width + thickness * 2, center = true); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             translate([ width / 2, _side[0], _side[1] ]) | ||||
|             { | ||||
|                 rotate([ 0, 90, 0 ]) | ||||
|                 { | ||||
|                     cylinder(d = screw, h = width + thickness * 2, center = true); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     // Bottom holes | ||||
|     for (_bottom = bottom) | ||||
|     { | ||||
|         if (slot) | ||||
|         { | ||||
|             hull() | ||||
|             { | ||||
|                 for (_n = [ - slot / 2, slot / 2 ]) | ||||
|                 { | ||||
|                     translate([ width - _bottom[0], 0, _bottom[1] + _n ]) | ||||
|                     { | ||||
|                         rotate([ 90, 0, 0 ]) | ||||
|                         { | ||||
|                             cylinder(d = screw, h = thickness); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             translate([ width - _bottom[0], 0, _bottom[1] ]) | ||||
|             { | ||||
|                 rotate([ 90, 0, 0 ]) | ||||
|                 { | ||||
|                     cylinder(d = screw, h = thickness); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,74 @@ | ||||
| /** | ||||
|  * Models and variables according to SFF-8300 specification. | ||||
|  * | ||||
|  * @author  Joaquín Fernández | ||||
|  * @url     https://gitlab.com/joaquinfq/openscad/blob/master/Modules/Models/SFF/8300.scad | ||||
|  * @license CC-BY-NC-4.0 | ||||
|  * | ||||
|  * @see     SFF-8300 3.5" Form Factor Drives | ||||
|  */ | ||||
| //---------------------------------------------------------- | ||||
| use <./box.scad> | ||||
| //---------------------------------------------------------- | ||||
| /** | ||||
|  * Returns the specifications of the measurements according to SFF-8300. | ||||
|  * | ||||
|  * @param {Float} tolerance Tolerance to be used to adjust the measurements. | ||||
|  * @param {Integer} type Type of unit (0: small, 1: medium, 2: large). | ||||
|  * | ||||
|  * @return {Float[]} | ||||
|  */ | ||||
| function sff8300(tolerance = 0, type = 1) = [ | ||||
|       3.00, // Screw diameter | ||||
|      type == 0 ? 42.00 : (type == 1 ? 26.10 : 17.80) + tolerance, | ||||
|     147.00 + tolerance, | ||||
|     101.60 + tolerance, | ||||
|      95.25 + tolerance, | ||||
|       3.18, | ||||
|      44.45 + tolerance / 2, | ||||
|      41.28 + tolerance / 2, | ||||
|      28.50 + tolerance / 2, | ||||
|     101.60 + tolerance / 2, | ||||
|       6.35 + tolerance / 2, | ||||
|       0.25, | ||||
|       0.50, | ||||
|      76.20 + tolerance / 2 | ||||
| ]; | ||||
| //---------------------------------------------------------- | ||||
| /** | ||||
|  * Draw a model of a 3.5" drive according to the SFF-8300 specification. | ||||
|  * | ||||
|  * This model allows the volume to be removed later to create a slot | ||||
|  * like those used in PC cases. | ||||
|  * | ||||
|  * @param {Float} length Length of the drive to be generated. | ||||
|  * @param {Float} thickness Thickness of the block where the model will be inserted. | ||||
|  * @param {Float} screw Diameter of the screw to be used. | ||||
|  * @param {Float} slot Length of the slot where the screws will be inserted. | ||||
|  * @param {Float} tolerance Value to be used to adjust the standard dimensions. | ||||
|  * @param {Integer} type Type of unit (0: small, 1: medium, 2: large). | ||||
|  */ | ||||
| module sff8300Model(length = 0, thickness = 5, screw = 0, slot = 15, tolerance = 0.3, type = 0) | ||||
| { | ||||
|     _A = sff8300(tolerance, type); | ||||
|     modelBox( | ||||
|         _A[3], | ||||
|         _A[1], | ||||
|         length ? length : _A[2], | ||||
|         thickness, | ||||
|         screw ? screw : _A[0], | ||||
|         slot, | ||||
|         [ | ||||
|             [ _A[10], _A[2] - _A[8]         ], | ||||
|             [ _A[10], _A[2] - _A[8] - _A[9] ] | ||||
|         ], | ||||
|         [ | ||||
|             [ _A[5],         _A[2] - _A[7]          ], | ||||
|             [ _A[5],         _A[2] - _A[7] - _A[6]  ], | ||||
|             [ _A[5],         _A[2] - _A[7] - _A[13] ], | ||||
|             [ _A[3] - _A[5], _A[2] - _A[7]          ], | ||||
|             [ _A[3] - _A[5], _A[2] - _A[7] - _A[6]  ], | ||||
|             [ _A[3] - _A[5], _A[2] - _A[7] - _A[13] ] | ||||
|         ] | ||||
|     ); | ||||
| } | ||||
| @@ -0,0 +1,130 @@ | ||||
| /** | ||||
|  * Modelos y variables según la especificación SFF-8200. | ||||
|  * | ||||
|  * @author  Joaquín Fernández | ||||
|  * @url     https://gitlab.com/joaquinfq/openscad/blob/master/Modules/Models/SFF/8200.scad | ||||
|  * @license CC-BY-NC-4.0 | ||||
|  * | ||||
|  * @see     SFF-8200 2.5" Form Factor Drives | ||||
|  */ | ||||
| //---------------------------------------------------------- | ||||
| use <./box.scad> | ||||
| //---------------------------------------------------------- | ||||
| /** | ||||
|  * Devuelve las especificaciones de las medidas según SFF-8200. | ||||
|  * | ||||
|  * @param {Float}   tolerance Tolerancia a usar para ajustar las medidas. | ||||
|  * @param {Integer} type      Tipo de unidad (0: pequeña, 1: mediana, 2: grande). | ||||
|  * | ||||
|  * @return {Float[]} | ||||
|  */ | ||||
| function sff8200(tolerance = 0, type = 0) = [ | ||||
|       3.00, // Diámetro del tornillo | ||||
|      ( | ||||
|          type == 0  | ||||
|             ? 19.05  | ||||
|             : type == 1  | ||||
|                 ? 17.00  | ||||
|                 : type == 2 | ||||
|                     ? 15.00  | ||||
|                     : type == 3 | ||||
|                         ? 12.70  | ||||
|                         : type == 4 | ||||
|                             ? 10.50  | ||||
|                             : type == 5 | ||||
|                                 ? 9.50  | ||||
|                                 : type == 6 | ||||
|                                     ? 8.47 | ||||
|                                     : type == 7 | ||||
|                                         ? 7.00 | ||||
|                                         : 5.00 | ||||
|     ) + tolerance, | ||||
|       0.00, | ||||
|       0.50, | ||||
|      69.85 + tolerance, | ||||
|       0.25, | ||||
|     100.45 + tolerance, | ||||
|      undef, | ||||
|      undef, | ||||
|      undef, | ||||
|     100.20 + tolerance,     // #10 | ||||
|     100.50 + tolerance, | ||||
|     110.20 + tolerance, | ||||
|      undef, | ||||
|      undef, | ||||
|      undef, | ||||
|      undef, | ||||
|      undef, | ||||
|      undef, | ||||
|      undef, | ||||
|      undef,                 // #20 | ||||
|      undef, | ||||
|      undef, | ||||
|       3.00 + tolerance / 2, | ||||
|      34.93, | ||||
|      38.10, | ||||
|      undef, | ||||
|       0.50, | ||||
|       4.07 + tolerance / 2, | ||||
|      61.72, | ||||
|      34.93,                 // #30 | ||||
|      38.10, | ||||
|      undef, | ||||
|       0.50, | ||||
|      undef, | ||||
|      undef, | ||||
|      undef, | ||||
|       8.00, | ||||
|       3.00, | ||||
|      undef, | ||||
|      undef,                 // #40 | ||||
|       2.50, | ||||
|      undef, | ||||
|      undef, | ||||
|      undef, | ||||
|      undef, | ||||
|      undef, | ||||
|      undef, | ||||
|      undef, | ||||
|      undef, | ||||
|      14.00 + tolerance / 2, // #50 | ||||
|      90.60 + tolerance / 2, | ||||
|      14.00 + tolerance / 2, | ||||
|      90.60 + tolerance / 2 | ||||
| ]; | ||||
| //---------------------------------------------------------- | ||||
| /** | ||||
|  * Draw a model of a 3.5" drive according to the SFF-8200 specification. | ||||
|  * | ||||
|  * This model allows the volume to be removed later to create a slot as used in PC cases. | ||||
|  * like those used in PC cases. | ||||
|  * | ||||
|  * @param {Float} length Length of the drive to be generated. | ||||
|  * @param {Float} thickness Thickness of the block where the model will be inserted. | ||||
|  * @param {Float} screw Diameter of the screw to be used. | ||||
|  * @param {Float} slot Length of the slot where the screws will be inserted. | ||||
|  * @param {Float} tolerance Value to be used to adjust the standard dimensions. | ||||
|  * @param {Integer} type Type of unit (0: small, 1: medium, 2: large). | ||||
|  */ | ||||
| module sff8200Model(length = 0, thickness = 5, screw = 0, slot = 15, tolerance = 0.3, type = 0) | ||||
| { | ||||
|     _A = sff8200(tolerance, type); | ||||
|     modelBox( | ||||
|         _A[4], | ||||
|         _A[1], | ||||
|         length ? length : _A[6], | ||||
|         thickness, | ||||
|         screw ? screw : _A[0], | ||||
|         slot, | ||||
|         [ | ||||
|             [ _A[23], _A[6] - _A[52] ], | ||||
|             [ _A[23], _A[6] - _A[53] ] | ||||
|         ], | ||||
|         [ | ||||
|             [ _A[28],         _A[6] - _A[50] ], | ||||
|             [ _A[28],         _A[6] - _A[51] ], | ||||
|             [ _A[4] - _A[28], _A[6] - _A[50] ], | ||||
|             [ _A[4] - _A[28], _A[6] - _A[51] ] | ||||
|         ] | ||||
|     ); | ||||
| } | ||||
							
								
								
									
										
											BIN
										
									
								
								openscad/own/supermicro_sc808t/hdd-holder/STL/hdd-holder.stl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										82
									
								
								openscad/own/supermicro_sc808t/hdd-holder/box.scad
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,82 @@ | ||||
| /** | ||||
|  * Model that draws a box that can have screws and slots and that can be used as a negative on another box and obtain the difference. | ||||
|  * can be used as a negative on another box and obtain the difference. | ||||
|  * | ||||
|  * @author Joaquín Fernández | ||||
|  * @url https://gitlab.com/joaquinfq/openscad/blob/master/Modules/Models/box.scad | ||||
|  * @license CC-BY-NC-4.0 | ||||
|  * | ||||
|  * @ @param {Float} width Width of the model to generate. | ||||
|  * @ @param {Float} height Height of the model to generate. | ||||
|  * @param {Float} length Length of the model to be generated. | ||||
|  * @param {Float} thickness Thickness of the block where the model will be inserted. | ||||
|  * @param {Float} screw Diameter of the screw to be used. | ||||
|  * @param {Float} slot Length of the slot where the screws will be inserted. | ||||
|  * @param {Float} tolerance Value to be used to adjust the standard dimensions. | ||||
|  * @param {Float[]} side Coordinates of the side holes. | ||||
|  * @param {Float[]} bottom Coordinates of the bottom holes. | ||||
|  */ | ||||
| module modelBox(width, height, length, thickness, screw = 0, slot = 0, side = [], bottom = []) | ||||
| { | ||||
|     cube([ width, height, length ]); | ||||
|     // Side holes | ||||
|     for (_side = side) | ||||
|     { | ||||
|         if (slot) | ||||
|         { | ||||
|             hull() | ||||
|             { | ||||
|                 for (_n = [ - slot / 2, slot / 2 ]) | ||||
|                 { | ||||
|                     translate([ width / 2, _side[0], _side[1] + _n ]) | ||||
|                     { | ||||
|                         rotate([ 0, 90, 0 ]) | ||||
|                         { | ||||
|                             cylinder(d = screw, h = width + thickness * 2, center = true); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             translate([ width / 2, _side[0], _side[1] ]) | ||||
|             { | ||||
|                 rotate([ 0, 90, 0 ]) | ||||
|                 { | ||||
|                     cylinder(d = screw, h = width + thickness * 2, center = true); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     // Bottom holes | ||||
|     for (_bottom = bottom) | ||||
|     { | ||||
|         if (slot) | ||||
|         { | ||||
|             hull() | ||||
|             { | ||||
|                 for (_n = [ - slot / 2, slot / 2 ]) | ||||
|                 { | ||||
|                     translate([ width - _bottom[0], 0, _bottom[1] + _n ]) | ||||
|                     { | ||||
|                         rotate([ 90, 0, 0 ]) | ||||
|                         { | ||||
|                             cylinder(d = screw, h = thickness); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             translate([ width - _bottom[0], 0, _bottom[1] ]) | ||||
|             { | ||||
|                 rotate([ 90, 0, 0 ]) | ||||
|                 { | ||||
|                     cylinder(d = screw, h = thickness); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										
											BIN
										
									
								
								openscad/own/supermicro_sc808t/io-shield/IMG/io-shield-blank.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 44 KiB | 
							
								
								
									
										
											BIN
										
									
								
								openscad/own/supermicro_sc808t/io-shield/IMG/io-shield-ports.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 52 KiB | 
| After Width: | Height: | Size: 60 KiB | 
							
								
								
									
										
											BIN
										
									
								
								openscad/own/supermicro_sc808t/io-shield/STL/io-shield-blank.stl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								openscad/own/supermicro_sc808t/io-shield/STL/io-shield-ports.stl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										217
									
								
								openscad/own/supermicro_sc808t/io-shield/io-shield.scad
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,217 @@ | ||||
| // supermicro SC808 (and others) I/O-Shields to be able to utilize mITX-boards with extenation-cords that allow for Surface-Mounting | ||||
| // by zeus - 2022-09-11 - CC-BY-NC-SA-4.0 - https://git.kostianix.de/zeus/3d-stuff/openscad/own/supermicro_sc808t/ | ||||
| // ##################################### | ||||
| // VARS: | ||||
| // ##################################### | ||||
| mt=2; | ||||
| q=0.01; //used as variable to remove manifold-glitches in preview. can be set to "0" in final version | ||||
| $fn=100; | ||||
| // shield: | ||||
| shield_w=178; // let's hope that fits onto my delta... | ||||
| shield_h=41; | ||||
| shield_d=10; //around 11.5 in the original, but that is not needed | ||||
| shield_tab_emboss_d=1; // that lowered lip, that the central and outer tabs mounts onto, 1mm (or one sheet-thickness) lower than the rest | ||||
| shield_tab_emboss_l=22; // length of the above described cutouts | ||||
| shield_tab_emboss_l2=shield_tab_emboss_l/2; // length of the side cutouts | ||||
|  | ||||
| shield_holes=1; // draw holes if >0. the perimeter-holes are manually placed, and should be disabled, if many vars get altered! (and then drilled manually) | ||||
| shield_hole_d1=2.75; | ||||
| shield_hole_d2=shield_hole_d1+0.5; // slightly conical holes for better inserting | ||||
| // for separating the shield into two halves | ||||
| shield_center_slot=1; // draw slot if >0 | ||||
| shield_center_slot_w=0.5; | ||||
| shield_hole_center_dia=4;  | ||||
| shield_hole_center_dist=shield_h/2; | ||||
| // model "gril": | ||||
| m_grill_w=3; | ||||
| m_grill_h=shield_h*0.75-m_grill_w-2*mt; | ||||
| m_grill_skew=25; | ||||
| m_grill_offset=5; | ||||
| m_grill_spacing=m_grill_w; | ||||
| //port ethernet: | ||||
| p_eth_hole_dist=27.5; | ||||
| p_eth_hole_dia=3.5; | ||||
| p_eth_slack=0.5; | ||||
| p_eth_base_x=22+p_eth_slack; | ||||
| p_eth_base_y=21.75+p_eth_slack; | ||||
| p_eth_cut_x=16+p_eth_slack; | ||||
| p_eth_cut_y=13.15+p_eth_slack; | ||||
| p_eth_cut_z=mt; | ||||
| p_eth_cut_x_offset=0; | ||||
| p_eth_cut_y_offset=1.5; | ||||
| //port usb: | ||||
| p_usb_hole_dist=30; | ||||
| p_usb_hole_dia=3.5; | ||||
| p_usb_slack=0.5; | ||||
| p_usb_base_x=23+p_eth_slack; | ||||
| p_usb_base_y=16.5+p_eth_slack; | ||||
| p_usb_cut_x=16+p_eth_slack; | ||||
| p_usb_cut_y=15+p_eth_slack; | ||||
| p_usb_cut_z=mt; | ||||
| p_usb_cut_x_offset=0; | ||||
| p_usb_cut_y_offset=0; | ||||
| //port vga: | ||||
| p_vga_hole_dist=25; | ||||
| p_vga_hole_dia=3.5; | ||||
| p_vga_slack=0.5; | ||||
| p_vga_base_x=34+p_eth_slack; | ||||
| p_vga_base_y=15.25+p_eth_slack; | ||||
| p_vga_cut_x=16+p_eth_slack; | ||||
| p_vga_cut_y=8+p_eth_slack; | ||||
| p_vga_cut_z=mt; | ||||
| p_vga_cut_x_offset=0; | ||||
| p_vga_cut_y_offset=0; | ||||
| //port slot: | ||||
| p_slot_hole_dist=27.5; | ||||
| p_slot_hole_dia=7.5; | ||||
| // ##################################### | ||||
| // MODEL: | ||||
| // mounting holes around the shield perimeter | ||||
| module port_ethernet(){ | ||||
|     cube([p_eth_base_x,p_eth_base_y,mt],center=true); | ||||
|     translate([p_eth_cut_x_offset,p_eth_cut_y_offset,p_eth_cut_z+mt/2])cube([p_eth_cut_x,p_eth_cut_y,p_eth_cut_z+mt],center=true); | ||||
|     hull(){ | ||||
|         translate([-p_eth_hole_dist/2,0,0])cylinder(d=p_eth_hole_dia+mt,h=mt,center=true); | ||||
|         translate([p_eth_hole_dist/2,0,0])cylinder(d=p_eth_hole_dia+mt,h=mt,center=true); | ||||
|    } | ||||
|    translate([-p_eth_hole_dist/2,0,mt*1.5])cylinder(d=p_eth_hole_dia,h=mt*2,center=true); | ||||
|    translate([p_eth_hole_dist/2,0,mt*1.5])cylinder(d=p_eth_hole_dia,h=mt*2,center=true); | ||||
| } | ||||
|  | ||||
| module port_usb(){ | ||||
|     cube([p_usb_base_x,p_usb_base_y,mt],center=true); | ||||
|     translate([p_usb_cut_x_offset,p_usb_cut_y_offset,p_usb_cut_z+mt/2])cube([p_usb_cut_x,p_usb_cut_y,p_usb_cut_z+mt],center=true); | ||||
|     hull(){ | ||||
|         translate([-p_usb_hole_dist/2,0,0])cylinder(d=p_usb_hole_dia+mt,h=mt,center=true); | ||||
|         translate([p_usb_hole_dist/2,0,0])cylinder(d=p_usb_hole_dia+mt,h=mt,center=true); | ||||
|    } | ||||
|    translate([-p_usb_hole_dist/2,0,mt*1.5])cylinder(d=p_usb_hole_dia,h=mt*2,center=true); | ||||
|    translate([p_usb_hole_dist/2,0,mt*1.5])cylinder(d=p_usb_hole_dia,h=mt*2,center=true); | ||||
| } | ||||
|  | ||||
| module port_vga(){ | ||||
|     cube([p_vga_base_x,p_vga_base_y,mt],center=true); | ||||
|     translate([p_vga_cut_x_offset,p_vga_cut_y_offset,p_vga_cut_z+mt/2])cube([p_vga_cut_x,p_vga_cut_y,p_vga_cut_z+mt],center=true); | ||||
|     hull(){ | ||||
|         translate([-p_vga_hole_dist/2,0,0])cylinder(d=p_vga_hole_dia+mt,h=mt,center=true); | ||||
|         translate([p_vga_hole_dist/2,0,0])cylinder(d=p_vga_hole_dia+mt,h=mt,center=true); | ||||
|    } | ||||
|    translate([-p_vga_hole_dist/2,0,mt*1.5])cylinder(d=p_vga_hole_dia,h=mt*2,center=true); | ||||
|    translate([p_vga_hole_dist/2,0,mt*1.5])cylinder(d=p_vga_hole_dia,h=mt*2,center=true); | ||||
| } | ||||
|  | ||||
| module port_slot(){ | ||||
|     hull(){ | ||||
|         translate([-p_slot_hole_dist/2,0,mt])cylinder(d=p_slot_hole_dia,h=mt*2,center=true); | ||||
|         translate([p_slot_hole_dist/2,0,mt])cylinder(d=p_slot_hole_dia,h=mt*2,center=true); | ||||
|     } | ||||
| } | ||||
| module shield_hole(x,y,z,rotx,roty){ | ||||
|     translate([x,y,shield_d/2-z])rotate([rotx,roty,0])cylinder(d1=shield_hole_d1,d2=shield_hole_d2,h=mt+q,center=true); | ||||
| } | ||||
| // basic shield | ||||
| module shield(){ | ||||
|     difference(){ | ||||
|         cube([shield_w,shield_h,shield_d],center=true); // basebox | ||||
|         translate([0,0,mt/2+q])cube([shield_w-2*mt,shield_h-2*mt,shield_d-mt],center=true); // main hollowing | ||||
|         for(x=[-shield_w/2+shield_tab_emboss_l/2,shield_w/2-shield_tab_emboss_l/2]){  | ||||
|             translate([x,shield_h/2-shield_tab_emboss_d/2,0])cube([shield_tab_emboss_l+q,shield_tab_emboss_d+q,shield_d+q],center=true);// top edge-cutout | ||||
|         } | ||||
|         for(x=[-shield_w/2+shield_tab_emboss_d/2,shield_w/2-shield_tab_emboss_d/2]){  | ||||
|             translate([x,shield_h/2-shield_tab_emboss_l2/2,0])cube([shield_tab_emboss_d+q,shield_tab_emboss_l2+q,shield_d+q],center=true);// side edge-cutout | ||||
|         } | ||||
|  | ||||
|   } | ||||
|         for(x=[-shield_w/2+shield_tab_emboss_l/2+mt,shield_w/2-shield_tab_emboss_l/2-mt]){  | ||||
|             translate([x,shield_h/2-shield_tab_emboss_d/2-mt,0])cube([shield_tab_emboss_l+mt+q,shield_tab_emboss_d+q,shield_d+q],center=true);// supportblock for top edge-cutout | ||||
|         for(x=[-shield_w/2+shield_tab_emboss_d/2+shield_tab_emboss_d+mt/2,shield_w/2-shield_tab_emboss_d/2-shield_tab_emboss_d-mt/2]){  | ||||
|             translate([x,shield_h/2-shield_tab_emboss_l2/2-mt,0])cube([shield_tab_emboss_d+q,shield_tab_emboss_l2+q,shield_d+q],center=true);// supportblock for side edge-cutout | ||||
|         } | ||||
|     } | ||||
|         cube([mt*4,shield_h,shield_d],center=true); // central support-block | ||||
| } | ||||
|  | ||||
| // first iteration: optional slotting | ||||
| module shield_1(){ | ||||
|   if (shield_center_slot>0) { // generate slot and matching connection-holes in the center | ||||
|     difference(){ | ||||
|         shield(); | ||||
|         cube([shield_center_slot_w,shield_h+q,shield_d+q],center=true); | ||||
|         for(y=[-shield_hole_center_dist/2,shield_hole_center_dist/2]){ | ||||
|             translate([0,y,mt/2])rotate([0,90,0])cylinder(d=shield_hole_center_dia,h=mt*4+q,center=true); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| else shield();   | ||||
| } | ||||
|  | ||||
| // second iteration: add some holes | ||||
| module shield_2(){ | ||||
|     difference(){ | ||||
|         shield_1(); | ||||
|         if (shield_holes>0) { | ||||
|             // some holes all around, (left, than clockwise, viewed from behind). THESE ARE MANUALLY PLACED! | ||||
|             // shield_hole(x,y,z,rotx,roty), "z" is the distance from lip-edge to the center of the hole, x is from center | ||||
|             shield_hole(-shield_w/2+mt/2,-0.5,4,0,-90); //left side | ||||
|             shield_hole(-shield_w/2+mt/2+4.5,shield_h/2-shield_tab_emboss_d-mt/2-q*0.5,6.25,-90,0); //top side, 1st from left (recessed) | ||||
|             shield_hole(-shield_w/2+mt/2+29.5,shield_h/2-mt/2,4.4,-90,0); //top side, 2nd from left  | ||||
|             shield_hole(-shield_w/2+mt/2+147,shield_h/2-mt/2,4.4,-90,0); //top side, 3rd from left | ||||
|             shield_hole(-shield_w/2+mt/2+162,shield_h/2-shield_tab_emboss_d-mt/2-q*0.5,5.5,-90,0); //top side, 4th from left (recessed) | ||||
|             shield_hole(-shield_w/2+mt/2+171.5,shield_h/2-shield_tab_emboss_d-mt/2-q*0.5,6.25,-90,0); //top side, 5th from left (recessed) | ||||
|             shield_hole(shield_w/2-mt/2,-0.5,4,0,90); //right side | ||||
|             shield_hole(-shield_w/2+mt/2+172.5,-shield_h/2+mt/2,4.25,90,0); // bottom side, 1st one from right | ||||
|             shield_hole(-shield_w/2+mt/2+56.25,-shield_h/2+mt/2,4.25,90,0); //bottom side, 2nd one from right | ||||
|             shield_hole(-shield_w/2+mt/2+4.5,-shield_h/2+mt/2,4.25,90,0); //bottom side, 3rd one from right | ||||
|         } | ||||
|     } | ||||
| } | ||||
| // final interation: with fan-grills | ||||
| module shield_grill(){ | ||||
|     difference(){ | ||||
|         shield_2();  | ||||
|         for(a=[0:m_grill_spacing*2:shield_w/2-mt*3-m_grill_offset*3]){ | ||||
|         translate([-shield_w/2+mt*3+m_grill_offset+a,0,-shield_d/2+mt/2+q]){ | ||||
|             hull(){ | ||||
|                 for (y=[-m_grill_h/2,m_grill_h/2]){ | ||||
|                     rotate([0,0,-m_grill_skew])translate([0,y,0])cylinder(d=m_grill_w,h=2*mt,center=true); | ||||
|                 } | ||||
|             } | ||||
|             translate([shield_w/2,0,0])hull(){ | ||||
|                 for (y=[-m_grill_h/2,m_grill_h/2]){ | ||||
|                     rotate([0,0,-m_grill_skew])translate([0,y,0])cylinder(d=m_grill_w,h=2*mt,center=true); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     } | ||||
| } | ||||
| // final iteration: with ports (manual placement) | ||||
| module shield_ports(){ | ||||
|     difference(){ | ||||
|         shield_2(); | ||||
|         for (x=[-66,-39,-8,8,38.5,47.5,80]){ | ||||
|             translate([x,0,-3*mt-q])rotate([0,0,90])#port_slot(); | ||||
|         }         | ||||
| //flipped and embossed so that only 1mm of the plate thickness is left, due to the way, d-sub is mounted, and no support is needed for printing | ||||
|         translate([-78,-1,-mt-(mt-1)])rotate([180,0,-90])#port_vga();         | ||||
|         translate([-52.5,0,-3*mt-q])rotate([0,0,-90])#port_usb();         | ||||
|         translate([-23,-1,-3*mt-q])rotate([0,0,-90])#port_ethernet(); | ||||
|         translate([22.5,-1,-3*mt-q])rotate([0,0,-90])#port_ethernet(); | ||||
|         translate([63.5,-1,-3*mt-q])rotate([0,0,-90])#port_ethernet(); | ||||
|         // slots | ||||
|     } | ||||
| } | ||||
| // ##################################### | ||||
| // DRAWING: | ||||
|  | ||||
| shield_grill(); | ||||
|  | ||||
| // shield_ports(); | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||