2022-09-11 17:20:37 +02:00
// 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/
// #####################################
// 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:
2022-09-11 19:44:18 +02:00
shield_w = 178 ; // let's hope that fits onto my delta...
2022-09-11 17:20:37 +02:00
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
2022-09-11 19:44:18 +02:00
shield_tab_emboss_l2 = shield_tab_emboss_l / 2 ; // length of the side cutouts
2022-09-11 17:20:37 +02:00
shield_holes = 1 ; // draw holes if >0
shield_hole_d1 = 2.75 ;
2022-09-11 19:44:18 +02:00
shield_hole_d2 = shield_hole_d1 + 0.5 ; // slightly conical holes for better inserting
2022-09-11 17:20:37 +02:00
// 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":
2022-09-11 21:02:15 +02:00
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 ;
2022-09-11 17:20:37 +02:00
// #####################################
// MODEL:
// mounting holes around the shield perimeter
module shield_hole ( x , y , z , rotx , roty ) {
2022-09-11 18:29:51 +02:00
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 ) ;
2022-09-11 17:20:37 +02:00
}
// 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
2022-09-11 19:44:18 +02:00
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
2022-09-11 17:20:37 +02:00
}
2022-09-11 19:44:18 +02:00
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
2022-09-11 17:20:37 +02:00
}
2022-09-11 19:44:18 +02:00
2022-09-11 17:20:37 +02:00
}
2022-09-11 19:44:18 +02:00
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
2022-09-11 17:20:37 +02:00
}
2022-09-11 19:44:18 +02:00
}
2022-09-11 17:20:37 +02:00
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 ( ) ;
2022-09-11 21:02:15 +02:00
cube ( [ shield_center_slot_w , shield_h + q , shield_d + q ] , center = true ) ;
2022-09-11 17:20:37 +02:00
for ( y = [ - shield_hole_center_dist / 2 , shield_hole_center_dist / 2 ] ) {
2022-09-11 21:02:15 +02:00
translate ( [ 0 , y , mt / 2 ] ) rotate ( [ 0 , 90 , 0 ] ) cylinder ( d = shield_hole_center_dia , h = mt * 4 + q , center = true ) ;
2022-09-11 17:20:37 +02:00
}
}
}
else shield ( ) ;
}
2022-09-11 19:44:18 +02:00
// second iteration: add some holes
2022-09-11 17:20:37 +02:00
module shield_2 ( ) {
difference ( ) {
shield_1 ( ) ;
2022-09-11 19:44:18 +02:00
if ( shield_holes > 0 ) {
// some holes all around, (left, than clockwise, viewed from behind)
// 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
2022-09-11 23:54:04 +02:00
shield_hole ( - shield_w / 2 + mt / 2 + 148 , shield_h / 2 - mt / 2 , 4.4 , - 90 , 0 ) ; //top side, 3rd from left
2022-09-11 19:44:18 +02:00
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)
2022-09-11 21:02:15 +02:00
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)
2022-09-11 19:44:18 +02:00
shield_hole ( shield_w / 2 - mt / 2 , - 0.5 , 4 , 0 , 90 ) ; //right side
2022-09-11 21:02:15 +02:00
shield_hole ( - shield_w / 2 + mt / 2 + 172.5 , - shield_h / 2 + mt / 2 , 4.25 , 90 , 0 ) ; // bottom side, 1st one from right
2022-09-11 19:44:18 +02:00
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
}
2022-09-11 17:20:37 +02:00
}
}
2022-09-11 21:02:15 +02:00
// 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 ) ;
}
}
}
}
}
}
2022-09-11 17:20:37 +02:00
// #####################################
// DRAWING:
2022-09-11 21:02:15 +02:00
//difference(){
shield_grill ( ) ;
// translate([0,0,6])cube([200,100,5],center=true);
// translate([0,0,-5.45])cube([200,100,5],center=true);
//}
2022-09-11 17:20:37 +02:00
2022-09-11 18:29:51 +02:00
// todo:
// shield holes durchgängig
// seitlicher tab hinzufügen, loch beachten!
2022-09-11 17:20:37 +02:00