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 18:29:51 +02:00
shield_w = 177.5 ; // 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
shield_holes = 1 ; // draw holes if >0
shield_hole_d1 = 2.75 ;
shield_hole_d2 = shield_hole_d1 + 0.5 ; // conical holes
// 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_gril_h = shield_h - 3 * mt ;
m_gril_w = mt ;
m_gril_angle = 15 ;
m_gril_spacing = m_gril_w ;
// #####################################
// 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
for ( x = [ - shield_w / 2 + shield_tab_emboss_l / 2 , shield_w / 2 - shield_tab_emboss_l / 2 ] ) { // tab-cutout
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 ) ; // supportblock for edge-cutout
}
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
2022-09-11 18:29:51 +02:00
# 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 17:20:37 +02:00
shield_hole ( - shield_w / 2 + mt / 2 + 148.5 , 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 + 173 , 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 18:29:51 +02:00
shield_hole ( shield_w / 2 - mt / 2 , - 0.5 , 4 , 0 , 90 ) ; //right side ok
2022-09-11 17:20:37 +02:00
shield_hole ( - shield_w / 2 + mt / 2 + 173 , - shield_h / 2 + mt / 2 , 4.25 , 90 , 0 ) ; // bottom side, 1st one from right
2022-09-11 18:29:51 +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
}
}
for ( x = [ - shield_w / 2 + shield_tab_emboss_l / 2 + mt / 2 , shield_w / 2 - shield_tab_emboss_l / 2 - mt / 2 ] ) { // tab-cutout support-structure
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 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 "modules"
module shield_2 ( ) {
difference ( ) {
shield_1 ( ) ;
}
}
// #####################################
// DRAWING:
difference ( ) {
shield_1 ( ) ;
translate ( [ 0 , 0 , 6 ] ) cube ( [ 200 , 100 , 5 ] , center = true ) ;
translate ( [ 0 , 0 , - 5.45 ] ) cube ( [ 200 , 100 , 5 ] , center = true ) ;
}
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