1681 lines
71 KiB
OpenSCAD
Executable File
1681 lines
71 KiB
OpenSCAD
Executable File
/*
|
|
SBC Library Copyright 2016,2017,2018,2019,2020,2021,2022 Edward A. Kisiel hominoid@cablemi.com
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
Code released under GPLv3: http://www.gnu.org/licenses/gpl.html
|
|
|
|
20190214 Version 1 Component Library for the SBC Model Framework
|
|
component classes and types:
|
|
memory - emmc, emmc_plug, sodimm_5.2, sodimm_9.2
|
|
switch - slide_4x9
|
|
button - momentary_6x6x9, momentary_6x6x4
|
|
plug - pwr5.5_7.5x11.5, pwr2.5_5x7.5, rtc_micro, uart_micro, molex_4x1, small_encl_satapwr
|
|
usb2 - single_vert_a, double_stacked_a, micro
|
|
usb3 - double_stacked_a
|
|
network - rj45_single
|
|
video - hdmi_a, dp-hdmi_a
|
|
fan - micro, encl_pmw
|
|
gpio - encl_header_30, encl_header_12, header_40, header_20
|
|
ic - ic_2.8x2.8, ic_4.7x4.7, ic_5x5, ic_5.75x5.75, ic_6x6, ic_6.75x6.75, ic_7x7, ic_6.7x8.4, ic_11x8, ic_13x8
|
|
audio - out-in-spdif
|
|
storage - sata_header, sata_encl_power, sata_encl_header, m.2_header, sdcard
|
|
combo - rj45-usb2_double, rj45-usb3_double
|
|
jumper - header_2x1, header_7x1
|
|
misc - ir_1
|
|
|
|
20190218 Version 1.0.1 added type "jack_3.5" under class "audio"
|
|
add type "ic_3x3","ic_6.4x6.4","ic_3.7x3.7","ic_4.3x5.1","ic_5.4x5.3" under class "ic"
|
|
20200425 Version 1.0.2 corrected HK Odroid-h2 hdmi-displayport component y size
|
|
added type "ic_13x9","ic_9x9" under class "ic"
|
|
added "heatsink" class with types "xu4_oem","xu4q_oem","c1+_oem","c2_oem","c4_oem","n2_oem","h2_oem"
|
|
added Odroid-N2_Heatsink.stl from Hard Kernel
|
|
added Odroid-H2_Heatsink.stl from HK forum user @ravelle
|
|
20200725 Version 1.0.3 added Odroid-N2+ Heatsink.stl from Hard Kernel as class "heatsink" type "n2+_oem" and type "batt_hold_1"
|
|
under "misc" class
|
|
20201021 Version 1.0.4 added type "header_5x1" under "jumper" class, type "sata_power_vrec" under class "storage"
|
|
and type "hc4_oem" under class "heatsink"
|
|
20220202 Version 1.0.5 added type "header_6x1","header_3x2" under "jumper" class, led_3x1.5 under misc class,
|
|
momentary_3x2 under button class, fixed ir, corrected sata height, fixed header_7x1
|
|
20220413 Version 1.0.6 adjusted slide_4x9, adjust m.2_header, rj45-usb2_double, rj45-usb3_double, out-in-spdif,
|
|
momentary_6x6x4, fixed color for usb2 micro otg, adjust all header heights,
|
|
added mipi_csi, mipi_dsi, m.2_stud
|
|
20220515 Version 1.0.7 added pcie(), jst_ph(), cm(), cm_holder(), corrected odroid-m1 heatsink height and sbc location, and other fixes and adjustments
|
|
|
|
see https://github.com/hominoids/SBC_Case_Builder
|
|
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
pcb_add(size_x,size_y,loc_x,loc_y,rotation,side,type,pcbsize_z,data_1,data_2) - "square","round"
|
|
pcb_sub(size_x,size_y,loc_x,loc_y,rotation,side,type,pcbsize_z,data_1,data_2) - "square","round","art"
|
|
pcb_art(scale_d1,type,dxf_file) - "dxf"
|
|
pcb(size, radius)
|
|
memory(x,y,rotation,side,type,pcbsize_z) - "emmc","emmc_plug","sodimm_5.2","sodimm_9.2"
|
|
switch(x,y,rotation,side,type,pcbsize_z) - "slide_4x9"
|
|
button(x,y,rotation,side,type,pcbsize_z) - "momentary_6x6x9","momentary_6x6x4","momentary_6x6x4_90","momentary_4x2x1"
|
|
plug(x,y,rotation,side,type,pcbsize_z) - "pwr2.5_5x7.5","pwr5.5_7.5x11.5","pwr5.5_10x10","rtc_micro","audio_micro","uart_micro","molex_4x1","small_encl_satapwr"
|
|
usb2(x,y,rotation,side,type,pcbsize_z) - "single_vert_a","double_stacked_a","micro"
|
|
usb3(x,y,rotation,side,type,pcbsize_z) - "double_stacked_a"
|
|
network(x,y,rotation,side,type,pcbsize_z) - "rj45_single"
|
|
video(x,y,rotation,side,type,pcbsize_z - "hdmi_a","dp-hdmi_a","mipi_csi","mipi_dsi"
|
|
fan(x,y,rotation,side,type,pcbsize_z) - "micro","encl_pmw","encl_pmw_h"
|
|
gpio(x,y,rotation,side,type,pcbsize_z) - "encl_header_30","encl_header_12","header_40","header_20"
|
|
ic(x,y,rotation,side,type,pcbsize_z) - "ic_2.8x2.8","ic_3x3","ic_3.7x3.7","ic_4x4","ic_4.7x4.7","ic_5x5","ic_5.75x5.75","ic_6x6","ic_6.4x6.4",ic_6.75x6.75",
|
|
"ic_7x7","ic_4.3x5.1","ic_5.4x5.3","ic_6.7x8.4","ic_9x9","ic_11x8","ic_13x8","ic_13x9","ic_16x10"
|
|
audio(x,y,rotation,side,type,pcbsize_z) - "out-in-spdif","jack_3.5"
|
|
storage(x,y,rotation,side,type,pcbsize_z) - "sdcard","sdcard_i","sata_header","sata_power_vrec","sata_encl_power","sata_encl_header","m.2_header","m.2_stud"
|
|
combo(x,y,rotation,side,type,pcbsize_z) - "rj45-usb2_double","rj45-usb3_double"
|
|
jumper(x,y,rotation,side,type,pcbsize_z) - "header_2x1","header_3x2","header_5x1","header_6x1","header_7x1"
|
|
misc(x,y,rotation,side,type,pcbsize_z) - "ir_1","led_3x1.5","lcd_2.2","bat_hold_1"
|
|
heatsink(x,y,rotation,side,type,pcbsize_z,soc1size_z) - "hc4_oem","c4_oem","c2_oem","c1+_oem","xu4_oem","n1_oem","xu4q_oem","n2_oem","n2+_oem","m1_oem","h2_oem"
|
|
pcie(x,y,rotation,side,type,pcbsize_z) - "x4"
|
|
jst_ph(x,y,rotation,side,type,pcbsize_z) - type is #pins
|
|
cm_holder(x,y,rotation,side,type,pcbsize_z) - jetsonnano
|
|
cm(x,y,rotation,side,type,pcbsize_z) - jetsonnano
|
|
|
|
*/
|
|
|
|
module place(x,y,size_x,size_y,rotation,side,type,pcbsize_z) {
|
|
|
|
if (side == "top") {
|
|
if ((rotation >= 0 && rotation < 90) || (rotation < -270 && rotation > -360))
|
|
translate([x,y,pcbsize_z]) rotate([0,0,-rotation]) children();
|
|
|
|
if ((rotation >= 90 && rotation < 180) || (rotation < -180 && rotation >= -270))
|
|
translate([x,y+size_x,pcbsize_z]) rotate([0,0,-rotation]) children();
|
|
|
|
if ((rotation >= 180 && rotation < 270) || (rotation < -90 && rotation >= -180))
|
|
translate([x+size_x,y+size_y,pcbsize_z]) rotate([0,0,-rotation]) children(0);
|
|
|
|
if ((rotation >= 270 && rotation < 360) || (rotation < 0 && rotation >= -90))
|
|
translate([x+size_y,y,pcbsize_z]) rotate([0,0,-rotation]) children();
|
|
}
|
|
if (side == "bottom") {
|
|
if ((rotation >= 0 && rotation < 90) || (rotation < -270 && rotation > -360))
|
|
translate([x+size_x,y,0]) rotate([0,180,rotation]) children();
|
|
|
|
if ((rotation >= 90 && rotation < 180) || (rotation < -180 && rotation >= -270))
|
|
translate([x+size_y,y+size_x,0]) rotate([0,180,rotation]) children();
|
|
|
|
if ((rotation >= 180 && rotation < 270) || (rotation < -90 && rotation >= -180))
|
|
translate([x,y+size_y,0]) rotate([0,180,rotation]) children();
|
|
|
|
if ((rotation >= 270 && rotation < 360) || (rotation < 0 && rotation >= -90))
|
|
translate([x,y,0]) rotate([0,180,rotation]) children();
|
|
}
|
|
children([1:1:$children-1]);
|
|
}
|
|
|
|
/* addition module */
|
|
module pcb_add(size_x,size_y,loc_x,loc_y,rotation,side,type,pcbsize_z,data_1,data_2) {
|
|
if(type == "square") {
|
|
rotate([0,0,rotation]) translate([loc_x,loc_y,0])
|
|
cube([size_x,size_y,pcbsize_z]);
|
|
}
|
|
if(type == "round") {
|
|
translate([loc_x,loc_y,0])
|
|
cylinder(d=data_1,h=pcbsize_z);
|
|
}
|
|
}
|
|
|
|
/* subtractive module */
|
|
module pcb_sub(size_x,size_y,loc_x,loc_y,rotation,side,type,pcbsize_z,data_1,data_2) {
|
|
// square
|
|
if(type == "square") {
|
|
rotate([0,0,rotation]) translate([loc_x,loc_y,-4])
|
|
cube([size_x,size_y,pcbsize_z+5]);
|
|
}
|
|
if(type == "round") {
|
|
translate([loc_x,loc_y,-1])
|
|
cylinder(d=data_1,h=pcbsize_z+4);
|
|
}
|
|
if(type == "art") {
|
|
rotate([0,0,rotation]) translate([loc_x,loc_y,-1])
|
|
pcb_art(data_1,data_2);
|
|
}
|
|
}
|
|
|
|
// art work module
|
|
module pcb_art(scale_d1,type,dxf_file) {
|
|
if(type == "dxf") {
|
|
linear_extrude(height = pcbsize_z) import(file = dxf_file, scale=scale_d1);
|
|
}
|
|
}
|
|
|
|
// pcb board
|
|
module pcb(size, radius) {
|
|
x = size[0];
|
|
y = size[1];
|
|
z = size[2];
|
|
linear_extrude(height=z)
|
|
hull() {
|
|
translate([0+radius ,0+radius, 0]) circle(r=radius);
|
|
translate([0+radius, y-radius, 0]) circle(r=radius);
|
|
translate([x-radius, y-radius, 0]) circle(r=radius);
|
|
translate([x-radius, 0+radius, 0]) circle(r=radius);
|
|
}
|
|
}
|
|
|
|
// memory class
|
|
module memory(x,y,rotation,side,type,pcbsize_z) {
|
|
// socketed emmc
|
|
if(type == "emmc") {
|
|
size_x = 13.5;
|
|
size_y = 18.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union (){
|
|
color("darkred") translate([0,0,1.1]) cube([size_x, size_y, .8]);
|
|
color("dimgray") translate([1,2,1.9]) cube([11.5, 13, .9]);
|
|
difference() {
|
|
color("dimgray") translate([2,13.5,0]) cube([9.3, 3.4, 1.1]);
|
|
color("dimgray") translate([2.5,14.5,-.1]) cube([8.3, .5, 1.1]);
|
|
color("dimgray") translate([2.5,15.9,-.1]) cube([8.3, .5, 1.1]);
|
|
color("dimgray") translate([2.5,14.5,-.1]) cube([.5, 1.8, 1.1]);
|
|
color("dimgray") translate([10.3,14.5,-.1]) cube([.5, 1.8, 1.1]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// emmc plug
|
|
if(type == "emmc_plug") {
|
|
size_x = 8.3;
|
|
size_y = 2.16;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union (){
|
|
difference() {
|
|
color("black") translate([0,0,0]) cube([size_x, size_y, .82]);
|
|
color("black") translate([1,.25,.15]) cube([6.3, 1.65, 1]);
|
|
color("black") translate([1,0,.72]) cube([6.3, 2.5, 2]);
|
|
}
|
|
for (i=[1.25:.4:7.2]) {
|
|
color("gold") translate ([i,-.05,0]) cube([.16,.3,.82]);
|
|
color("gold") translate ([i,1.9,0]) cube([.16,.3,.82]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// sodimm-5.2 socket
|
|
if(type == "sodimm_5.2") {
|
|
size_x = 73;
|
|
size_y = 6.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference () {
|
|
|
|
color("dimgray") translate([0,0,0]) cube([size_x,size_y,5.2]);
|
|
color("dimgray") translate([2,-1,1.75]) cube([69,3,5]);
|
|
color("dimgray") translate([3.5,-1,1.75]) cube([28.5,5.25,.92]);
|
|
color("dimgray") translate([34.5,-1,1.75]) cube([35,5.25,.92]);
|
|
}
|
|
for (i=[2:.5:31]) {
|
|
color("gold") translate ([i+.5,2,1.75]) cube([.25,2,.25]);
|
|
}
|
|
for (i=[34:.5:69]) {
|
|
color("gold") translate ([i+.5,2,1.75]) cube([.25,2,.25]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// sodimm-9.2 socket
|
|
if(type == "sodimm_9.2") {
|
|
size_x = 73;
|
|
size_y = 6.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference () {
|
|
|
|
color("dimgray") translate([0,0,0]) cube([size_x,size_y,9.2]);
|
|
color("dimgray") translate([2,-1,5.7]) cube([69,3,5]);
|
|
color("dimgray") translate([3.5,-1,5.7]) cube([28.5,5.25,.92]);
|
|
color("dimgray") translate([34.5,-1,5.7]) cube([35,5.25,.92]);
|
|
}
|
|
for (i=[2:.5:31]) {
|
|
color("gold") translate ([i+.5,2,5.7]) cube([.25,2,.25]);
|
|
}
|
|
for (i=[34:.5:69]) {
|
|
color("gold") translate ([i+.5,2,5.7]) cube([.25,2,.25]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// switch class
|
|
module switch(x,y,rotation,side,type,pcbsize_z) {
|
|
// boot selector switch
|
|
if(type=="slide_4x9") {
|
|
size_x = 9;
|
|
size_y = 3.75;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
color("silver") translate([0,0,.5]) cube([size_x, size_y, 3.5]);
|
|
color("white") translate([3.75,-1.99,1.75]) cube([3, 2, 1.5]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// button class
|
|
module button(x,y,rotation,side,type,pcbsize_z) {
|
|
// tall button type
|
|
if(type=="momentary_6x6x9") {
|
|
size_x = 6;
|
|
size_y = 6;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
color("silver") translate([0,0,0]) cube([size_x,size_y,3.5]);
|
|
color("black") translate([3,3,3.5]) cylinder(r=1.6,h=9,$fn=30);
|
|
color("black") translate([1,1,3.5]) sphere(d=1);
|
|
color("black") translate([1,5,3.5]) sphere(d=1);
|
|
color("black") translate([5,1,3.5]) sphere(d=1);
|
|
color("black") translate([5,5,3.5]) sphere(d=1);
|
|
}
|
|
}
|
|
if(type=="momentary_6x6x4") {
|
|
size_x = 6;
|
|
size_y = 6;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
color("silver") translate([0,0,0]) cube([size_x,size_y,3.5]);
|
|
color("black") translate([3,3,3.5]) cylinder(r=1.6,h=2.5,$fn=30);
|
|
color("black") translate([1,1,3.5]) sphere(d=1);
|
|
color("black") translate([1,5,3.5]) sphere(d=1);
|
|
color("black") translate([5,1,3.5]) sphere(d=1);
|
|
color("black") translate([5,5,3.5]) sphere(d=1);
|
|
}
|
|
}
|
|
if(type=="momentary_6x6x4_90") {
|
|
size_x = 6;
|
|
size_y = 6;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
rotate([90, 0, 0]) union() {
|
|
color("silver") translate([0,0,0]) cube([size_x,size_y,3.5]);
|
|
color("black") translate([3,3,3.5]) cylinder(r=1.6,h=2.5,$fn=30);
|
|
color("black") translate([1,1,3.5]) sphere(d=1);
|
|
color("black") translate([1,5,3.5]) sphere(d=1);
|
|
color("black") translate([5,1,3.5]) sphere(d=1);
|
|
color("black") translate([5,5,3.5]) sphere(d=1);
|
|
}
|
|
}
|
|
if(type=="momentary_4x2x1") {
|
|
size_x = 4;
|
|
size_y = 2;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
color("silver") translate([0,0,0]) cube([size_x, size_y, 2]);
|
|
color("white") translate([1,size_y,.5]) cube([2, 1.5, 1]);
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
// plug-connector class
|
|
module plug(x,y,rotation,side,type,pcbsize_z) {
|
|
// 2.5mm power plug 7.5mm
|
|
if(type=="pwr2.5_5x7.5") {
|
|
size_x = 5;
|
|
size_y = 7.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference () {
|
|
color("silver") translate([0,0,0]) cube([size_x, size_y, 4]);
|
|
color("black") translate([2.5,-1,2]) rotate([90,0,0])
|
|
cylinder(d=3, h=7, center=true, $fn=30);
|
|
}
|
|
color("white") translate([2.5,3,2]) rotate([90,0,0])
|
|
cylinder(d=1, h=2,$fn=30);
|
|
}
|
|
}
|
|
|
|
// 5.5mm power plug 7.5mm x 11.5mm
|
|
if(type=="pwr5.5_7.5x11.5") {
|
|
size_x = 7.6;
|
|
size_y = 11.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference () {
|
|
color("silver") translate([0,0,0]) cube([size_x, size_y, 9.75]);
|
|
color("black") translate([3.8,10,6.5]) rotate([90,0,0])
|
|
cylinder(r=3, h=11, $fn=30);
|
|
}
|
|
color("white") translate([3.8,10,6.5]) rotate([90,0,0])
|
|
cylinder(d=1.5, h=9,$fn=30);
|
|
}
|
|
}
|
|
// 5.5mm power plug 10mm x 10mm
|
|
if(type=="pwr5.5_10x10") {
|
|
size_x = 10;
|
|
size_y = 13.36;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference () {
|
|
color("silver") translate([0,0,0]) cube([size_x, size_y, 10]);
|
|
color("black") translate([5,10,5]) rotate([90,0,0])
|
|
cylinder(r=3, h=11, $fn=30);
|
|
}
|
|
color("white") translate([5,10,5]) rotate([90,0,0])
|
|
cylinder(d=1.5, h=9,$fn=30);
|
|
}
|
|
}
|
|
|
|
// rtc micro connector type
|
|
if(type=="rtc_micro") {
|
|
size_x = 7.5;
|
|
size_y = 3.75;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference () {
|
|
color("white") translate([0,0,0]) cube([size_x,size_y,4.75]);
|
|
color("darkgray") translate([1.5,.5,1]) cube([4.5,2.75,6]);
|
|
color("white") translate([-.5,.75,-.5]) cube([1,2.5,6]);
|
|
color("white") translate([7,.75,-.5]) cube([1,2.5,6]);
|
|
color("darkgray") translate([2.25,-.5,1]) cube([3,2,6]);
|
|
}
|
|
color("silver") translate ([2.75,2,.5]) cube([.6,.6,4]);
|
|
color("silver") translate ([4.5,2,.5]) cube([.6,.6,4]);
|
|
}
|
|
}
|
|
|
|
// audio micro connector type
|
|
if(type=="audio_micro") {
|
|
size_x = 7.5;
|
|
size_y = 3.75;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
translate([0,0,3.75]) rotate([-90,0,0])
|
|
union() {
|
|
difference () {
|
|
color("white") translate([0,0,0]) cube([size_x,size_y,4.75]);
|
|
color("darkgray") translate([1.5,.5,1]) cube([4.5,2.75,6]);
|
|
color("white") translate([-.5,.75,-.5]) cube([1,2.5,6]);
|
|
color("white") translate([7,.75,-.5]) cube([1,2.5,6]);
|
|
color("darkgray") translate([2.25,-.5,1]) cube([3,2,6]);
|
|
}
|
|
color("silver") translate ([2.75,2,.5]) cube([.6,.6,4]);
|
|
color("silver") translate ([4.5,2,.5]) cube([.6,.6,4]);
|
|
}
|
|
}
|
|
|
|
// uart micro connector type
|
|
if(type=="uart_micro") {
|
|
size_x = 12.5;
|
|
size_y = 5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference() {
|
|
union() {
|
|
|
|
difference () {
|
|
color("white") translate([0,0,0]) cube([size_x,size_y,6]);
|
|
color("darkgray") translate([.5,.5,2]) cube([11.5,4,6]);
|
|
}
|
|
color("white") translate([12,3.75,.5]) rotate([0,0,45]) cube([1,2,5.5]);
|
|
color("white") translate([-0.2,4,.5]) rotate([0,0,-45]) cube([1,2,5.5]);
|
|
}
|
|
color("white") translate([12.5,0,-.5]) cube([2,6,7]);
|
|
color("white") translate([-1,0,-.5]) cube([1,6,7]);
|
|
color("white") translate([-1,5,-.5]) cube([14,2,7]);
|
|
color("white") translate([-0.7,4.5,-.1]) rotate([0,0,-45]) cube([1,2,7]);
|
|
color("darkgray") translate([-1,1.5,2]) cube([14,1,7]);
|
|
}
|
|
for (i=[2.5:2.5:10]) {
|
|
color("silver") translate ([i,3,.5]) cube([.6,.6,5]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// molex power 4x1 connector type
|
|
if(type=="molex_4x1") {
|
|
size_x = 23;
|
|
size_y = 8;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference() {
|
|
union() {
|
|
difference () {
|
|
color("white") translate([0,0,0]) cube([size_x,size_y,10]);
|
|
color("darkgray") translate([.5,.5,2]) cube([22,7,11]);
|
|
}
|
|
color("white") translate([-.9,5.5,0]) rotate([0,0,-45])
|
|
cube([1,4,10]);
|
|
color("white") translate([23,5,0]) rotate([0,0,45])
|
|
cube([1,4,10]);
|
|
}
|
|
color("white") translate([-1,0,-.5]) cube([1,9,11]);
|
|
color("white") translate([23,0,-.5]) cube([2,9,11]);
|
|
color("white") translate([-1,8,-.5]) cube([25,3,11]);
|
|
color("white") translate([-1.7,7.5,-.5]) rotate([0,0,-45])
|
|
cube([2.25,4,11]);
|
|
color("white") translate([23.1,6,-.5]) rotate([0,0,45])
|
|
cube([3,4,11]);
|
|
}
|
|
for (i=[3.75:5:20]) {
|
|
color("silver") translate ([i,4,2]) cylinder(d=2,h=7, $fn=30);
|
|
}
|
|
}
|
|
}
|
|
// sata small power 4x1 connector type
|
|
if(type=="small_encl_satapwr") {
|
|
size_x = 12.7;
|
|
size_y = 6.6;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
union() {
|
|
difference () {
|
|
color("white") translate([0,0,0]) cube([size_x,size_y,8]);
|
|
color("darkgray") translate([.5,.5,2]) cube([11.7,5.6,11]);
|
|
}
|
|
}
|
|
for (i=[2.54:2.54:11.7]) {
|
|
color("silver") translate ([i,4,2]) cylinder(d=.67,h=6, $fn=30);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// usb 2.0 port class
|
|
module usb2(x,y,rotation,side,type,pcbsize_z) {
|
|
// usb2 single vertical socket
|
|
if(type=="single_vert_a") {
|
|
size_x = 5.70;
|
|
size_y = 19.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
// usb 2.0 port
|
|
difference () {
|
|
color("silver") translate([0,0,0]) cube([size_x, size_y, 14]);
|
|
color("dimgray") translate([.5,-1,.75]) cube([4.75, 12.5, 13]);
|
|
}
|
|
color("silver") translate([-.65,0,1]) cube([.65,.5,12]);
|
|
color("silver") translate([5.7,0,1]) cube([.65,.5,12]);
|
|
color("silver") translate([1,0,14]) cube([3.8,.5,.65]);
|
|
color("white") translate([1,0,1.5]) cube([2, 17.5, 11]);
|
|
}
|
|
}
|
|
// usb2 double stacked sockets
|
|
if(type=="double_stacked_a") {
|
|
size_x = 13.25;
|
|
size_y = 17.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference () {
|
|
color("silver") translate([0,0,0]) cube([size_x, size_y, 15.5]);
|
|
color("dimgray") translate([1,-.1,1]) cube([11.25, 15.5, 13.5]);
|
|
}
|
|
color("silver") translate([0,0,6.75]) cube([13.25, 17.5, 2]);
|
|
color("white") translate([1.5,1,12]) cube([10, 12.5, 1.5]);
|
|
color("white") translate([1.5,1,4]) cube([10, 12.5, 1.5]);
|
|
color("silver") translate([-.65,0,1]) cube([.65,.5,5]);
|
|
color("silver") translate([13.25,0,1]) cube([.65,.5,5]);
|
|
color("silver") translate([-.65,0,9]) cube([.65,.5,5]);
|
|
color("silver") translate([13.25,0,9]) cube([.65,.5,5]);
|
|
color("silver") translate([1,0,15.5]) cube([11.5,.5,.65]);
|
|
|
|
}
|
|
}
|
|
// usb2 micro otg
|
|
if(type=="micro") {
|
|
size_x = 7;
|
|
size_y = 4.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference () {
|
|
color("silver") translate([0,0,0]) cube([size_x, size_y, 3.5]);
|
|
color("dimgray") translate([.5,-.1,.5]) cube([6, 3.5, 2.5]);
|
|
color("silver") translate([0,-.1,0]) rotate ([-90,0,0])
|
|
cylinder(d=2.5, h=6.5,$fn=30);
|
|
color("silver") translate([7,-.1,0]) rotate ([-90,0,0])
|
|
cylinder(d=2.5, h=6.5,$fn=30);
|
|
|
|
}
|
|
difference() {
|
|
union() {
|
|
color("silver") translate([0,-.1,0]) rotate ([-90,0,0])
|
|
cylinder(d=2.5, h=4.5,$fn=30);
|
|
color("silver") translate([7,-.1,0]) rotate ([-90,0,0])
|
|
cylinder(d=2.5, h=4.5,$fn=30);
|
|
}
|
|
color("silver") translate([0,-.2,0]) rotate ([-90,0,0])
|
|
cylinder(d=1.25, h=6.5,$fn=30);
|
|
color("silver") translate([7,-.2,0]) rotate ([-90,0,0])
|
|
cylinder(d=1.25, h=6.5,$fn=30);
|
|
|
|
color("silver") translate([-3,-1,-3]) cube([3,6.5,7.5]);
|
|
color("silver") translate([7,-1,-3]) cube([3,6.5,7.5]);
|
|
color("silver") translate([0,-1,-3]) cube([9,6.5,3]);
|
|
color("silver") translate([-1,-1,-3]) cube([9,6.5,3]);
|
|
}
|
|
color("black") translate([1.5,.5,1.25]) cube([4,3.5,1]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// usb 3.0 port class
|
|
module usb3(x,y,rotation,side,type,pcbsize_z) {
|
|
// usb3 double stacked type
|
|
if(type=="double_stacked_a") {
|
|
size_x = 13.25;
|
|
size_y = 17.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference () {
|
|
color("silver") translate([0,0,0]) cube([size_x, size_y, 15.5]);
|
|
color("dimgray") translate([1,-.1,1]) cube([11.25, 15.5, 13.5]);
|
|
}
|
|
color("silver") translate([0,0,6.75]) cube([13.25, 17.5, 2]);
|
|
color("royalblue") translate([1.5,1,12]) cube([10, 12.5, 1.5]);
|
|
color("royalblue") translate([1.5,1,4]) cube([10, 12.5, 1.5]);
|
|
color("silver") translate([-.65,0,1]) cube([.65,.5,5]);
|
|
color("silver") translate([13.25,0,1]) cube([.65,.5,5]);
|
|
color("silver") translate([-.65,0,9]) cube([.65,.5,5]);
|
|
color("silver") translate([13.25,0,9]) cube([.65,.5,5]);
|
|
color("silver") translate([1,0,15.5]) cube([11.5,.5,.65]);
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
// network class
|
|
module network(x,y,rotation,side,type,pcbsize_z) {
|
|
// rj45 single socket
|
|
if(type == "rj45_single") {
|
|
size_x = 15.9;
|
|
size_y = 21.3;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference () {
|
|
color("lightgray") translate([0,0,0]) cube([size_x, size_y, 13.5]);
|
|
color("darkgray") translate([1.5,-1,1.5]) cube([13, 19.5, 8]);
|
|
color("darkgray") translate([5.5,-2,7]) cube([5, 19.5, 5]);
|
|
}
|
|
color("green") translate([2,-.1,10]) cube([3, 2, 2]);
|
|
color("orange") translate([11,-.1,10]) cube([3, 2, 2]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// video class
|
|
module video(x,y,rotation,side,type,pcbsize_z) {
|
|
// hdmi a type connector
|
|
if(type=="hdmi_a") {
|
|
size_x = 14.5;
|
|
size_y = 11.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
translate([0,0,.75])
|
|
union() {
|
|
difference() {
|
|
color("silver") translate([0,0,0]) cube([size_x, size_y, 5.5]);
|
|
color("dimgray") translate([.5,-.1,.5]) cube([13.5, 11, 4.5]);
|
|
color("silver") translate([0,-.1,0]) rotate ([-90,0,0])
|
|
cylinder(d=4, h=13.5,$fn=30);
|
|
color("silver") translate([14.5,-.1,0]) rotate ([-90,0,0])
|
|
cylinder(d=4, h=13.5,$fn=30);
|
|
}
|
|
difference() {
|
|
union() {
|
|
color("silver") translate([0,-.1,0]) rotate ([-90,0,0])
|
|
cylinder(d=4, h=11.5,$fn=30);
|
|
color("silver") translate([14.5,-.1,0]) rotate ([-90,0,0])
|
|
cylinder(d=4, h=11.5,$fn=30);
|
|
}
|
|
color("silver") translate([0,-.2,0]) rotate ([-90,0,0])
|
|
cylinder(d=3, h=13.5,$fn=30);
|
|
color("silver") translate([14.5,-.2,0]) rotate ([-90,0,0])
|
|
cylinder(d=3, h=13.5,$fn=30);
|
|
color("silver") translate([-3,-1,-3]) cube([3,13.5,7.5]);
|
|
color("silver") translate([14.5,-1,-3]) cube([3,13.5,7.5]);
|
|
color("silver") translate([-1,-1,-3]) cube([16.5,13.5,3]);
|
|
}
|
|
color("black") translate([2.5,.5,2.25]) cube([9.25,10.5,1.5]);
|
|
}
|
|
}
|
|
// display port and hdmi stacked
|
|
if(type=="dp-hdmi_a") {
|
|
size_x = 18;
|
|
size_y = 17.75;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference() {
|
|
color("silver") translate([0,0,0]) cube([size_x, size_y, 19]);
|
|
translate([2,-.7,1.5]) color("dimgray") cube([14.5, 11.5, 5.5]);
|
|
translate([1.5,-.7,12.5]) color("dimgray") cube([15, 17.5, 5.5]);
|
|
}
|
|
translate([2,-.7,1.5]){
|
|
difference() {
|
|
color("silver") translate([0,0,0]) cube([14.5, 11.5, 5.5]);
|
|
color("dimgray") translate([.5,-.1,.5]) cube([13.5, 11, 4.5]);
|
|
color("silver") translate([0,-.1,0]) rotate ([-90,0,0])
|
|
cylinder(d=4, h=13.5,$fn=30);
|
|
color("silver") translate([14.5,-.1,0]) rotate ([-90,0,0])
|
|
cylinder(d=4, h=13.5,$fn=30);
|
|
}
|
|
difference() {
|
|
union() {
|
|
color("silver") translate([0,-.1,0]) rotate ([-90,0,0])
|
|
cylinder(d=4, h=11.5,$fn=30);
|
|
color("silver") translate([14.5,-.1,0]) rotate ([-90,0,0])
|
|
cylinder(d=4, h=11.5,$fn=30);
|
|
}
|
|
color("silver") translate([0,-.2,0]) rotate ([-90,0,0])
|
|
cylinder(d=3, h=13.5,$fn=30);
|
|
color("silver") translate([14.5,-.2,0]) rotate ([-90,0,0])
|
|
cylinder(d=3, h=13.5,$fn=30);
|
|
color("silver") translate([-3,-1,-3]) cube([3,13.5,7.5]);
|
|
color("silver") translate([14.5,-1,-3]) cube([3,13.5,7.5]);
|
|
color("silver") translate([-1,-1,-3]) cube([16.5,13.5,3]);
|
|
}
|
|
color("black") translate([2.5,.5,2.25]) cube([9.25,10.5,1.5]);
|
|
}
|
|
color("black") translate([2.5,.5,14.5]) cube([13,10.5,1.5]);
|
|
color("silver") translate([0,0,12.5]) rotate([0,45,0]) cube([2,17.5,2]);
|
|
color("silver") translate([-.5,0,13]) cube([.6,.5,4.5]);
|
|
color("silver") translate([17.9,0,13]) cube([.6,.5,4.5]);
|
|
color("silver") translate([2,0,18.9]) cube([14,.5,.5]);
|
|
}
|
|
}
|
|
|
|
// mipi csi port
|
|
if(type=="mipi_csi") {
|
|
size_x = 21;
|
|
size_y = 3;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference() {
|
|
color("white") cube([size_x, size_y, 5]);
|
|
color("white") translate([-1,-1,3.5]) cube([23,3.5,5]);
|
|
color("white") translate([-1,-1,3.5]) cube([3,5,5]);
|
|
color("white") translate([19,-1,3.5]) cube([3,5,5]);
|
|
}
|
|
difference() {
|
|
color("black") translate([-1,0,3.5]) cube([23,3.5,1]);
|
|
color("dimgrey") translate([2,2.9,3.49]) cube([17,3,2]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// mipi dsi port
|
|
if(type=="mipi_dsi") {
|
|
size_x = 10;
|
|
size_y = 3;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
color("black") cube([size_x, 1.5, 2]);
|
|
color("saddlebrown") translate([0,1.5,0]) cube([size_x, 1.5, 2]);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
// fan connector class
|
|
module fan(x,y,rotation,side,type,pcbsize_z) {
|
|
// micro connector type
|
|
if(type=="micro") {
|
|
size_x = 7.5;
|
|
size_y = 3.75;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference () {
|
|
color("white") translate([0,0,0]) cube([size_x,size_y,4.75]);
|
|
color("darkgray") translate([1.5,.5,1]) cube([4.5,2.75,6]);
|
|
color("white") translate([-.5,.75,-.5]) cube([1,2.5,6]);
|
|
color("white") translate([7,.75,-.5]) cube([1,2.5,6]);
|
|
color("darkgray") translate([2.25,-.5,1]) cube([3,2,6]);
|
|
}
|
|
color("silver") translate ([2.75,2,.5]) cube([.6,.6,4]);
|
|
color("silver") translate ([4.5,2,.5]) cube([.6,.6,4]);
|
|
}
|
|
}
|
|
// pmw-standard connector type
|
|
if(type=="encl_pmw") {
|
|
size_x = 11.6;
|
|
size_y = 4.3;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference () {
|
|
color("white") translate([0,0,0]) cube([size_x,size_y,7]);
|
|
color("darkgray") translate([.5,.5,1]) cube([10.5,3,8]);
|
|
//color("white") translate([-.5,.75,-.5]) cube([1,2.5,6]);
|
|
//color("white") translate([11,.75,-.5]) cube([1,2.5,6]);
|
|
color("darkgray") translate([2.25,-.5,1]) cube([7.5,2,8]);
|
|
}
|
|
for (i=[2:2.54:11.7]) {
|
|
color("silver") translate ([i,2.54,2]) cylinder(d=.67,h=5, $fn=30);
|
|
}
|
|
}
|
|
}
|
|
// pmw-standard connector type horizontal and 45 degrees
|
|
if(type=="encl_pmw_h") {
|
|
size_x = 11.6;
|
|
size_y = 4.3;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
translate([11.6,0,5]) rotate([-90,0,-45])
|
|
union() {
|
|
difference () {
|
|
color("white") translate([0,0,0]) cube([size_x,size_y,4]);
|
|
color("darkgray") translate([.5,.5,1]) cube([10.5,3,8]);
|
|
//color("white") translate([-.5,.75,-.5]) cube([1,2.5,6]);
|
|
//color("white") translate([11,.75,-.5]) cube([1,2.5,6]);
|
|
color("darkgray") translate([2.25,-.5,1]) cube([7.5,2,8]);
|
|
}
|
|
for (i=[2:2.54:11.7]) {
|
|
color("silver") translate ([i,2.54,2]) cylinder(d=.67,h=2, $fn=30);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// gpio class
|
|
module gpio(x,y,rotation,side,type,pcbsize_z) {
|
|
// gpio 30 pin enclosed header
|
|
if(type=="encl_header_30") {
|
|
size_x = 37;
|
|
size_y = 5.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference () {
|
|
color("black") translate([0,0,0]) cube([size_x, size_y, 6.25]);
|
|
color ("darkgray") translate ([.5,.5,.6]) cube([36, 4.5, 5.75]);
|
|
}
|
|
for (i=[4.5:2:34]) {
|
|
color("silver") translate ([i,1.5,1]) cube([.5,.5,5]);
|
|
color("silver") translate ([i,3.5,1]) cube([.5,.5,5]);
|
|
}
|
|
}
|
|
}
|
|
// gpio 12 enclosed header
|
|
if (type=="encl_header_12") {
|
|
size_x = 19.5;
|
|
size_y = 5.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference () {
|
|
color("black") translate([0,0,0]) cube([size_x,size_y,6.25]);
|
|
color ("darkgray") translate ([.5,.5,.6]) cube([18.5,4.5,5.75]);
|
|
}
|
|
for (i=[4.5:2:16]) {
|
|
color("silver") translate ([i,1.5,1]) cube([.5,.5,5]);
|
|
color("silver") translate ([i,3.5,1]) cube([.5,.5,5]);
|
|
}
|
|
}
|
|
}
|
|
// gpio 40 pin header
|
|
if(type=="header_40") {
|
|
size_x = 50;
|
|
size_y = 5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
color("black") translate([0,0,0]) cube([size_x, size_y, 3]);
|
|
for (i=[1:2.5:50]) {
|
|
color("silver") translate ([i,.5,3]) cube([.64,.64,5]);
|
|
color("silver") translate ([i,3.5,3]) cube([.64,.64,5]);
|
|
}
|
|
}
|
|
}
|
|
// gpio 20 pin header
|
|
if(type=="header_20") {
|
|
size_x = 25.52;
|
|
size_y = 5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
color("black") translate([0,0,0]) cube([size_x, size_y, 3]);
|
|
for (i=[1:2.5:25]) {
|
|
color("silver") translate ([i,.5,3]) cube([.64,.64,5]);
|
|
color("silver") translate ([i,3.5,3]) cube([.64,.64,5]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// ic class
|
|
module ic(x,y,rotation,side,type,pcbsize_z) {
|
|
// ic 2.8mm x 2.8mm
|
|
if (type=="ic_2.8x2.8") {
|
|
size_x = 2.8;
|
|
size_y = 2.8;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
color("dimgray") translate([0,0,0]) cube([size_x,size_y,.8]);
|
|
}
|
|
// ic 3mm x 3mm
|
|
if (type=="ic_3x3") {
|
|
size_x = 3;
|
|
size_y = 3;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
color("dimgray") translate([0,0,0]) cube([size_x,size_y,.8]);
|
|
}
|
|
// ic 3.7mm x 3.7mm
|
|
if (type=="ic_3.7x3.7") {
|
|
size_x = 3.7;
|
|
size_y = 3.7;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
color("dimgray") translate([0,0,0]) cube([size_x,size_y,.8]);
|
|
}
|
|
// ic 4mm x 4mm
|
|
if (type=="ic_4x4") {
|
|
size_x = 4;
|
|
size_y = 4;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
color("dimgray") translate([0,0,0]) cube([size_x,size_y,.8]);
|
|
}
|
|
// ic 4.7mm x 4.7mm
|
|
if (type=="ic_4.7x4.7") {
|
|
size_x = 4.7;
|
|
size_y = 4.7;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
color("dimgray") translate([0,0,0]) cube([size_x,size_y,.8]);
|
|
}
|
|
// ic 5mm x 5mm
|
|
if (type=="ic_5x5") {
|
|
size_x = 5;
|
|
size_y = 5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
color("dimgray") translate([0,0,0]) cube([size_x,size_y,.8]);
|
|
}
|
|
// ic 5.75mm x 5.75mm
|
|
if (type=="ic_5.75x5.75") {
|
|
size_x = 5.75;
|
|
size_y = 5.75;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
color("dimgray") translate([0,0,0]) cube([size_x, size_y, .7]);
|
|
}
|
|
// ic 6mm x 6mm
|
|
if (type=="ic_6x6") {
|
|
size_x = 6;
|
|
size_y = 6;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
color("dimgray") translate([0,0,0]) cube([size_x,size_y,.8]);
|
|
}
|
|
// ic 6.4mm x 6.4mm
|
|
if (type=="ic_6.4x6.4") {
|
|
size_x = 6.4;
|
|
size_y = 6.4;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
color("dimgray") translate([0,0,0]) cube([size_x,size_y,.8]);
|
|
}
|
|
// ic 6.75mm x 6.75mm
|
|
if (type=="ic_6.75x6.75") {
|
|
size_x = 6.75;
|
|
size_y = 6.75;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
color("dimgray") translate([0,0,0]) cube([size_x,size_y,.8]);
|
|
}
|
|
// ic 7mm x 7mm
|
|
if (type=="ic_7x7") {
|
|
size_x = 7;
|
|
size_y = 7;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
color("dimgray") translate([0,0,0]) cube([size_x,size_y,.8]);
|
|
}
|
|
// ic 4.3mm x 5.1mm
|
|
if (type=="ic_4.3x5.1") {
|
|
size_x = 4.3;
|
|
size_y = 5.1;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
color("dimgray") translate([0,0,0]) cube([size_x,size_y,.8]);
|
|
}
|
|
// ic 5.4mm x 5.3mm
|
|
if (type=="ic_5.4x5.3") {
|
|
size_x = 5.4;
|
|
size_y = 5.3;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
color("dimgray") translate([0,0,0]) cube([size_x,size_y,.8]);
|
|
}
|
|
// ic 6.7mm x 8.4mm
|
|
if (type=="ic_6.7x8.4") {
|
|
size_x = 6.7;
|
|
size_y = 8.4;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
color("dimgray") translate([0,0,0]) cube([size_x,size_y,.8]);
|
|
}
|
|
// ic 9mm x 9mm
|
|
if (type=="ic_9x9") {
|
|
size_x = 9;
|
|
size_y = 9;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
color("dimgray") translate([0,0,0]) cube([size_x,size_y,.8]);
|
|
}
|
|
// ic 11mm x 8mm
|
|
if (type=="ic_11x8") {
|
|
size_x = 11;
|
|
size_y = 8;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
color("dimgray") translate([0,0,0]) cube([size_x,size_y,.8]);
|
|
}
|
|
// ic 13mm x 8mm
|
|
if (type=="ic_13x8") {
|
|
size_x = 13;
|
|
size_y = 8;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
color("dimgray") translate([0,0,0]) cube([size_x,size_y,.8]);
|
|
}
|
|
// ic 13mm x 9mm
|
|
if (type=="ic_13x9") {
|
|
size_x = 13;
|
|
size_y = 9;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
color("dimgray") translate([0,0,0]) cube([size_x,size_y,.8]);
|
|
}
|
|
// ic 16mm x 10mm
|
|
if (type=="ic_16x10") {
|
|
size_x = 16;
|
|
size_y = 10;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
color("dimgray") translate([0,0,0]) cube([size_x,size_y,.8]);
|
|
}
|
|
}
|
|
|
|
// audio class
|
|
module audio(x,y,rotation,side,type,pcbsize_z) {
|
|
// out in and spdif stacked type
|
|
if(type=="out-in-spdif") {
|
|
size_x = 12.7;
|
|
size_y = 21.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference () {
|
|
union() {
|
|
color("silver") translate([0,0,0]) cube([size_x,size_y,35]);
|
|
color("black") translate([6.35,-3.2,17]) rotate([-90,0,0])
|
|
cylinder(d=8, h=6.25);
|
|
color("black") translate([6.35,-3.2,29]) rotate([-90,0,0])
|
|
cylinder(d=8, h=6.25);
|
|
color("dimgray") translate([1.85,-2.0,2]) cube([9,2,9]);
|
|
}
|
|
color("dimgray") translate([6.35,-3.25,17]) rotate([-90,0,0])
|
|
cylinder(d=3.75, h=9);
|
|
color("dimgray") translate([6.35,-3.25,29]) rotate([-90,0,0])
|
|
cylinder(d=3.75, h=9);
|
|
difference() {
|
|
color("dimgray") translate([2.85,-2.1,3]) cube([7,9,7]);
|
|
color("dimgray") translate([1.85,-2,3]) rotate([0,45,0]) cube([1.5,9,1.5]);
|
|
color("dimgray") translate([8.75,-2,3]) rotate([0,45,0]) cube([1.5,9,1.5]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// 3.5mm jack type
|
|
if(type=="jack_3.5") {
|
|
size_x = 6.5;
|
|
size_y = 12;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference () {
|
|
union() {
|
|
color("black") translate([0,2,0]) cube([size_x,10,4]);
|
|
color("silver") translate([0,0,0]) cube([size_x,2,4]);
|
|
color("black") translate([3.125,-2,2]) rotate([-90,0,0]) cylinder(d=4, h=6.25);
|
|
}
|
|
color("dimgray") translate([3.125,-2.5,2]) rotate([-90,0,0]) cylinder(d=3, h=6);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// storage class
|
|
module storage(x,y,rotation,side,type,pcbsize_z) {
|
|
// standard sdcard
|
|
if(type=="sdcard" || type=="sdcard_i") {
|
|
size_x = 11.5;
|
|
size_y = 5.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference () {
|
|
color("silver") translate([0,0,0]) cube([size_x, size_y, 3.5]);
|
|
color("black") translate([.5,-.5,2]) cube([10.5, 5.5, 1]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// sata single header type
|
|
if(type=="sata_header") {
|
|
size_x = 16;
|
|
size_y = 4;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference () {
|
|
union() {
|
|
color("dimgray") translate([0,0,0]) cube([size_x,size_y,3]);
|
|
color("dimgray") translate([14,0,3]) cube([2,4,5]);
|
|
color("dimgray") translate([2,1,3]) cube([10,2,5]);
|
|
}
|
|
color("dimgray") translate([3,0,3]) cube([10,2,6]);
|
|
color("dimgray") translate([13,1,3]) cube([2,2,6]);
|
|
color("dimgray") translate([2,-1,-1]) cube([10,6,2.5]);
|
|
}
|
|
for (i=[1:1.27:8]) {
|
|
color("gold") translate ([i+2.75,1.75,2.5]) cube([.84,.25,5]);
|
|
}
|
|
}
|
|
}
|
|
// sata and power enclosed verticle recepticle
|
|
if(type=="sata_power_vrec") {
|
|
size_x = 40.43;
|
|
size_y = 3.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
translate([38.3,0,0]) rotate([90,0,180])
|
|
union() {
|
|
difference() {
|
|
union() {
|
|
difference () {
|
|
color("black") translate([2.12,0,0]) cube([36.19,8.5,3.5]);
|
|
//color("black") translate([4.12,-1,-2]) cube([32.19,4,7]);
|
|
}
|
|
// side bottom
|
|
color("black") translate([0,0,-.75]) cube([2.12,1.5,5]);
|
|
color("black") translate([38.31,0,-.75]) cube([2.12,1.5,5]);
|
|
// side towers
|
|
color("black") translate([0,1.499,.75]) cube([2.12,8.5,2]);
|
|
color("black") translate([38.31,1.499,.75]) cube([2.12,8.5,2]);
|
|
}
|
|
// tower point trim
|
|
color("black") translate([-1,8.17,.69]) rotate ([0,0,45])
|
|
cube([4.12,4,6]);
|
|
color("black") translate([41.43,8.17,.69]) rotate ([0,0,45])
|
|
cube([2.12,4,6]);
|
|
color("black") translate([0,8.17,4]) rotate ([-45,0,0])
|
|
cube([3.12,4,2]);
|
|
color("black") translate([37.31,8.17,4]) rotate ([-45,0,0])
|
|
cube([3.12,4,2]);
|
|
|
|
color("black") translate([0,8.17,-3.25]) rotate ([45,0,0])
|
|
cube([2.12,6,2]);
|
|
color("black") translate([38.31,8.17,-3.25]) rotate ([45,0,0])
|
|
cube([3.12,6,2]);
|
|
// connector cut outs
|
|
color("dimgray") translate([3.5,5.67,2]) cube([21.5,6,1.15]);
|
|
color("dimgray") translate([23.56,5.67,.4]) cube([1.45,6,2.15]);
|
|
color("dimgray") translate([27.01,5.67,2]) cube([10,6,1.15]);
|
|
color("dimgray") translate([27.01,5.67,.4]) cube([1.45,6,2.15]);
|
|
|
|
}
|
|
// pins
|
|
for (i=[1:1.27:8]) {
|
|
color("gold") translate ([i+28.25,3.5,2.25]) rotate([-90,0,0]) cube([.84,.25,5]);
|
|
}
|
|
for (i=[1:1.27:20]) {
|
|
color("gold") translate ([i+3.25,3.5,2.25]) rotate([-90,0,0]) cube([.84,.25,5]);
|
|
}
|
|
}
|
|
}
|
|
// sata and power enclosed right angle
|
|
if(type=="sata_encl_power") {
|
|
size_x = 40.43;
|
|
size_y = 12.87;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference() {
|
|
union() {
|
|
difference () {
|
|
color("black") translate([2.12,0,0]) cube([36.19,11.17,4.3]);
|
|
color("black") translate([4.12,-1,-2]) cube([32.19,4,7]);
|
|
}
|
|
color("black") translate([0,0,0]) cube([2.12,5.67,4]);
|
|
color("black") translate([38.31,0,0]) cube([2.12,5.67,4]);
|
|
color("black") translate([0,8,1]) cube([2.12,5.5,2.55]);
|
|
color("black") translate([38.31,8,1]) cube([2.12,5.5,2.55]);
|
|
}
|
|
color("black") translate([1.12,5.67,-.5]) cube([38.19,5.7,1]);
|
|
color("black") translate([-1,11.17,.69]) rotate ([0,0,45])
|
|
cube([4.12,4,6]);
|
|
color("black") translate([41.43,11.17,.69]) rotate ([0,0,45])
|
|
cube([2.12,4,6]);
|
|
color("black") translate([0,11.17,4]) rotate ([-45,0,0])
|
|
cube([3.12,4,2]);
|
|
color("black") translate([37.31,11.17,4]) rotate ([-45,0,0])
|
|
cube([3.12,4,2]);
|
|
color("dimgray") translate([3.32,5.67,2.5]) cube([21.58,6,1.15]);
|
|
color("dimgray") translate([23.56,5.67,1.15]) cube([1.45,6,2.15]);
|
|
color("dimgray") translate([27.01,5.67,2.5]) cube([10,6,1.15]);
|
|
color("dimgray") translate([27.01,5.67,1.15]) cube([1.45,6,2.15]);
|
|
|
|
}
|
|
}
|
|
}
|
|
// sata enclosed header style
|
|
if(type=="sata_encl_header") {
|
|
size_x = 16.9;
|
|
size_y = 6.45;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference () {
|
|
union() {
|
|
color("dimgray") translate([0,0,0]) cube([size_x,size_y,3]);
|
|
color("dimgray") translate([14,1.25,3]) cube([2,4,5]);
|
|
color("dimgray") translate([2,2.25,3]) cube([10,2,5]);
|
|
}
|
|
color("dimgray") translate([3,1.25,3]) cube([10,2,6]);
|
|
color("dimgray") translate([13,2.25,3]) cube([2,2,6]);
|
|
color("dimgray") translate([2,-1,-1]) cube([12,8,2.5]);
|
|
}
|
|
for (i=[1:1.27:8]) {
|
|
color("gold") translate ([i+2.75,3,2.5]) cube([.84,.25,5]);
|
|
}
|
|
color("dimgray") translate([0,0,3]) cube([16.9,1,5]);
|
|
color("dimgray") translate([0,0,3]) cube([1,6.45,5]);
|
|
color("dimgray") translate([15.9,0,3]) cube([1,6.45,5]);
|
|
color("dimgray") translate([0,5.45,3]) cube([16.9,1,5]);
|
|
}
|
|
}
|
|
|
|
// m.2 header style
|
|
if(type=="m.2_header") {
|
|
size_x = 22;
|
|
size_y = 6.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference () {
|
|
|
|
color("dimgray") translate([0,0,0]) cube([size_x,size_y,5.2]);
|
|
color("dimgray") translate([.88,-1,2.48]) cube([20.15,3.5,2]);
|
|
color("dimgray") translate([17.65,-1,2.48]) cube([3.35,5.25,.92]);
|
|
color("dimgray") translate([.88,-1,2.48]) cube([15.65,5.25,.92]);
|
|
//color("dimgray") translate([3,1.25,3]) cube([10,2,6]);
|
|
}
|
|
for (i=[.88:.5:3]) {
|
|
color("gold") translate ([i+17.2,2,2.48]) cube([.25,2,.25]);
|
|
}
|
|
for (i=[.88:.5:15]) {
|
|
color("gold") translate ([i+.88,2,2.48]) cube([.25,2,.25]);
|
|
}
|
|
}
|
|
|
|
}
|
|
// m.2 mounting stud
|
|
if(type=="m.2_stud") {
|
|
size_x = 5;
|
|
size_y = 5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
|
|
difference () {
|
|
color("silver") cylinder(d=5, h=2);
|
|
color("silver") translate([0,0,-1]) cylinder(d=2, h=5);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
// combo class
|
|
module combo(x,y,rotation,side,type,pcbsize_z) {
|
|
// rj-45 and usb2 stacked type
|
|
if(type=="rj45-usb2_double") {
|
|
size_x = 19;
|
|
size_y = 27.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference () {
|
|
color("lightgray") translate([0,0,0]) cube([size_x, size_y, 31]);
|
|
color("darkgray") translate([3,-1,19]) cube([13, 19.5, 8]);
|
|
color("darkgray") translate([7,-2,24.5]) cube([5, 19.5, 5]);
|
|
color("dimgray") translate([3,-.1,1.5]) cube([13, 7.5, 7]);
|
|
color("dimgray") translate([3,-.1,10.5]) cube([13, 7.5, 7]);
|
|
}
|
|
color("green") translate([3,-.1,27.5]) cube([3, 2, 2]);
|
|
color("orange") translate([13,-.1,27.5]) cube([3, 2, 2]);
|
|
color("white") translate([4,1,5]) cube([11, 12.5, 1.5]);
|
|
color("white") translate([4,1,14]) cube([11, 12.5, 1.5]);
|
|
}
|
|
}
|
|
// rj-45 and usb3 stacked
|
|
if(type=="rj45-usb3_double") {
|
|
size_x = 19;
|
|
size_y = 27.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference () {
|
|
color("lightgray") translate([0,0,0]) cube([size_x, size_y, 31]);
|
|
color("darkgray") translate([3,-1,19]) cube([13, 19.5, 8]);
|
|
color("darkgray") translate([7,-2,24.5]) cube([5, 19.5, 5]);
|
|
color("dimgray") translate([3,-.1,1.5]) cube([13, 7.5, 7]);
|
|
color("dimgray") translate([3,-.1,10.5]) cube([13, 7.5, 7]);
|
|
}
|
|
color("green") translate([3,-.1,27.5]) cube([3, 2, 2]);
|
|
color("orange") translate([13,-.1,27.5]) cube([3, 2, 2]);
|
|
color("royalblue") translate([4,1,5]) cube([11, 12.5, 1.5]);
|
|
color("royalblue") translate([4,1,14]) cube([11, 12.5, 1.5]);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
// jumper class
|
|
module jumper(x,y,rotation,side,type,pcbsize_z) {
|
|
// 2x1 type
|
|
if(type=="header_2x1") {
|
|
size_x = 5;
|
|
size_y = 2.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
color("black") translate([0,0,0]) cube([size_x, size_y, 3]);
|
|
color("silver") translate ([1,1,2.5]) cube([.64,.64,5]);
|
|
color("silver") translate ([3.5,1,2.5]) cube([.64,.64,5]);
|
|
}
|
|
}
|
|
// 3x2 type
|
|
if(type=="header_3x2") {
|
|
size_x = 7.5;
|
|
size_y = 5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
color("black") translate([0,0,0]) cube([size_x, size_y, 3]);
|
|
for (i=[1:2.5:8]) {
|
|
color("silver") translate ([i,.5,3]) cube([.64,.64,5]);
|
|
color("silver") translate ([i,3.5,3]) cube([.64,.64,5]);
|
|
}
|
|
}
|
|
}
|
|
// 5x1 type
|
|
if(type=="header_5x1") {
|
|
size_x = 12.5;
|
|
size_y = 2.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
color("black") translate([0,0,0]) cube([size_x, size_y, 3]);
|
|
for (i=[1:2.5:12]) {
|
|
color("silver") translate ([i,1,3]) cube([.64,.64,5]);
|
|
}
|
|
}
|
|
}
|
|
// 6x1 type
|
|
if(type=="header_6x1") {
|
|
size_x = 15;
|
|
size_y = 2.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
color("black") translate([0,0,0]) cube([size_x, size_y, 3]);
|
|
for (i=[1:2.5:14]) {
|
|
color("silver") translate ([i,1,3]) cube([.64,.64,5]);
|
|
}
|
|
}
|
|
}
|
|
// 7x1 type
|
|
if(type=="header_7x1") {
|
|
size_x = 17.5;
|
|
size_y = 2.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
color("black") translate([0,0,0]) cube([size_x, size_y, 3]);
|
|
for (i=[1:2.5:16]) {
|
|
color("silver") translate ([i,1,3]) cube([.64,.64,5]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// misc class
|
|
module misc(x,y,rotation,side,type,pcbsize_z) {
|
|
// type ir
|
|
if(type=="ir_1") {
|
|
size_x = 7;
|
|
size_y = 3;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
color("silver") translate([0,0,4]) cube([size_x,size_y,8]);
|
|
color("dimgray") translate([3.5,.5,7.5]) sphere(d=5);
|
|
color("silver") translate ([1,1.25,0]) cube([.64,.5,4]);
|
|
color("silver") translate ([3.25,1.25,0]) cube([.64,.5,4]);
|
|
color("silver") translate ([5.5,1.25,0]) cube([.64,.5,4]);
|
|
}
|
|
}
|
|
// type led surface mount
|
|
if(type=="led_3x1.5") {
|
|
size_x = 3;
|
|
size_y = 1.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
color("gold") translate([0,0,0]) cube([size_x,size_y,.5]);
|
|
}
|
|
// type lcd_2.2
|
|
if(type=="lcd_2.2") {
|
|
size_x = 56;
|
|
size_y = 38;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference() {
|
|
union() {
|
|
color("white") translate([0,0,0]) cube([size_x,size_y,1.5]);
|
|
color("dimgrey") translate([1,1,1.5]) cube([size_x-2,size_y-2,1.85]);
|
|
}
|
|
color("black") translate([54.5,4,-.01]) cube([2,30,4]);
|
|
}
|
|
color("dimgrey") translate([4.25,.9,3.35]) cube([45,34,.25]);
|
|
}
|
|
}
|
|
// type battery holder 1
|
|
if(type=="bat_hold_1") {
|
|
size_x = 22;
|
|
size_y = 16;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference() {
|
|
union() {
|
|
color("LightYellow") translate([0,0,0]) cube([size_x,size_y,6]);
|
|
color("LightYellow") translate([-3.2499,4.5,0]) cube([3.25,7,6]);
|
|
color("LightYellow") translate([21.999,4.5,0]) cube([3.25,7,6]);
|
|
}
|
|
color("LightYellow") translate([11,8,2]) cylinder(d=20, h=5, $fn=360);
|
|
color("LightYellow") translate([-3.259,5,5]) cube([28.6,5.5,3]);
|
|
color("LightYellow") translate([-3.25,5.5,5]) cube([28.5,5.5,3]);
|
|
|
|
color("LightYellow") translate([-4.251,5,-1]) cube([2,6,8]);
|
|
color("LightYellow") translate([.5,5,2]) cube([1,6,8]);
|
|
|
|
color("LightYellow") translate([24.25,5,-1]) cube([2,6,8]);
|
|
color("LightYellow") translate([20,5,2]) cube([1,6,8]);
|
|
|
|
color("LightYellow") translate([22,15,-1]) rotate([0,0,45]) cube([2,2,8]);
|
|
|
|
/* bottom cut outs */
|
|
color("LightYellow") translate([7,2.5,-1]) cylinder(d=2.5, h=4, $fn=360);
|
|
color("LightYellow") translate([3.75,1.25,-1]) cube([3.5,2.5,3.75]);
|
|
color("LightYellow") translate([15,2.5,-1]) cylinder(d=2.5, h=4, $fn=360);
|
|
color("LightYellow") translate([15,1.25,-1]) cube([3.3,2.5,3.75]);
|
|
color("LightYellow") translate([7,13.5,-1]) cylinder(d=2.5, h=4, $fn=360);
|
|
color("LightYellow") translate([3.75,12.25,-1]) cube([3.5,2.5,3.75]);
|
|
color("LightYellow") translate([15,13.5,-1]) cylinder(d=2.5, h=4, $fn=360);
|
|
color("LightYellow") translate([15,12.25,-1]) cube([3.3,2.5,3.75]);
|
|
}
|
|
color("Gold") translate([-2.25199,5,0]) cube([1,6,6]);
|
|
color("Gold") translate([0,5,0]) cube([1,6,6]);
|
|
color("Gold") translate([-2.25199,5,5]) cube([3,6,1]);
|
|
|
|
color("Gold") translate([20.99,5,2]) cube([1,6,4]);
|
|
color("Gold") translate([23.251,5,0]) cube([1,6,6]);
|
|
color("Gold") translate([21,5,5]) cube([3,6,1]);
|
|
|
|
/* right contacts */
|
|
color("Gold") translate([15,6,2.5]) rotate([0,5,0]) cube([6,1,.5]);
|
|
color("Gold") translate([15,9,2.5]) rotate([0,5,0]) cube([6,1,.5]);
|
|
color("Gold") translate([20.5,5,2]) cube([1,6,.5]);
|
|
|
|
/* left contacts */
|
|
color("Gold") translate([1.5,6,2.5]) rotate([0,5,0]) cube([.5,1,3]);
|
|
color("Gold") translate([2,6,5]) rotate([0,5,0]) cube([.5,1,.5]);
|
|
color("Gold") translate([1.5,9,2.5]) rotate([0,5,0]) cube([.5,1,3]);
|
|
color("Gold") translate([2,9,5]) rotate([0,5,0]) cube([.5,1,.5]);
|
|
color("Gold") translate([1,5,2]) cube([1,6,.5]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// heatsink class
|
|
module heatsink(x,y,rotation,side,type,pcbsize_z,soc1size_z) {
|
|
// type c series
|
|
if(type=="hc4_oem" || type=="c4_oem" || type=="c2_oem" || type=="c1+_oem") {
|
|
size_x = 58;
|
|
size_y = 32;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
translate([5.5,-23.5,soc1size_z])
|
|
difference() {
|
|
union() {
|
|
color("gray",.6) cube([40,32,10]);
|
|
if(type=="hc4_oem") {
|
|
color("gray",.6) translate([39.99,5,0]) cube([5.5,7,2]);
|
|
color("gray",.6) translate([45.75,8.5,0]) cylinder(d=7, h=2);
|
|
color("gray",.6) translate([-5.49,25,0]) cube([5.5,7,2]);
|
|
color("gray",.6) translate([-5.5,28.5,0]) cylinder(d=7, h=2);
|
|
}
|
|
else {
|
|
color("gray",.6) translate([39.99,0,0]) cube([5.5,7,2]);
|
|
color("gray",.6) translate([45.75,3.5,0]) cylinder(d=7, h=2);
|
|
color("gray",.6) translate([-5.49,20,0]) cube([5.5,7,2]);
|
|
color("gray",.6) translate([-5.5,23.5,0]) cylinder(d=7, h=2);
|
|
}
|
|
}
|
|
// center channel and fins
|
|
color("gray",1) translate([17.5,-1,2]) cube([5,34,9]);
|
|
color("gray",1) translate([1.5,-1,2]) cube([1.25,34,9]);
|
|
for (i=[3.5:2.25:38]) {
|
|
color("gray",1) translate([i,-1,2]) cube([1.5,34,9]);
|
|
}
|
|
// fin elevations
|
|
color("gray",.6) translate([4,-1,9]) cube([8,34,2]);
|
|
color("gray",.6) translate([28,-1,9]) cube([8,34,2]);
|
|
color("gray",.6) translate([11,-1,8]) cube([2,34,3]);
|
|
color("gray",.6) translate([27,-1,8]) cube([2,34,3]);
|
|
color("gray",.6) translate([13,-1,7]) cube([2,34,4]);
|
|
color("gray",.6) translate([25,-1,7]) cube([2,34,4]);
|
|
color("gray",.6) translate([16,-1,6]) cube([2,34,5]);
|
|
color("gray",.6) translate([22,-1,6]) cube([2,34,5]);
|
|
// holes
|
|
if(type=="hc4_oem") {
|
|
color("gray",.6) translate([45.75,8.5,-1]) cylinder(d=3, h=4);
|
|
color("gray",.6) translate([-5.5,28.5,-1]) cylinder(d=3, h=4);
|
|
}
|
|
else {
|
|
color("gray",.6) translate([45.75,3.5,-1]) cylinder(d=3, h=4);
|
|
color("gray",.6) translate([-5.5,23.5,-1]) cylinder(d=3, h=4);
|
|
}
|
|
}
|
|
}
|
|
if(type=="xu4_oem" || type=="n1_oem") {
|
|
$fn=60;
|
|
size_x = 58;
|
|
size_y = 40;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
translate([5.5,-30,soc1size_z])
|
|
difference() {
|
|
union() {
|
|
color("DeepSkyBlue",.6) cube([40, 40, 9.8]);
|
|
color("DeepSkyBlue",.6) translate([39.99,6.5,0]) cube([5.5,7,2]);
|
|
color("DeepSkyBlue",.6) translate([45.5,10,0]) cylinder(d=7, h=2);
|
|
color("DeepSkyBlue",.6) translate([-5.49,26.5,0]) cube([5.5,7,2]);
|
|
color("DeepSkyBlue",.6) translate([-5.5,30,0]) cylinder(d=7, h=2);
|
|
}
|
|
// fins
|
|
for (i=[1.5:2.25:38.5]) {
|
|
color("DeepSkyBlue",.6) translate([i,-1,2]) cube ([1.25,42,12]);
|
|
}
|
|
// cross opening
|
|
color("DeepSkyBlue",.6) translate([17.5,-1,2]) cube([5,42,10]);
|
|
color("DeepSkyBlue",.6) translate([-1,17.5,2]) cube([42,5,10]);
|
|
// fin elevations
|
|
color("DeepSkyBlue",.6) translate([4,-1,9]) cube([8,42,2]);
|
|
color("DeepSkyBlue",.6) translate([28,-1,9]) cube([8,42,2]);
|
|
color("DeepSkyBlue",.6) translate([11,-1,8]) cube([2,42,3]);
|
|
color("DeepSkyBlue",.6) translate([27,-1,8]) cube([2,42,3]);
|
|
color("DeepSkyBlue",.6) translate([13,-1,7]) cube([2.5,42,4]);
|
|
color("DeepSkyBlue",.6) translate([25,-1,7]) cube([2,42,4]);
|
|
color("DeepSkyBlue",.6) translate([16,-1,6]) cube([2,42,5]);
|
|
color("DeepSkyBlue",.6) translate([22,-1,6]) cube([2.5,42,5]);
|
|
// fan cut out
|
|
color("DeepSkyBlue",.6) translate([20,20,2]) cylinder(r=18, h=13.5, $fn=100);
|
|
|
|
// holes
|
|
color("DeepSkyBlue",.6) translate([45.5,10,-1]) cylinder(d=3, h=4);
|
|
color("DeepSkyBlue",.6) translate([-5.5,30,-1]) cylinder(d=3, h=4);
|
|
}
|
|
}
|
|
if(type=="xu4q_oem") {
|
|
$fn=60;
|
|
size_x = 58;
|
|
size_y = 40;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
translate([5.5,-30,soc1size_z])
|
|
difference() {
|
|
union() {
|
|
color("DeepSkyBlue",.6) cube([40, 40, 25]);
|
|
color("DeepSkyBlue",.6) translate([39.99,6.5,0]) cube([5.5,7,2]);
|
|
color("DeepSkyBlue",.6) translate([45.5,10,0]) cylinder(d=7, h=2);
|
|
color("DeepSkyBlue",.6) translate([-5.49,26.5,0]) cube([5.5,7,2]);
|
|
color("DeepSkyBlue",.6) translate([-5.5,30,0]) cylinder(d=7, h=2);
|
|
}
|
|
// fins
|
|
for (i=[1.25:3.5:38.5]) {
|
|
color("DeepSkyBlue",.6) translate([i,-1,2]) cube ([2.5,42,25]);
|
|
}
|
|
for (i=[7.5:8:38.5]) {
|
|
color("DeepSkyBlue",.6) translate([-1,i,2]) cube ([42,1.5,25]);
|
|
}
|
|
|
|
// holes
|
|
color("DeepSkyBlue",.6) translate([45.5,10,-1]) cylinder(d=3, h=4);
|
|
color("DeepSkyBlue",.6) translate([-5.5,30,-1]) cylinder(d=3, h=4);
|
|
}
|
|
|
|
}
|
|
if(type=="n2_oem") {
|
|
size_x = 90;
|
|
size_y = 90;
|
|
place(x,y,size_x,size_y,rotation,side,type,-3)
|
|
color("gray") import("Odroid-N2_Heatsink.stl", convexity=3);
|
|
}
|
|
if(type=="n2+_oem") {
|
|
size_x = 90;
|
|
size_y = 90;
|
|
place(x,y,size_x,size_y,rotation,side,type,-3)
|
|
color("gray") import("Odroid-N2+_Heatsink.stl", convexity=3);
|
|
}
|
|
if(type=="m1_oem") {
|
|
size_x = 90;
|
|
size_y = 122;
|
|
place(x,y,size_x,size_y,rotation,side,type,-3)
|
|
color("gray") translate([-.5,0,3]) rotate([0,0,0]) import("Odroid-M1_Heatsink.stl", convexity=3);
|
|
}
|
|
if(type=="h2_oem") {
|
|
size_x = 90;
|
|
size_y = 90;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z+soc1size_z)
|
|
color("gray") import("Odroid-H2_Heatsink.stl", convexity=3);
|
|
|
|
}
|
|
}
|
|
|
|
// pcie class
|
|
module pcie(x,y,rotation,side,type,pcbsize_z) {
|
|
// PCIE-X4
|
|
if (type=="x4") {
|
|
size_x = 38.8;
|
|
size_y = 8.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference() {
|
|
color("black") cube([size_x, size_y, 11.1]);
|
|
color("dimgrey") translate([1.55,(size_y/2)-.8,2]) cube([11.5,1.6,11]);
|
|
color("dimgrey") translate([16.5,(size_y/2)-.8,2]) cube([20.3,1.6,11]);
|
|
}
|
|
for (i=[1:1:11.5]) {
|
|
color("gold") translate ([i+1,2.75,2.5]) cube([.5,1,8.25]);
|
|
color("gold") translate ([i+1,4.75,2.5]) cube([.5,1,8.25]);
|
|
}
|
|
for (i=[17:1:36.5]) {
|
|
color("gold") translate ([i,2.75,2.5]) cube([.5,1,8.25]);
|
|
color("gold") translate ([i,4.75,2.5]) cube([.5,1,8.25]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// JST-PH connector class
|
|
module jst_ph(x,y,rotation,side,type,pcbsize_z) {
|
|
size_x = 2.4+(type*2);
|
|
size_y = 4.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference() {
|
|
color("white") cube([size_x, size_y, 6]);
|
|
color("white") translate([.5, .5, .5]) cube([size_x-1, size_y-1, 6]);
|
|
color("white") translate([size_x/2-(0.5*type)/2, -.1,.5]) cube([0.5*type, size_y-2, 6]);
|
|
}
|
|
translate([1.95, 0, 0]) union() {
|
|
for(ind=[0:type-1]) {
|
|
color("silver") translate([ind*2, 1.4, .5]) cube([.5, .5, 4]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// compute module holder class
|
|
module cm_holder(x,y,rotation,side,type,pcbsize_z) {
|
|
// jetson nano
|
|
if(type == "jetsonnano") {
|
|
size_x = 73;
|
|
size_y = 6.5;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference () {
|
|
color("dimgray") translate([0,0,0]) cube([size_x,size_y,9.2]);
|
|
color("dimgray") translate([1.5,-1,5.7]) cube([70,3,5]);
|
|
color("dimgray") translate([3.5,-1,5.7]) cube([28.5,5.25,.92]);
|
|
color("dimgray") translate([34.5,-1,5.7]) cube([35,5.25,.92]);
|
|
}
|
|
for (i=[2:.5:31]) {
|
|
color("gold") translate ([i+.5,2,5.7]) cube([.25,2,.25]);
|
|
}
|
|
for (i=[34:.5:69]) {
|
|
color("gold") translate ([i+.5,2,5.7]) cube([.25,2,.25]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// compute module class
|
|
module cm(x,y,rotation,side,type,pcbsize_z) {
|
|
$fn=90;
|
|
// jetson nano
|
|
if(type == "jetsonnano") {
|
|
size_x = 70;
|
|
size_y = 45;
|
|
place(x,y,size_x,size_y,rotation,side,type,pcbsize_z)
|
|
union() {
|
|
difference () {
|
|
|
|
color("tan") translate([0,0,7]) cube([size_x,size_y,1.4]);
|
|
color("tan") translate([37,-1,6]) cube([1,5,4]);
|
|
color("dimgray") translate([-1,18,6]) cube([3,4,4]);
|
|
color("dimgray") translate([size_x-2,18,6]) cube([3,4,4]);
|
|
translate([size_x-3,size_y-3,6]) cylinder(d=3,h=3);
|
|
translate([3,size_y-3,6]) cylinder(d=3,h=3);
|
|
|
|
}
|
|
for (i=[2:.5:36]) {
|
|
color("gold") translate ([i+.5,0,6.8]) cube([.25,2,.25]);
|
|
color("gold") translate ([i+.5,0,8.4]) cube([.25,2,.25]);
|
|
}
|
|
for (i=[37.5:.5:67]) {
|
|
color("gold") translate ([i+.5,0,6.8]) cube([.25,2,.25]);
|
|
color("gold") translate ([i+.5,0,8.4]) cube([.25,2,.25]);
|
|
}
|
|
color("dimgrey") translate([20,13,8.3]) cube([14,14,1.2]);
|
|
difference() {
|
|
color("black") translate([6.5,4.5,9.5]) cube([58,40,16]);
|
|
color("dimgrey") translate([0,25.375,13.5]) rotate([90,2.5,90]) linear_extrude(70) {
|
|
polygon(points = [[0,0],[-.5,13],[4,13],[3.5,0]]);}
|
|
color("dimgrey") translate([0,20.675,13.5]) rotate([90,-2.5,90]) linear_extrude(70) {
|
|
polygon(points = [[0,0],[-.5,13],[4,13],[3.5,0]]);}
|
|
color("dimgrey") translate([0,30.5,13.5]) rotate([90,5,90]) linear_extrude(70) {
|
|
polygon(points = [[0,0],[-.5,13],[4,13],[3.5,0]]);}
|
|
color("dimgrey") translate([0,15.25,13.5]) rotate([90,-5,90]) linear_extrude(70) {
|
|
polygon(points = [[0,0],[-.5,13],[4,13],[3.5,0]]);}
|
|
color("dimgrey") translate([0,35,13.5]) rotate([90,10,90]) linear_extrude(70) {
|
|
polygon(points = [[0,0],[-.5,10.5],[4,10.5],[3.5,0]]);}
|
|
color("dimgrey") translate([0,10.5,13]) rotate([90,-10,90]) linear_extrude(70) {
|
|
polygon(points = [[0,0],[-.5,10.5],[4,10.5],[3.5,0]]);}
|
|
color("dimgrey") translate([0,36.5,20]) cube([70,10,4]);
|
|
color("dimgrey") translate([0,1.5,20]) cube([70,10,4]);
|
|
color("dimgrey") translate([0,39.5,13]) rotate([90,10,90]) linear_extrude(70) {
|
|
polygon(points = [[0,0],[0,10.5],[3,10.5],[3,0]]);}
|
|
color("dimgrey") translate([0,6.5,12.5]) rotate([90,-10,90]) linear_extrude(70) {
|
|
polygon(points = [[0,0],[0,10.5],[3,10.5],[3,0]]);}
|
|
color("dimgrey") translate([19,9,22]) cylinder(d=3, h=5);
|
|
color("dimgrey") translate([51,9,22]) cylinder(d=3, h=5);
|
|
color("dimgrey") translate([19,41,22]) cylinder(d=3, h=5);
|
|
color("dimgrey") translate([51,41,22]) cylinder(d=3, h=5);
|
|
|
|
}
|
|
difference() {
|
|
union() {
|
|
color("silver") translate([size_x-3,size_y-3,0]) cylinder(d=5.2,h=7, $fn=6);
|
|
color("silver") translate([3,size_y-3,0]) cylinder(d=5.2,h=7, $fn=6);
|
|
}
|
|
color("silver") translate([size_x-3,size_y-3,-.1]) cylinder(d=3,h=13);
|
|
color("silver") translate([3,size_y-3,-.1]) cylinder(d=3,h=13);
|
|
}
|
|
}
|
|
}
|
|
}
|