1
0
mirror of synced 2026-05-02 22:43:04 +00:00
Files
rdolbeau.SBusFPGA/sbus-to-ztex/Backplate.scad
Romain Dolbeau 8f017f5b92 improve backplate
2022-01-29 10:49:35 +01:00

495 lines
20 KiB
OpenSCAD

add_fan = 1; // not really compatible with USB...
add_vga = 0;
add_usb = 1;
usb_angled = 1;
SBUS_WIDTH = 83.82;
SBUS_LENGTH = 146.7;
SBUS_THICKNESS = 1.6;
MYSBUS_MISSING_LENGTH = 47;
SBUS_BACKPLATE_THICKNESS = 1.19;
SBUS_BACKPLATE_FULLHEIGHT = 19.64;
SBUS_BACKPLATE_PROTUSION_HEIGHT = 1.22;
SBUS_BACKPLATE_HEIGHT = SBUS_BACKPLATE_FULLHEIGHT - SBUS_BACKPLATE_PROTUSION_HEIGHT;
SBUS_BACKPLATE_PROTUSION_FROMSIDE = 13;
SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM = 1.12;
SBUS_GAP_BACKPLATE = 2.54;
SBUS_BACKPLATE_TOPHOLETOTOPHOLE = 79.24;
SBUS_BACKPLATE_TOPHOLEFROMSIDE = 2.29;
SBUS_BACKPLATE_TOPHOLEFROMBOTTOM = 15.43;
SBUS_BACKPLATE_TOPHOLEFROMFULLBOTTOM = SBUS_BACKPLATE_TOPHOLEFROMBOTTOM + SBUS_BACKPLATE_PROTUSION_HEIGHT;
SBUS_BACKPLATE_HOLESTOHOLES = 78.23;
SBUS_BACKPLATE_HOLEFROMSIDE = 2.795;
SBUS_BACKPLATE_HOLEFROMFULLBOTTOM = 7.08;
SBUS_BACKPLATE_HOLEFROMBOTTOM = SBUS_BACKPLATE_HOLEFROMFULLBOTTOM - SBUS_BACKPLATE_PROTUSION_HEIGHT;
SBUS_BACKPLATE_WIDTH = SBUS_BACKPLATE_TOPHOLETOTOPHOLE + 2 * SBUS_BACKPLATE_TOPHOLEFROMSIDE;
SBUS_BACKPLATE_PROTUSION_WIDTH = SBUS_BACKPLATE_WIDTH - 2 * SBUS_BACKPLATE_PROTUSION_FROMSIDE;
MY_FULL_LENGTH = MYSBUS_MISSING_LENGTH + SBUS_GAP_BACKPLATE + SBUS_BACKPLATE_THICKNESS;
//holes:
// 110,130.82
// 110,120.82
// 110,82
// top left 97,50
// -> 13,80.82 ; 13,70.82 ; 13,32 from top left
STRUT_HEIGHT = 10.01; // max 15.31
STRUT_WIDTH = 3;
SMALL_STRUT_HEIGHT = 5;
SMALL_STRUT_WIDTH = 2;
SMALL_STRUT_LENGTH = 20;
USB_PLUG_OFFSET = (add_vga!=0 ? 65 : 30);
USB_PLUG_IDX = (add_vga!=0 ? 3 : -4);
fan_depth=8;
fan_height=25;
fan_width=fan_height;
fan_carrier_depth=5;
fan_extra_height=3;
vertical_offset=fan_height/2-SBUS_THICKNESS/2-(SBUS_BACKPLATE_PROTUSION_HEIGHT + SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM)+fan_extra_height/2;
carrier_offset_from_backplate=5;
carrier_offset=-MY_FULL_LENGTH/2+fan_width/2+carrier_offset_from_backplate; // negative -> toward back
module
primary ()
{
USBCABLE_HOLLOWOUT_WIDTH = 10;
USBCABLE_HOLLOWOUT_LENGTH = 16.5;
USBCABLE_HOLLOWOUT_OFFSETX = -7.5+0.001;
USBCABLE_HOLLOWOUT_OFFSETY = -16.5;
USBCABLE_HOLLOWOUT2_WIDTH = 21;
USBCABLE_HOLLOWOUT2_LENGTH = 6;
USBCABLE_HOLLOWOUT2_OFFSETX = -12.5;
USBCABLE_HOLLOWOUT2_OFFSETY = -16.5;
union () // A
{
difference() { // B
union() { // C
color ("green") cube ([SBUS_WIDTH, MY_FULL_LENGTH, SBUS_THICKNESS], center = true);
translate ([0, -MY_FULL_LENGTH / 2 + SBUS_BACKPLATE_THICKNESS / 2, SBUS_BACKPLATE_HEIGHT / 2 - SBUS_THICKNESS / 2 - SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM]) {
union ()
{
color ("black")
cube ([SBUS_BACKPLATE_WIDTH, SBUS_BACKPLATE_THICKNESS, SBUS_BACKPLATE_HEIGHT], center = true);
translate ([0, 0, -SBUS_BACKPLATE_PROTUSION_HEIGHT / 2]) {
color ("black")
cube ([SBUS_BACKPLATE_PROTUSION_WIDTH, SBUS_BACKPLATE_THICKNESS, SBUS_BACKPLATE_FULLHEIGHT], center = true);
}
} // union
}
/* to fix the board to the machine */
FIX_HOLES_STUB_LENGTH=3;
translate ([-SBUS_WIDTH/2+(SBUS_WIDTH-SBUS_BACKPLATE_HOLESTOHOLES)/2,
-MY_FULL_LENGTH / 2 + SBUS_BACKPLATE_THICKNESS / 2+FIX_HOLES_STUB_LENGTH/2,
-SBUS_THICKNESS/2-SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM+7.08]) rotate([90,0,0]) color ("black") cylinder (h = FIX_HOLES_STUB_LENGTH, r1 = 2, r2 = 2, center = true);
translate ([+SBUS_WIDTH/2-(SBUS_WIDTH-SBUS_BACKPLATE_HOLESTOHOLES)/2,
-MY_FULL_LENGTH / 2 + SBUS_BACKPLATE_THICKNESS / 2+FIX_HOLES_STUB_LENGTH/2,
-SBUS_THICKNESS/2-SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM+7.08]) rotate([90,0,0]) color ("black") cylinder (h = FIX_HOLES_STUB_LENGTH, r1 = 2, r2 = 2, center = true);
/* USB plug (StarTech cable) */
if (add_usb) {
union() {
color ("grey")
translate ([-SBUS_WIDTH/2+USB_PLUG_OFFSET,
0.001-MY_FULL_LENGTH/2+4,
14.8/2-SBUS_THICKNESS/2-SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM-SBUS_BACKPLATE_PROTUSION_HEIGHT + 3.12])
cube ([16.5+4, 12, 9.5+4 /* 14.8 max */], center = true);
}
}
if (0) for (i =[-2: 1:2]) {
translate ([i * 15 + 2.5, 0, STRUT_HEIGHT / 2 - 0.1]) color ("red") cube ([STRUT_WIDTH, MY_FULL_LENGTH, STRUT_HEIGHT], center = true);
}
} // union C
union() { // Z
if (add_usb && usb_angled) {
translate ([SBUS_WIDTH / 2 - USBCABLE_HOLLOWOUT_WIDTH / 2 + 5+ USBCABLE_HOLLOWOUT_OFFSETX,
MY_FULL_LENGTH / 2 + USBCABLE_HOLLOWOUT_LENGTH / 2 + USBCABLE_HOLLOWOUT_OFFSETY,
0]) {
color ("yellow")
cube ([USBCABLE_HOLLOWOUT_WIDTH, USBCABLE_HOLLOWOUT_LENGTH, 50], center = true);
}
translate ([SBUS_WIDTH / 2 - USBCABLE_HOLLOWOUT2_WIDTH / 2 + 5+ USBCABLE_HOLLOWOUT2_OFFSETX,
MY_FULL_LENGTH / 2 + USBCABLE_HOLLOWOUT2_LENGTH / 2 + USBCABLE_HOLLOWOUT2_OFFSETY,
0]) {
color ("yellow")
cube ([USBCABLE_HOLLOWOUT2_WIDTH, USBCABLE_HOLLOWOUT2_LENGTH, 50], center = true);
}
}
/* to fix the board to the machine */
translate ([-SBUS_WIDTH/2+(SBUS_WIDTH-SBUS_BACKPLATE_HOLESTOHOLES)/2,
-MY_FULL_LENGTH / 2 + SBUS_BACKPLATE_THICKNESS / 2,
-SBUS_THICKNESS/2-SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM+7.08]) rotate([90,0,0]) color ("yellow") cylinder (h = 10, r1 = 1.5, r2 = 1.5, center = true);
translate ([+SBUS_WIDTH/2-(SBUS_WIDTH-SBUS_BACKPLATE_HOLESTOHOLES)/2,
-MY_FULL_LENGTH / 2 + SBUS_BACKPLATE_THICKNESS / 2,
-SBUS_THICKNESS/2-SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM+7.08]) rotate([90,0,0]) color ("yellow") cylinder (h = 10, r1 = 1.5, r2 = 1.5, center = true);
/* USB plug (StarTech cable) */
if (add_usb) {
union() {
color ("yellow")
translate ([-SBUS_WIDTH/2+USB_PLUG_OFFSET,
0.001-MY_FULL_LENGTH/2+4,
14.8/2-SBUS_THICKNESS/2-SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM-SBUS_BACKPLATE_PROTUSION_HEIGHT + 3.12])
cube ([16, 20, 9.5], center = true);
}
}
} // union Z
}// difference B
//translate ([SBUS_WIDTH/2-18,7+(MY_FULL_LENGTH-SMALL_STRUT_LENGTH)/2,SMALL_STRUT_HEIGHT/2]) color("red") cube([SMALL_STRUT_WIDTH, SMALL_STRUT_LENGTH, SMALL_STRUT_HEIGHT], center = true);
//translate ([-SBUS_WIDTH/2+24,7+(MY_FULL_LENGTH-SMALL_STRUT_LENGTH)/2,SMALL_STRUT_HEIGHT/2]) color("red") cube([SMALL_STRUT_WIDTH, SMALL_STRUT_LENGTH, SMALL_STRUT_HEIGHT], center = true);
MY_BOARD_OVERLAP_LENGTH = 20;
MY_BACKPLATE_OVERLAP_LENGTH = 12;
MY_OVERLAP_LENGTH = MY_BOARD_OVERLAP_LENGTH + MY_BACKPLATE_OVERLAP_LENGTH;
FIXHOLE_X_OFFSET = 13;
FIXHOLE1_Y_OFFSET = SBUS_WIDTH - 16.3;
FIXHOLE2_Y_OFFSET = SBUS_WIDTH - 66.82;
FIXHOLE3_Y_OFFSET = 32;
FIXHOLE_RAD = 1.5;
SERIAL_HOLLOWOUT_WIDTH = 18;
SERIAL_HOLLOWOUT_LENGTH = 5;
SERIAL_HOLLOWOUT_OFFSET = 3;
PMOD_HOLLOWOUT_WIDTH = 18;
PMOD_HOLLOWOUT_LENGTH = 9;
PMOD_HOLLOWOUT_OFFSETX = (31 - SBUS_WIDTH) + PMOD_HOLLOWOUT_WIDTH / 2;
PMOD_HOLLOWOUT_OFFSETY = 7;
USB_HOLLOWOUT_WIDTH = 14;
USB_HOLLOWOUT_LENGTH = 5;
USB_HOLLOWOUT_OFFSETX = -5+0.001;
USB_HOLLOWOUT_OFFSETY = 6;
SDCARD_HOLLOWOUT_WIDTH = 5;
SDCARD_HOLLOWOUT_LENGTH = 5;
SDCARD_HOLLOWOUT_OFFSETX = -36+SDCARD_HOLLOWOUT_WIDTH/2+0.001;
SDCARD_HOLLOWOUT_OFFSETY = 2.501;
JTAG_HOLLOWOUT_WIDTH = 5;
JTAG_HOLLOWOUT_LENGTH = 16;
JTAG_HOLLOWOUT_OFFSET = 6;
difference () { // I
union () {
translate ([0,
MY_FULL_LENGTH / 2 + MY_OVERLAP_LENGTH / 2 -
MY_BACKPLATE_OVERLAP_LENGTH, 0.00000000001 - SBUS_THICKNESS / 2 - (SBUS_BACKPLATE_PROTUSION_HEIGHT + SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM) / 2]) {
color ("blue")
cube ([SBUS_WIDTH, MY_OVERLAP_LENGTH, /*SBUS_THICKNESS */
SBUS_BACKPLATE_PROTUSION_HEIGHT + SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM], center = true);
}
STRUT_WIDTH=2;
translate ([
SBUS_WIDTH/2-STRUT_WIDTH/2,
-12+MY_FULL_LENGTH / 2 + MY_OVERLAP_LENGTH / 2 -
MY_BACKPLATE_OVERLAP_LENGTH, 0.00000000001 - SBUS_THICKNESS / 2 - (SBUS_BACKPLATE_PROTUSION_HEIGHT + SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM) / 2]) {
color ("blue")
cube ([STRUT_WIDTH, MY_OVERLAP_LENGTH, /*SBUS_THICKNESS */
SBUS_BACKPLATE_PROTUSION_HEIGHT + SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM], center = true);
}
}
union () // J
{
/* fixing holes (PCB to 3D printed part) */
translate ([-SBUS_WIDTH / 2 + FIXHOLE1_Y_OFFSET, MY_FULL_LENGTH / 2 + FIXHOLE_X_OFFSET, 0]) {
color ("yellow") cylinder (h = 50, r1 = FIXHOLE_RAD, r2 = FIXHOLE_RAD, center = true);
}
translate ([-SBUS_WIDTH / 2 + FIXHOLE2_Y_OFFSET, MY_FULL_LENGTH / 2 + FIXHOLE_X_OFFSET, 0]) {
color ("yellow") cylinder (h = 50, r1 = FIXHOLE_RAD, r2 = FIXHOLE_RAD, center = true);
}
/*
translate ([-SBUS_WIDTH / 2 + FIXHOLE3_Y_OFFSET, MY_FULL_LENGTH / 2 + FIXHOLE_X_OFFSET, 0]) {
color ("yellow") cylinder (h = 50, r1 = FIXHOLE_RAD, r2 = FIXHOLE_RAD, center = true);
}
*/
/*
translate ([SBUS_WIDTH / 2 - SERIAL_HOLLOWOUT_WIDTH / 2 + 5, MY_FULL_LENGTH / 2 + SERIAL_HOLLOWOUT_OFFSET + SERIAL_HOLLOWOUT_LENGTH / 2, 0]) {
color ("yellow")
cube ([SERIAL_HOLLOWOUT_WIDTH + 10, SERIAL_HOLLOWOUT_LENGTH, 50], center = true);
}
*/
translate ([SBUS_WIDTH / 2 - PMOD_HOLLOWOUT_WIDTH / 2 + PMOD_HOLLOWOUT_OFFSETX,
MY_FULL_LENGTH / 2 + PMOD_HOLLOWOUT_LENGTH / 2 + PMOD_HOLLOWOUT_OFFSETY,
0]) {
color ("yellow")
cube ([PMOD_HOLLOWOUT_WIDTH, PMOD_HOLLOWOUT_LENGTH, 50], center = true);
}
if (1) { // we always need to leave space for the USB chips, w/ or w/o cable
translate ([SBUS_WIDTH / 2 - USB_HOLLOWOUT_WIDTH / 2 + 5+ USB_HOLLOWOUT_OFFSETX,
MY_FULL_LENGTH / 2 + USB_HOLLOWOUT_LENGTH / 2 + USB_HOLLOWOUT_OFFSETY,
0]) {
color ("yellow")
cube ([USB_HOLLOWOUT_WIDTH, USB_HOLLOWOUT_LENGTH, 50], center = true);
}
}
translate ([SBUS_WIDTH / 2 - SDCARD_HOLLOWOUT_WIDTH / 2 + 5+ SDCARD_HOLLOWOUT_OFFSETX,
MY_FULL_LENGTH / 2 + SDCARD_HOLLOWOUT_LENGTH / 2 + SDCARD_HOLLOWOUT_OFFSETY,
0]) {
color ("yellow")
cube ([SDCARD_HOLLOWOUT_WIDTH, SDCARD_HOLLOWOUT_LENGTH, 50], center = true);
}
translate ([-SBUS_WIDTH / 2 + JTAG_HOLLOWOUT_WIDTH / 2 + JTAG_HOLLOWOUT_OFFSET,
MY_FULL_LENGTH / 2 + JTAG_HOLLOWOUT_LENGTH / 2,
0]) {
color ("yellow")
cube ([JTAG_HOLLOWOUT_WIDTH, JTAG_HOLLOWOUT_LENGTH, 50], center = true);
}
/* USB */
if (add_usb) {
translate ([SBUS_WIDTH / 2 - USBCABLE_HOLLOWOUT_WIDTH / 2 + 5+ USBCABLE_HOLLOWOUT_OFFSETX,
MY_FULL_LENGTH / 2 + USBCABLE_HOLLOWOUT_LENGTH / 2 + USBCABLE_HOLLOWOUT_OFFSETY,
0]) {
color ("yellow")
cube ([USBCABLE_HOLLOWOUT_WIDTH, USBCABLE_HOLLOWOUT_LENGTH, 50], center = true);
}
}
} // union J
} // difference I
} // union A
}
module
extra_holes ()
{
EXTRA_RAD = 2;
union ()
{
/* border line (fan & jtag sides) */
for (i =[-8: 16:8]) {
for (j =[-4: 1:8]) {
if ((i!=8) || (j < 1) || (add_usb == 0 && j < 5))
translate ([i * 5, j * 5, 0])
color ("pink") cylinder (h = 50, r1 = 1.5, r2 = 1.5, center = true);
}
}
/* holes in extension */
for (i =[-6: 2:6]) {
for (j =[-4: 1:5]) {
if (((i<-4) || (i>0)) || (add_vga==0))
if (!add_usb || (i<=(USB_PLUG_IDX-1)) || (i>=(USB_PLUG_IDX+5)) || (j>-3)) // USB plug
if (!((i>=5) && ((j>=4))) || (!add_usb && j==4)) // USB weakness
translate ([i * 5, j * 5, 0])
color ("pink") cylinder (h = 50, r1 = EXTRA_RAD, r2 = EXTRA_RAD, center = true);
}
}
/* holes in extension */
for (i =[-7: 2:7]) {
for (j =[-3.5: 1:4.5]) {
if (((i<-5) || (i>1)) || (j>0 && j<4 ) || (add_vga==0))
if ((!add_usb || (i<=(USB_PLUG_IDX)) || i>=(USB_PLUG_IDX+4)) || (j>-3)) // USB plug
translate ([i * 5, j * 5, 0])
color ("pink") cylinder (h = 50, r1 = EXTRA_RAD, r2 = EXTRA_RAD, center = true);
}
}
/* holes in support */
for (i =[-4: 2:6]) {
for (j =[5: 1:8]) {
if (((i<-4) || (i>0)) || (j>5) || (add_vga==0))
if (!((i==6) && (j>=5) && (j<=8))) // USB weakness
translate ([i * 5, j * 5, 0])
color ("pink") cylinder (h = 50, r1 = EXTRA_RAD, r2 = EXTRA_RAD, center = true);
}
}
/* holes in support */
for (i =[-5: 2:7]) {
for (j =[5.5: 1:8.5]) {
if (!((i==5) && (j > 7)) && !((i==-5) && (j > 7))) // fixation holes are there
if (!((i==7) && (j>=5.5) && (j<=7.5))) // USB weakness
translate ([i * 5, j * 5, 0])
color ("pink") cylinder (h = 50, r1 = EXTRA_RAD, r2 = EXTRA_RAD, center = true);
}
}
}
}
module
fan_25mm_carveout() {
translate([(SBUS_WIDTH-fan_depth)/2+fan_carrier_depth/2+0.4999,carrier_offset,vertical_offset]) {
color("pink") cube([fan_depth+fan_carrier_depth+1, fan_width, fan_height], center = true);
}
translate([(SBUS_WIDTH-fan_carrier_depth)/2-fan_depth,carrier_offset,vertical_offset]) {
rotate([0,90,0]) color("red") cylinder(h=0.01+fan_carrier_depth,r1=(fan_width/2-1),r2=(fan_width/2-1), center=true);
}
union() {
if (0) translate([(SBUS_WIDTH-fan_carrier_depth)/2-fan_depth,carrier_offset,vertical_offset]) {
rotate([0,90,0]) color("red") cylinder(h=2+fan_carrier_depth,r1=(fan_width/2-1),r2=(fan_width/2-1), center=true);
}
translate([0,-10,-10])
translate([(SBUS_WIDTH-fan_carrier_depth)/2-fan_depth,carrier_offset,vertical_offset]) {
rotate([0,90,0]) color("red") cylinder(h=2+fan_carrier_depth,r1=screw_hole_r,r2=screw_hole_r, center=true);
}
translate([0, 10,-10])
translate([(SBUS_WIDTH-fan_carrier_depth)/2-fan_depth,carrier_offset,vertical_offset]) {
rotate([0,90,0]) color("red") cylinder(h=2+fan_carrier_depth,r1=screw_hole_r,r2=screw_hole_r, center=true);
}
translate([0, 10, 10])
translate([(SBUS_WIDTH-fan_carrier_depth)/2-fan_depth,carrier_offset,vertical_offset]) {
rotate([0,90,0]) color("red") cylinder(h=2+fan_carrier_depth,r1=screw_hole_r,r2=screw_hole_r, center=true);
}
translate([0,-10, 10])
translate([(SBUS_WIDTH-fan_carrier_depth)/2-fan_depth,carrier_offset,vertical_offset]) {
rotate([0,90,0]) color("red") cylinder(h=2+fan_carrier_depth,r1=screw_hole_r,r2=screw_hole_r, center=true);
}
}
}
module vga_support() {
/* plug */
union() {
color ("grey")
translate ([-SBUS_WIDTH/2+31,
0.001-MY_FULL_LENGTH/2-1/2,
14.8/2-SBUS_THICKNESS/2-SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM-SBUS_BACKPLATE_PROTUSION_HEIGHT + 3.12])
cube ([31.8+10, 2, 14.8], center = true);
}
/* pcb */
if (0) color ("violet")
translate ([-SBUS_WIDTH/2+31,
0,
0.00000000001 - SBUS_THICKNESS / 2 - (SBUS_BACKPLATE_PROTUSION_HEIGHT + SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM) / 2])
cube ([19.2+4, MY_FULL_LENGTH,
SBUS_BACKPLATE_PROTUSION_HEIGHT + SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM], center = true);
if (0) color ("violet")
translate ([-SBUS_WIDTH/2+31,
-MY_FULL_LENGTH/2+22/2,
0.00000000001 - SBUS_THICKNESS / 2 - (SBUS_BACKPLATE_PROTUSION_HEIGHT + SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM) / 2])
cube ([31.8+4, 22, /*SBUS_THICKNESS */
SBUS_BACKPLATE_PROTUSION_HEIGHT + SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM], center = true);
color ("violet")
translate ([-SBUS_WIDTH/2+31,
-MY_FULL_LENGTH/2+5/2+3.5,
0.00000000001 - SBUS_THICKNESS / 2 - (SBUS_BACKPLATE_PROTUSION_HEIGHT + SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM) / 2])
cube ([31.8+8, 4, /*SBUS_THICKNESS */
SBUS_BACKPLATE_PROTUSION_HEIGHT + SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM], center = true);
color ("violet")
translate ([-SBUS_WIDTH/2+31,
-MY_FULL_LENGTH/2+5/2+15,
0.00000000001 - SBUS_THICKNESS / 2 - (SBUS_BACKPLATE_PROTUSION_HEIGHT + SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM) / 2])
cube ([31.8+8, 4, /*SBUS_THICKNESS */
SBUS_BACKPLATE_PROTUSION_HEIGHT + SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM], center = true);
}
module vga_carveout() {
union() {
/* plug */
color ("yellow")
translate ([-SBUS_WIDTH/2+31,
-0-MY_FULL_LENGTH/2-1/2,
0.001/2+14.5/2])
cube ([18, 5+0.001, 10], center = true); // hole big enough for the cable shield
translate ([-SBUS_WIDTH/2+31-12.5,
-MY_FULL_LENGTH/2-1/2,
6.3+SBUS_THICKNESS/2]) rotate([90,0,0]) color ("yellow") cylinder (h = 10, r1 = 1.6, r2 = 1.6, center = true);
translate ([-SBUS_WIDTH/2+31+12.5,
-MY_FULL_LENGTH/2-1/2,
6.3+SBUS_THICKNESS/2]) rotate([90,0,0]) color ("yellow") cylinder (h = 10, r1 = 1.6, r2 = 1.6, center = true);
/* pcb */
color ("yellow")
translate ([-SBUS_WIDTH/2+31,
0,
-0.001])
cube ([19.2+0.8, MY_FULL_LENGTH+0.001, SBUS_THICKNESS + 0.003], center = true);
color ("yellow")
translate ([-SBUS_WIDTH/2+31,
0.5-MY_FULL_LENGTH/2+23/2,
-0.001+14.5/2-0.5])
cube ([32+0.8, 1+23+0.001, SBUS_THICKNESS + 0.003+14.5-1], center = true);
color ("yellow")
translate ([-SBUS_WIDTH/2+31,
MY_FULL_LENGTH/2-10-2,
0])
cube ([19.2+0.8, 20, 50], center = true);
}
}
screw_hole_r=1.55;
module
fan_25mm_support() {
union() {
// body
translate([(SBUS_WIDTH-fan_carrier_depth)/2-fan_depth,carrier_offset,vertical_offset]) {
color("black") cube([fan_carrier_depth, fan_width+fan_extra_height, fan_height+fan_extra_height], center = true);
}
// support
/* extra -2 (translate) and -4 (size) for usb */
translate([(SBUS_WIDTH-fan_carrier_depth)/2-fan_depth+0.5,(fan_width+fan_extra_height+carrier_offset_from_backplate-4)/2-MY_FULL_LENGTH/2 + SBUS_BACKPLATE_THICKNESS/2,0]) {
color("purple") cube([fan_carrier_depth+5, fan_width+fan_extra_height+carrier_offset_from_backplate-4, SBUS_THICKNESS], center = true);
}
// strut between the backplate and the fan carrier
/* extra -2 (translate) and -4 (size) for usb */
echo(carrier_offset_from_backplate);
echo(carrier_offset);
strut_width=carrier_offset_from_backplate+0.001;
translate ([(SBUS_WIDTH-fan_carrier_depth)/2-fan_depth, strut_width/2-MY_FULL_LENGTH/2 + SBUS_BACKPLATE_THICKNESS/2, (SBUS_BACKPLATE_FULLHEIGHT-5)/2-SBUS_THICKNESS/2-SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM]) color ("purple") cube ([fan_carrier_depth/2, strut_width,SBUS_BACKPLATE_FULLHEIGHT-5 ], center = true);
triangle_width=carrier_offset_from_backplate-3;
triangle_height=12;
translate ([(SBUS_WIDTH-fan_carrier_depth)/2-fan_depth, carrier_offset-(fan_width+fan_extra_height)/2-triangle_width/2, triangle_height/2-SBUS_THICKNESS/2-SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM+SBUS_BACKPLATE_FULLHEIGHT-5]) rotate([0,90,0]) color("pink") translate([0,0,-fan_carrier_depth/4]) linear_extrude(height=fan_carrier_depth/2) polygon( points=[[triangle_height/2,-triangle_width/2],[-triangle_height/2,triangle_width/2],[triangle_height/2,triangle_width/2]] );
/* incompatible with usb */
if (0) translate ([(SBUS_WIDTH-fan_carrier_depth)/2-fan_depth, carrier_offset+(fan_width+fan_extra_height)/2+triangle_width/2, triangle_height/2-SBUS_THICKNESS/2-SBUS_BACKPLATE_BOTTOM_TO_BOARD_BOTTOM+SBUS_BACKPLATE_FULLHEIGHT-5]) rotate([0,90,0]) color("pink") translate([0,0,-fan_carrier_depth/4]) linear_extrude(height=fan_carrier_depth/2) polygon( points=[[triangle_height/2,-triangle_width/2],[-triangle_height/2,-triangle_width/2],[triangle_height/2,triangle_width/2]] );
}
}
difference() {
union() {
difference ()
{
primary ();
union() {
extra_holes ();
}
}
if (add_fan!=0) fan_25mm_support();
if (add_vga!=0) vga_support();
}
if (add_fan!=0) fan_25mm_carveout();
if (add_vga!=0) vga_carveout();
}