mirror of
https://github.com/rdolbeau/NuBusFPGA.git
synced 2024-12-23 01:30:32 +00:00
159 lines
6.9 KiB
OpenSCAD
159 lines
6.9 KiB
OpenSCAD
THICKNESS_MAX=2.44;
|
||
THICKNESS=2.4;
|
||
|
||
ORIGINAL_THICKNESS=25.4/32;
|
||
|
||
NUBUS_HEIGHT_BELOW_OUTER_LIP=92; // NuBus p57, max is 97.25
|
||
NUBUS_HEIGHT_ABOVE_OUTER_LIP=6; // NuBus p57
|
||
|
||
NUBUS_BETWEEN_NOTCHES=87.25; // DCDMF3 p625 & p635, bottom of low to top of high?
|
||
NUBUS_HIGH_NOTCH_TO_TOP=10.35;// DCDMF3 p635, top of high to bottom of inner lip ?
|
||
|
||
NUBUS_BASE_WIDTH=18.57;
|
||
NUBUS_EXTRA_WIDTH=2.93;
|
||
NUBUS_FULL_WIDTH=NUBUS_BASE_WIDTH+NUBUS_EXTRA_WIDTH;
|
||
NUBUS_TOP_WIDTH=21.82;
|
||
NUBUS_OVERHANG_WIDTH=NUBUS_TOP_WIDTH-NUBUS_BASE_WIDTH;
|
||
NUBUS_EXTRA_FROM_TOP=20.5;
|
||
NUBUS_ANGLE_SECTION_LACK_OF_WIDTH=2.57;
|
||
NUBUS_ANGLE_SECTION_WIDTH_REDUCTION=NUBUS_EXTRA_WIDTH+NUBUS_ANGLE_SECTION_LACK_OF_WIDTH;
|
||
|
||
NUBUS_HEIGHT_NARROW_BOTTOM_TO_TOP=94.6;
|
||
NUBUS_FULL_HEIGHT=(NUBUS_BETWEEN_NOTCHES+NUBUS_HIGH_NOTCH_TO_TOP);
|
||
NUBUS_NARROW_BOTTOM_HEIGHT=NUBUS_FULL_HEIGHT-NUBUS_HEIGHT_NARROW_BOTTOM_TO_TOP;
|
||
|
||
NUBUS_EXTRA_NARROW_BOTTOM=1.5;
|
||
|
||
NUBUS_OVERHANG_MIN_HEIGHT=8.4;
|
||
NUBUS_OVERHANG_MAX_HEIGHT=12.18;
|
||
NUBUS_OVERHANG_RADIUS=3.2;
|
||
NUBUS_TOP_BIT_WIDTH=9.57-2.57;
|
||
|
||
FRONT_NOTCH_FROM_TOP=85.9;
|
||
FRONT_NOTCH_STRAIGHT_WIDTH=2;
|
||
FRONT_NOTCH_STRAIGHT_HEIGHT=6;
|
||
FRONT_NOTCH_ANGLE_HEIGHT=(NUBUS_BETWEEN_NOTCHES+NUBUS_HIGH_NOTCH_TO_TOP)-(FRONT_NOTCH_FROM_TOP+FRONT_NOTCH_STRAIGHT_HEIGHT);
|
||
FRONT_NOTCH_ANGLE_WIDTH=FRONT_NOTCH_ANGLE_HEIGHT*sin(23);
|
||
|
||
points=[[0,0],
|
||
[NUBUS_BASE_WIDTH-7.82-FRONT_NOTCH_STRAIGHT_WIDTH/2-FRONT_NOTCH_ANGLE_WIDTH,0],
|
||
[NUBUS_BASE_WIDTH-7.82-FRONT_NOTCH_STRAIGHT_WIDTH/2,FRONT_NOTCH_ANGLE_HEIGHT],
|
||
[NUBUS_BASE_WIDTH-7.82-FRONT_NOTCH_STRAIGHT_WIDTH/2,FRONT_NOTCH_ANGLE_HEIGHT+FRONT_NOTCH_STRAIGHT_HEIGHT],
|
||
[NUBUS_BASE_WIDTH-7.82+FRONT_NOTCH_STRAIGHT_WIDTH/2,FRONT_NOTCH_ANGLE_HEIGHT+FRONT_NOTCH_STRAIGHT_HEIGHT],
|
||
[NUBUS_BASE_WIDTH-7.82+FRONT_NOTCH_STRAIGHT_WIDTH/2,FRONT_NOTCH_ANGLE_HEIGHT],
|
||
[NUBUS_BASE_WIDTH-7.82+FRONT_NOTCH_STRAIGHT_WIDTH/2+FRONT_NOTCH_ANGLE_WIDTH,0],
|
||
[NUBUS_BASE_WIDTH-NUBUS_EXTRA_NARROW_BOTTOM,0],
|
||
|
||
[NUBUS_BASE_WIDTH-NUBUS_EXTRA_NARROW_BOTTOM,NUBUS_NARROW_BOTTOM_HEIGHT],
|
||
[NUBUS_FULL_WIDTH,NUBUS_NARROW_BOTTOM_HEIGHT],
|
||
[NUBUS_FULL_WIDTH,NUBUS_FULL_HEIGHT-NUBUS_EXTRA_FROM_TOP],
|
||
[NUBUS_FULL_WIDTH-NUBUS_ANGLE_SECTION_WIDTH_REDUCTION,(NUBUS_FULL_HEIGHT-NUBUS_EXTRA_FROM_TOP)+(NUBUS_ANGLE_SECTION_WIDTH_REDUCTION*2)],
|
||
[NUBUS_FULL_WIDTH-NUBUS_ANGLE_SECTION_WIDTH_REDUCTION,NUBUS_FULL_HEIGHT+ORIGINAL_THICKNESS],
|
||
[NUBUS_FULL_WIDTH-NUBUS_ANGLE_SECTION_WIDTH_REDUCTION-NUBUS_TOP_BIT_WIDTH,NUBUS_FULL_HEIGHT+ORIGINAL_THICKNESS],
|
||
[NUBUS_FULL_WIDTH-NUBUS_ANGLE_SECTION_WIDTH_REDUCTION-NUBUS_TOP_BIT_WIDTH,NUBUS_FULL_HEIGHT+ORIGINAL_THICKNESS-6], //6: measurement
|
||
[NUBUS_FULL_WIDTH-NUBUS_ANGLE_SECTION_WIDTH_REDUCTION-NUBUS_TOP_BIT_WIDTH-2,NUBUS_FULL_HEIGHT+ORIGINAL_THICKNESS-6], //2&6: measurement
|
||
[NUBUS_FULL_WIDTH-NUBUS_ANGLE_SECTION_WIDTH_REDUCTION-NUBUS_TOP_BIT_WIDTH-2,NUBUS_FULL_HEIGHT+ORIGINAL_THICKNESS-NUBUS_HIGH_NOTCH_TO_TOP+5], // 5 is the diustance between top notch and top screw hole
|
||
[-NUBUS_OVERHANG_WIDTH,NUBUS_FULL_HEIGHT+ORIGINAL_THICKNESS-NUBUS_HIGH_NOTCH_TO_TOP+5],
|
||
[-NUBUS_OVERHANG_WIDTH,NUBUS_FULL_HEIGHT-NUBUS_OVERHANG_MAX_HEIGHT+NUBUS_OVERHANG_RADIUS],
|
||
[0,NUBUS_FULL_HEIGHT-NUBUS_OVERHANG_MAX_HEIGHT]
|
||
];
|
||
|
||
module backplate() {
|
||
linear_extrude(height = ORIGINAL_THICKNESS, center = true) { polygon(points); };
|
||
}
|
||
|
||
// PCB, don't print
|
||
PCB_THICKNESS=1.6;
|
||
PCB_OFFSET=(NUBUS_FULL_WIDTH-2.93)-PCB_THICKNESS/2;
|
||
module pcb() {
|
||
color("green") translate([PCB_OFFSET,0,-50]) linear_extrude(height = 100, center = true) { polygon ([[-PCB_THICKNESS,-5.08],[0,-5.08],[0,91.52],[-PCB_THICKNESS,91.52]]); };
|
||
}
|
||
|
||
// NuBusFPGA
|
||
BOTTOM_HOLE_Y=8-1.08;
|
||
TOP_HOLE_Y=87.52;
|
||
FIRST_HOLE_X=-6.44;
|
||
SECOND_HOLE_X=-16.44;
|
||
|
||
module holders() {
|
||
difference() {
|
||
union() {
|
||
color("red") translate([0,0,-11]) linear_extrude(height = 22, center = true) { polygon([
|
||
[PCB_OFFSET-PCB_THICKNESS,BOTTOM_HOLE_Y-4],
|
||
[PCB_OFFSET-PCB_THICKNESS,BOTTOM_HOLE_Y+4],
|
||
[PCB_OFFSET-PCB_THICKNESS-2,BOTTOM_HOLE_Y+4],
|
||
[PCB_OFFSET-PCB_THICKNESS-2,BOTTOM_HOLE_Y-4],
|
||
]); };
|
||
color("red") translate([0,0,-11]) linear_extrude(height = 22, center = true) { polygon([
|
||
[PCB_OFFSET-PCB_THICKNESS,TOP_HOLE_Y-4],
|
||
[PCB_OFFSET-PCB_THICKNESS,TOP_HOLE_Y+4],
|
||
[PCB_OFFSET-PCB_THICKNESS-2,TOP_HOLE_Y+4],
|
||
[PCB_OFFSET-PCB_THICKNESS-2,TOP_HOLE_Y-4],
|
||
]); };
|
||
}
|
||
union() {
|
||
color("blue") translate([0,BOTTOM_HOLE_Y,FIRST_HOLE_X]) rotate([0,90,0]) cylinder(r1=1.6,r2=1.6,h=20);
|
||
color("blue") translate([0,BOTTOM_HOLE_Y,SECOND_HOLE_X]) rotate([0,90,0]) cylinder(r1=1.6,r2=1.6,h=20);
|
||
color("blue") translate([0,TOP_HOLE_Y,FIRST_HOLE_X]) rotate([0,90,0]) cylinder(r1=1.6,r2=1.6,h=20);
|
||
color("blue") translate([0,TOP_HOLE_Y,SECOND_HOLE_X]) rotate([0,90,0]) cylinder(r1=1.6,r2=1.6,h=20);
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
//cube ([16.5+4, 12, 9.5+4 /* 14.8 max */], center = true);
|
||
USB_HOLDER_HEIGHT=5;
|
||
USB_HOLDER_WIDTH=10;
|
||
USB_HOLDER_DEPTH=5;
|
||
module usb_pos() {
|
||
translate([-1-USB_HOLDER_HEIGHT/2+PCB_OFFSET-PCB_THICKNESS,100-(74.67+(83.47-74.67)/2),-USB_HOLDER_DEPTH/2]) cube([2+USB_HOLDER_HEIGHT,2+USB_HOLDER_WIDTH,USB_HOLDER_DEPTH], center = true);
|
||
}
|
||
module usb_neg() {
|
||
translate([-0.499-USB_HOLDER_HEIGHT/2+PCB_OFFSET-PCB_THICKNESS,100-(74.67+(83.47-74.67)/2),-USB_HOLDER_DEPTH/2]) cube([1.001+USB_HOLDER_HEIGHT,USB_HOLDER_WIDTH,USB_HOLDER_DEPTH*4], center = true);
|
||
}
|
||
|
||
VGA_HOLDER_HEIGHT=14.8;
|
||
VGA_HOLDER_WIDTH=31.8;
|
||
VGA_HOLDER_DEPTH=2;
|
||
module vga_pos() {
|
||
translate([-VGA_HOLDER_HEIGHT/2+PCB_OFFSET-PCB_THICKNESS,100-(18.21+(49.05-18.21)/2),-VGA_HOLDER_DEPTH/2+VGA_HOLDER_DEPTH]) cube ([VGA_HOLDER_HEIGHT, 6+VGA_HOLDER_WIDTH, VGA_HOLDER_DEPTH], center = true);
|
||
}
|
||
module vga_neg() {
|
||
translate([-VGA_HOLDER_HEIGHT/2+PCB_OFFSET-PCB_THICKNESS,100-(18.21+(49.05-18.21)/2),-VGA_HOLDER_DEPTH/2]) cube ([10, 18, 10+0.001], center = true);
|
||
|
||
|
||
translate([-VGA_HOLDER_HEIGHT/2+PCB_OFFSET-PCB_THICKNESS,100-(18.21+(49.05-18.21)/2)-12.5,-VGA_HOLDER_DEPTH/2]) color("black") rotate([0,0,90]) cylinder (h = 10, r1 = 1.6, r2 = 1.6, center = true);
|
||
translate([-VGA_HOLDER_HEIGHT/2+PCB_OFFSET-PCB_THICKNESS,100-(18.21+(49.05-18.21)/2)+12.5,-VGA_HOLDER_DEPTH/2]) color("black") rotate([0,0,90]) cylinder (h = 10, r1 = 1.6, r2 = 1.6, center = true);
|
||
}
|
||
|
||
HDMI_HOLDER_HEIGHT=8;
|
||
HDMI_HOLDER_WIDTH=18;
|
||
HDMI_HOLDER_DEPTH=2;
|
||
module hdmi_pos() {
|
||
translate([-1-HDMI_HOLDER_HEIGHT/2+PCB_OFFSET-PCB_THICKNESS,100-(53.3+(71.3-53.3)/2),-HDMI_HOLDER_DEPTH/2]) cube ([2+HDMI_HOLDER_HEIGHT, 2+HDMI_HOLDER_WIDTH, HDMI_HOLDER_DEPTH], center = true);
|
||
}
|
||
module hdmi_neg() {
|
||
translate([-0.499-HDMI_HOLDER_HEIGHT/2+PCB_OFFSET-PCB_THICKNESS,100-(53.3+(71.3-53.3)/2),-HDMI_HOLDER_DEPTH/2]) cube ([1.001+HDMI_HOLDER_HEIGHT, HDMI_HOLDER_WIDTH, 5+0.001], center = true);
|
||
}
|
||
|
||
//pcb();
|
||
|
||
module complete() {
|
||
difference() {
|
||
union() {
|
||
backplate();
|
||
holders();
|
||
usb_pos();
|
||
vga_pos();
|
||
hdmi_pos();
|
||
}
|
||
union() {
|
||
usb_neg();
|
||
vga_neg();
|
||
hdmi_neg();
|
||
}
|
||
}
|
||
}
|
||
|
||
complete();
|