Add/reorg enclosure OpenSCAD files
This commit is contained in:
parent
fe0edb53e0
commit
d07138f86f
13 changed files with 672 additions and 0 deletions
5
.gitignore
vendored
5
.gitignore
vendored
|
|
@ -1,6 +1,11 @@
|
|||
hardware/History
|
||||
hardware/Project Logs for olsndot
|
||||
hardware/__Previews
|
||||
__pycache__
|
||||
.ipynb_checkpoints
|
||||
|
||||
*.stl
|
||||
|
||||
# Windows image file caches
|
||||
Thumbs.db
|
||||
ehthumbs.db
|
||||
|
|
|
|||
BIN
enclosure/lyza/depthmap_03.png
Normal file
BIN
enclosure/lyza/depthmap_03.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 46 KiB |
BIN
enclosure/lyza/depthmap_03_downscaled.png
Normal file
BIN
enclosure/lyza/depthmap_03_downscaled.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
238
enclosure/lyza/lyza_enclosure.scad
Normal file
238
enclosure/lyza/lyza_enclosure.scad
Normal file
|
|
@ -0,0 +1,238 @@
|
|||
|
||||
/* A small, arbitrary unit to guard against rounding errors */
|
||||
eps = 0.1;
|
||||
alot = 1000;
|
||||
|
||||
/* Base PCB size */
|
||||
pcb_width = 50;
|
||||
pcb_height = 70;
|
||||
/* Extra space around PCB */
|
||||
pcb_extra = 1;
|
||||
|
||||
/* Offset of screw hole centers from left/right/top/bottom side of board */
|
||||
screw_offx_l = 5;
|
||||
screw_offx_r = 5;
|
||||
screw_offx_t = 5;
|
||||
screw_offx_b = 5;
|
||||
|
||||
/* Thickness of bottom, walls, lid (middle sections) */
|
||||
bottom_thickness = 1.5;
|
||||
wall_thickness = 1.5;
|
||||
lid_thickness = 1.5;
|
||||
|
||||
/* Outside corner radius */
|
||||
corner_radius_wall = 3;
|
||||
corner_radius_lid = 2;
|
||||
|
||||
screw_base_dia = 8;
|
||||
screw_base_h = 5;
|
||||
screw_nut_dia = 5.4;
|
||||
screw_nut_h = 6;
|
||||
screw_hole_dia = 4.0;
|
||||
screw_hole_h = 6;
|
||||
board_thickness = 1.6;
|
||||
height_above_board = 18;
|
||||
height_lid_inner = 1;
|
||||
lid_lip_depth = 1;
|
||||
lid_lip_width = 1;
|
||||
lid_lip_extra = 1;
|
||||
|
||||
clamp_tube_dia = screw_base_dia;
|
||||
clamp_tube_h = 0; //height_above_board+height_lid_inner;
|
||||
clamp_tube_base_extra = 2;
|
||||
|
||||
screw_head_hole_dia = 6.5;
|
||||
screw_head_hole_depth = 3;
|
||||
|
||||
module rounded_rect(w, h, r) {
|
||||
hull(){
|
||||
translate([w/2-r, h/2-r]) circle(r);
|
||||
translate([-(w/2-r), h/2-r]) circle(r);
|
||||
translate([w/2-r, -(h/2-r)]) circle(r);
|
||||
translate([-(w/2-r), -(h/2-r)]) circle(r);
|
||||
}
|
||||
}
|
||||
|
||||
module shell(thickness, inner_height, inner_extra, radius_horiz) {
|
||||
d = thickness + inner_height;
|
||||
rh=radius_horiz;
|
||||
difference(){
|
||||
r = corner_radius_wall;
|
||||
w = pcb_width+pcb_extra+2*wall_thickness;
|
||||
h = pcb_height+pcb_extra+2*wall_thickness;
|
||||
hull() {
|
||||
translate([0, 0, rh]) linear_extrude(height=d-rh) rounded_rect(w, h, r);
|
||||
linear_extrude(height=eps) rounded_rect(w-2*rh, h-2*rh, r);
|
||||
}
|
||||
|
||||
iw = pcb_width+inner_extra;
|
||||
ih = pcb_height+inner_extra;
|
||||
translate([-iw/2, -ih/2, bottom_thickness]) cube([iw, ih, h]);
|
||||
}
|
||||
}
|
||||
|
||||
module single_screw_base() {
|
||||
translate([0, 0, bottom_thickness-eps]) linear_extrude(height=screw_base_h+eps) {
|
||||
circle(d=screw_base_dia);
|
||||
translate([-screw_base_dia/2, 0]) square([alot, alot]);
|
||||
translate([0, -screw_base_dia/2]) square([alot, alot]);
|
||||
}
|
||||
}
|
||||
|
||||
w = pcb_width;
|
||||
h = pcb_height;
|
||||
e = pcb_extra;
|
||||
l = screw_offx_l;
|
||||
r = screw_offx_r;
|
||||
t = screw_offx_t;
|
||||
b = screw_offx_b;
|
||||
s1_pos = [w/2-l, h/2-b];
|
||||
s2_pos = [-w/2+r, -h/2+t];
|
||||
s3_pos = [w/2-l, -h/2+t];
|
||||
s4_pos = [-w/2+r, h/2-b];
|
||||
module screw_bases() {
|
||||
intersection() {
|
||||
union() {
|
||||
translate(s1_pos) single_screw_base();
|
||||
translate(s2_pos) mirror([1,1,0]) single_screw_base();
|
||||
translate(s3_pos) mirror([0,1,0]) single_screw_base();
|
||||
translate(s4_pos) mirror([1,0,0]) single_screw_base();
|
||||
}
|
||||
cube([w+e+eps, h+e+eps, alot], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
module single_screw_hole() {
|
||||
translate([0, 0, bottom_thickness+screw_base_h+eps])
|
||||
mirror([0,0,1])
|
||||
union() {
|
||||
cylinder(h=screw_nut_h+eps, d=screw_nut_dia);
|
||||
cylinder(h=screw_hole_h+eps, d=screw_hole_dia);
|
||||
}
|
||||
}
|
||||
|
||||
module screw_holes() {
|
||||
translate(s1_pos) single_screw_hole();
|
||||
translate(s2_pos) mirror([1,1,0]) single_screw_hole();
|
||||
translate(s3_pos) mirror([0,1,0]) single_screw_hole();
|
||||
translate(s4_pos) mirror([1,0,0]) single_screw_hole();
|
||||
}
|
||||
|
||||
conn_1_y = 12.0;
|
||||
conn_1_l = 20.0;
|
||||
conn_1_h = 7;
|
||||
conn_2_y = conn_1_y+conn_1_l+6.0;
|
||||
conn_2_l = conn_1_l;
|
||||
conn_2_h = conn_1_h;
|
||||
conn_pwr_y = 12.5;
|
||||
conn_pwr_l = 10.0;
|
||||
conn_pwr_h = 10;
|
||||
conn_extra = 1;
|
||||
module conn_holes() {
|
||||
e = conn_extra;
|
||||
translate([0, -e/2, -e/2])
|
||||
translate([0, 0, bottom_thickness+screw_base_h+board_thickness])
|
||||
translate([-pcb_width/2, -pcb_height/2]) {
|
||||
translate([-alot, conn_1_y]) cube([alot, conn_1_l+e, conn_1_h+e]);
|
||||
translate([-alot, conn_2_y]) cube([alot, conn_2_l+e, conn_2_h+e]);
|
||||
translate([0, conn_pwr_y]) cube([alot, conn_pwr_l+e, conn_pwr_h+e]);
|
||||
}
|
||||
}
|
||||
|
||||
module base() {
|
||||
difference() {
|
||||
union() {
|
||||
screw_bases();
|
||||
shell(bottom_thickness,
|
||||
screw_base_h + board_thickness + height_above_board,
|
||||
pcb_extra,
|
||||
radius_horiz=0);
|
||||
}
|
||||
screw_holes();
|
||||
conn_holes();
|
||||
}
|
||||
}
|
||||
|
||||
module single_clamp_stud_part(liph, clamp_tube_h, extra) {
|
||||
translate([0, 0, lid_thickness-eps]) union() {
|
||||
cylinder(h=clamp_tube_h, d=clamp_tube_dia+extra);
|
||||
linear_extrude(height=liph+eps) {
|
||||
translate([-clamp_tube_dia/2-extra/2, 0]) square([alot, alot]);
|
||||
translate([0, -clamp_tube_dia/2-extra/2]) square([alot, alot]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module single_clamp_stud(liph) {
|
||||
e = clamp_tube_base_extra;
|
||||
single_clamp_stud_part(liph, liph+eps, e);
|
||||
single_clamp_stud_part(liph, clamp_tube_h, 0);
|
||||
}
|
||||
|
||||
module lid_screw_hole() {
|
||||
cylinder(h=alot, d=screw_hole_dia);
|
||||
cylinder(h=screw_head_hole_depth+eps, d=screw_head_hole_dia);
|
||||
}
|
||||
|
||||
module lid() {
|
||||
e = lid_lip_extra;
|
||||
iw = pcb_width+pcb_extra-e+eps;
|
||||
ih = pcb_height+pcb_extra-e+eps;
|
||||
liph = lid_lip_depth+height_lid_inner;
|
||||
difference() {
|
||||
union() {
|
||||
shell(lid_thickness,
|
||||
height_lid_inner,
|
||||
inner_extra=-eps,
|
||||
radius_horiz=corner_radius_lid);
|
||||
difference() {
|
||||
translate([-iw/2, -ih/2, lid_thickness-eps]) cube([iw, ih, liph+eps]);
|
||||
minkowski() {
|
||||
translate([-iw/2+e/2+liph, -ih/2+e/2+liph, lid_thickness-eps]) cube([iw-e-liph*2, ih-e-liph*2, eps]);
|
||||
cylinder(d1=0, d2=2*liph+2*eps, h=2*liph+2*eps);
|
||||
};
|
||||
}
|
||||
intersection() {
|
||||
translate([-iw/2, -ih/2, lid_thickness-eps]) cube([iw, ih, alot]);
|
||||
union() {
|
||||
translate(s1_pos) single_clamp_stud(liph);
|
||||
translate(s2_pos) mirror([1,1,0]) single_clamp_stud(liph);
|
||||
translate(s3_pos) mirror([0,1,0]) single_clamp_stud(liph);
|
||||
translate(s4_pos) mirror([1,0,0]) single_clamp_stud(liph);
|
||||
}
|
||||
}
|
||||
}
|
||||
translate([0, 0, -eps]) {
|
||||
translate(s1_pos) lid_screw_hole();
|
||||
translate(s2_pos) lid_screw_hole();
|
||||
translate(s3_pos) lid_screw_hole();
|
||||
translate(s4_pos) lid_screw_hole();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module enclosure() {
|
||||
|
||||
|
||||
intersection() {
|
||||
//translate([-pcb_width, -40, 0]) cube (35, 20, 20);
|
||||
//translate([-pcb_width-15, 0, 0]) base();
|
||||
};
|
||||
|
||||
|
||||
intersection() {
|
||||
//translate([-alot/2, -10, -alot/2]) cube ([alot, 20, alot]);
|
||||
union () {
|
||||
render() lid();
|
||||
|
||||
render() translate([0,0,eps]) mirror([0,0,1]) intersection() {
|
||||
translate([-alot/2, -alot/2, 0]) cube([alot, alot, alot]);
|
||||
translate([0,0,-0.2]) scale([0.3, 0.3, 0.04]) surface("depthmap_03.png", center=true);
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
enclosure($fn=25);
|
||||
233
enclosure/lyza/lyza_enclosure_v2.scad
Normal file
233
enclosure/lyza/lyza_enclosure_v2.scad
Normal file
|
|
@ -0,0 +1,233 @@
|
|||
|
||||
/* A small, arbitrary unit to guard against rounding errors */
|
||||
eps = 0.1;
|
||||
alot = 1000;
|
||||
|
||||
/* Base PCB size */
|
||||
pcb_width = 50;
|
||||
pcb_height = 70;
|
||||
/* Extra space around PCB */
|
||||
pcb_extra = 1;
|
||||
|
||||
/* Offset of screw hole centers from left/right/top/bottom side of board */
|
||||
screw_offx_l = 5;
|
||||
screw_offx_r = 5;
|
||||
screw_offx_t = 5;
|
||||
screw_offx_b = 5;
|
||||
|
||||
/* Thickness of bottom, walls, lid (middle sections) */
|
||||
bottom_thickness = 2;
|
||||
wall_thickness = 2;
|
||||
lid_thickness = 2;
|
||||
|
||||
/* Outside corner radius */
|
||||
corner_radius_wall = 3;
|
||||
corner_radius_lid = 2;
|
||||
|
||||
screw_base_dia = 8;
|
||||
screw_base_h = 5;
|
||||
screw_nut_dia = 5.4;
|
||||
screw_nut_h = 6;
|
||||
screw_hole_dia = 3.2;
|
||||
screw_hole_h = 6;
|
||||
board_thickness = 1.6;
|
||||
height_above_board = 18;
|
||||
height_lid_inner = 2;
|
||||
lid_lip_depth = 2;
|
||||
lid_lip_width = 2;
|
||||
lid_lip_extra = 1;
|
||||
|
||||
clamp_tube_dia = screw_base_dia;
|
||||
clamp_tube_h = 0; //height_above_board+height_lid_inner;
|
||||
clamp_tube_base_extra = 2;
|
||||
|
||||
screw_head_hole_dia = 6.5;
|
||||
screw_head_hole_depth = 3;
|
||||
|
||||
module rounded_rect(w, h, r) {
|
||||
hull(){
|
||||
translate([w/2-r, h/2-r]) circle(r);
|
||||
translate([-(w/2-r), h/2-r]) circle(r);
|
||||
translate([w/2-r, -(h/2-r)]) circle(r);
|
||||
translate([-(w/2-r), -(h/2-r)]) circle(r);
|
||||
}
|
||||
}
|
||||
|
||||
module shell(thickness, inner_height, inner_extra, radius_horiz) {
|
||||
d = thickness + inner_height;
|
||||
rh=radius_horiz;
|
||||
difference(){
|
||||
r = corner_radius_wall;
|
||||
w = pcb_width+pcb_extra+2*wall_thickness;
|
||||
h = pcb_height+pcb_extra+2*wall_thickness;
|
||||
hull() {
|
||||
translate([0, 0, rh]) linear_extrude(height=d-rh) rounded_rect(w, h, r);
|
||||
linear_extrude(height=eps) rounded_rect(w-2*rh, h-2*rh, r);
|
||||
}
|
||||
|
||||
iw = pcb_width+inner_extra;
|
||||
ih = pcb_height+inner_extra;
|
||||
translate([-iw/2, -ih/2, bottom_thickness]) cube([iw, ih, h]);
|
||||
}
|
||||
}
|
||||
|
||||
module single_screw_base() {
|
||||
translate([0, 0, bottom_thickness-eps]) linear_extrude(height=screw_base_h+eps) {
|
||||
circle(d=screw_base_dia);
|
||||
translate([-screw_base_dia/2, 0]) square([alot, alot]);
|
||||
translate([0, -screw_base_dia/2]) square([alot, alot]);
|
||||
}
|
||||
}
|
||||
|
||||
w = pcb_width;
|
||||
h = pcb_height;
|
||||
e = pcb_extra;
|
||||
l = screw_offx_l;
|
||||
r = screw_offx_r;
|
||||
t = screw_offx_t;
|
||||
b = screw_offx_b;
|
||||
s1_pos = [w/2-l, h/2-b];
|
||||
s2_pos = [-w/2+r, -h/2+t];
|
||||
s3_pos = [w/2-l, -h/2+t];
|
||||
s4_pos = [-w/2+r, h/2-b];
|
||||
module screw_bases() {
|
||||
intersection() {
|
||||
union() {
|
||||
translate(s1_pos) single_screw_base();
|
||||
translate(s2_pos) mirror([1,1,0]) single_screw_base();
|
||||
translate(s3_pos) mirror([0,1,0]) single_screw_base();
|
||||
translate(s4_pos) mirror([1,0,0]) single_screw_base();
|
||||
}
|
||||
cube([w+e+eps, h+e+eps, alot], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
module single_screw_hole() {
|
||||
translate([0, 0, bottom_thickness+screw_base_h+eps])
|
||||
mirror([0,0,1])
|
||||
union() {
|
||||
cylinder(h=screw_nut_h+eps, d=screw_nut_dia);
|
||||
cylinder(h=screw_hole_h+eps, d=screw_hole_dia);
|
||||
}
|
||||
}
|
||||
|
||||
module screw_holes() {
|
||||
translate(s1_pos) single_screw_hole();
|
||||
translate(s2_pos) mirror([1,1,0]) single_screw_hole();
|
||||
translate(s3_pos) mirror([0,1,0]) single_screw_hole();
|
||||
translate(s4_pos) mirror([1,0,0]) single_screw_hole();
|
||||
}
|
||||
|
||||
conn_1_y = 12.0;
|
||||
conn_1_l = 20.0;
|
||||
conn_1_h = 7;
|
||||
conn_2_y = conn_1_y+conn_1_l+6.0;
|
||||
conn_2_l = conn_1_l;
|
||||
conn_2_h = conn_1_h;
|
||||
conn_pwr_y = 12.5;
|
||||
conn_pwr_l = 10.0;
|
||||
conn_pwr_h = 10;
|
||||
conn_extra = 1;
|
||||
module conn_holes() {
|
||||
e = conn_extra;
|
||||
translate([0, -e/2, -e/2])
|
||||
translate([0, 0, bottom_thickness+screw_base_h+board_thickness])
|
||||
translate([-pcb_width/2, -pcb_height/2]) {
|
||||
translate([-alot, conn_1_y]) cube([alot, conn_1_l+e, conn_1_h+e]);
|
||||
translate([-alot, conn_2_y]) cube([alot, conn_2_l+e, conn_2_h+e]);
|
||||
translate([0, conn_pwr_y]) cube([alot, conn_pwr_l+e, conn_pwr_h+e]);
|
||||
}
|
||||
}
|
||||
|
||||
module base() {
|
||||
difference() {
|
||||
union() {
|
||||
screw_bases();
|
||||
shell(bottom_thickness,
|
||||
screw_base_h + board_thickness + height_above_board,
|
||||
pcb_extra,
|
||||
radius_horiz=0);
|
||||
}
|
||||
screw_holes();
|
||||
conn_holes();
|
||||
}
|
||||
}
|
||||
|
||||
module single_clamp_stud_part(liph, clamp_tube_h, extra) {
|
||||
translate([0, 0, lid_thickness-eps]) union() {
|
||||
cylinder(h=clamp_tube_h, d=clamp_tube_dia+extra);
|
||||
linear_extrude(height=liph+eps) {
|
||||
translate([-clamp_tube_dia/2-extra/2, 0]) square([alot, alot]);
|
||||
translate([0, -clamp_tube_dia/2-extra/2]) square([alot, alot]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module single_clamp_stud(liph) {
|
||||
e = clamp_tube_base_extra;
|
||||
single_clamp_stud_part(liph, liph+eps, e);
|
||||
single_clamp_stud_part(liph, clamp_tube_h, 0);
|
||||
}
|
||||
|
||||
module lid_screw_hole() {
|
||||
cylinder(h=alot, d=screw_hole_dia);
|
||||
cylinder(h=screw_head_hole_depth+eps, d=screw_head_hole_dia);
|
||||
}
|
||||
|
||||
module lid() {
|
||||
e = lid_lip_extra;
|
||||
iw = pcb_width+pcb_extra-e+eps;
|
||||
ih = pcb_height+pcb_extra-e+eps;
|
||||
liph = lid_lip_depth+height_lid_inner;
|
||||
difference() {
|
||||
union() {
|
||||
shell(lid_thickness,
|
||||
height_lid_inner,
|
||||
inner_extra=-eps,
|
||||
radius_horiz=corner_radius_lid);
|
||||
difference() {
|
||||
translate([-iw/2, -ih/2, lid_thickness-eps]) cube([iw, ih, liph+eps]);
|
||||
// FIXME translate([-iw/2+e/2, -ih/2+e/2, lid_thickness-eps]) cube([iw-e, ih-e, liph+2*eps]);
|
||||
}
|
||||
intersection() {
|
||||
translate([-iw/2, -ih/2, lid_thickness-eps]) cube([iw, ih, alot]);
|
||||
union() {
|
||||
translate(s1_pos) single_clamp_stud(liph);
|
||||
translate(s2_pos) mirror([1,1,0]) single_clamp_stud(liph);
|
||||
translate(s3_pos) mirror([0,1,0]) single_clamp_stud(liph);
|
||||
translate(s4_pos) mirror([1,0,0]) single_clamp_stud(liph);
|
||||
}
|
||||
}
|
||||
}
|
||||
translate([0, 0, -eps]) {
|
||||
translate(s1_pos) lid_screw_hole();
|
||||
translate(s2_pos) lid_screw_hole();
|
||||
translate(s3_pos) lid_screw_hole();
|
||||
translate(s4_pos) lid_screw_hole();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module enclosure() {
|
||||
|
||||
|
||||
intersection() {
|
||||
//translate([-pcb_width, -40, 0]) cube (35, 20, 20);
|
||||
translate([-pcb_width-15, 0, 0]) base();
|
||||
};
|
||||
|
||||
/*
|
||||
intersection() {
|
||||
//translate([-alot/2, -10, -alot/2]) cube ([alot, 20, alot]);
|
||||
union () {
|
||||
render() lid();
|
||||
render() translate([0,0,eps]) mirror([0,0,1]) intersection() {
|
||||
translate([-alot/2, -alot/2, 0]) cube([alot, alot, alot]);
|
||||
translate([0,0,-0.2]) scale([0.3, 0.3, 0.04]) surface("depthmap_03.png", center=true);
|
||||
};
|
||||
};
|
||||
};
|
||||
*/
|
||||
}
|
||||
|
||||
enclosure($fn=25);
|
||||
17
enclosure/lyza/standoffs.scad
Normal file
17
enclosure/lyza/standoffs.scad
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
inner_dia = 3.0;
|
||||
outer_dia = inner_dia + 2*1.5;
|
||||
height = 18.0;
|
||||
eps = 0.1;
|
||||
|
||||
module standoff() {
|
||||
difference() {
|
||||
cylinder(h=height, d=outer_dia);
|
||||
translate([0, 0, -eps]) cylinder(h=height+2*eps, d=inner_dia);
|
||||
}
|
||||
}
|
||||
|
||||
module standoff_group() {
|
||||
standoff();
|
||||
}
|
||||
|
||||
standoff_group($fn=25);
|
||||
BIN
enclosure/lyza/test.blend
Normal file
BIN
enclosure/lyza/test.blend
Normal file
Binary file not shown.
68
enclosure/rails/openstep_base.scad
Normal file
68
enclosure/rails/openstep_base.scad
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
eps=0.01;
|
||||
|
||||
nut_dia = 5.3;
|
||||
nut_depth=5.5;
|
||||
|
||||
module nut_base(w=10, o) {
|
||||
difference() {
|
||||
cylinder(d=w, h=nut_depth+o);
|
||||
translate([0, 0, o-eps]) cylinder(d=nut_dia, h=nut_depth+2*eps);
|
||||
}
|
||||
}
|
||||
|
||||
module raspi_holder(w, h, x=4) {
|
||||
difference() {
|
||||
union() {
|
||||
cube([50+w, 50+w, h]);
|
||||
|
||||
translate([w/2, w/2, 0]) union() {
|
||||
nut_base(o=h);
|
||||
translate([50, 0, 0]) {
|
||||
nut_base(o=h);
|
||||
translate([0, 50, 0]) nut_base(o=h);
|
||||
}
|
||||
translate([0, 50, 0]) nut_base(o=h);
|
||||
}
|
||||
}
|
||||
translate([w, w, -eps]) cube([50-w, 50-w, h+2*eps]);
|
||||
|
||||
|
||||
translate([w/2, w/2, -eps]) {
|
||||
cylinder(d=x, h=h+2*eps);
|
||||
translate([50, 0, 0]) {
|
||||
cylinder(d=x, h=h+2*eps);
|
||||
translate([0, 50, 0]) cylinder(d=x, h=h+2*eps);
|
||||
}
|
||||
translate([0, 50, 0]) cylinder(d=x, h=h+2*eps);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module rev_nut_base(w=10, h=5, a=45, x=4, th=7, tw=10) {
|
||||
rotate([0, 0, a])
|
||||
translate([-w/2, -w, 0]) difference() {
|
||||
union() {
|
||||
cube([w, w, h]);
|
||||
translate([w/2, w, 0]) cylinder(d=tw, h=th);
|
||||
}
|
||||
translate([w/2, w, -eps]) {
|
||||
cylinder(d=nut_dia, h=nut_depth+2*eps);
|
||||
cylinder(d=x, h=th+2*eps);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module raspi_adapter(w=10, h=5, s=30) {
|
||||
translate([-(50+w)/2, -(50+w)/2, 0]) raspi_holder(w=w, h=h);
|
||||
difference() {
|
||||
union() {
|
||||
translate([-s, -(50+w)/2-5, 0]) rev_nut_base(a=-30-180);
|
||||
translate([ s, -(50+w)/2-5, 0]) rev_nut_base(a=-60-90);
|
||||
translate([-s, (50+w)/2+5, 0]) rev_nut_base(a=-60+90);
|
||||
translate([ s, (50+w)/2+5, 0]) rev_nut_base(a=-30);
|
||||
}
|
||||
cube([60, 60, 100], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
raspi_adapter($fn=25);
|
||||
68
enclosure/rails/raspi_adapter.scad
Normal file
68
enclosure/rails/raspi_adapter.scad
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
eps=0.01;
|
||||
|
||||
nut_dia = 5.3;
|
||||
nut_depth=5.5;
|
||||
|
||||
module nut_base(w=10, o) {
|
||||
difference() {
|
||||
cylinder(d=w, h=nut_depth+o);
|
||||
translate([0, 0, o-eps]) cylinder(d=nut_dia, h=nut_depth+2*eps);
|
||||
}
|
||||
}
|
||||
|
||||
module raspi_holder(w, h, x=4) {
|
||||
difference() {
|
||||
union() {
|
||||
cube([58+w, 49+w, h]);
|
||||
|
||||
translate([w/2, w/2, 0]) union() {
|
||||
nut_base(o=h);
|
||||
translate([58, 0, 0]) {
|
||||
nut_base(o=h);
|
||||
translate([0, 49, 0]) nut_base(o=h);
|
||||
}
|
||||
translate([0, 49, 0]) nut_base(o=h);
|
||||
}
|
||||
}
|
||||
translate([w, w, -eps]) cube([58-w, 49-w, h+2*eps]);
|
||||
|
||||
|
||||
translate([w/2, w/2, -eps]) {
|
||||
cylinder(d=x, h=h+2*eps);
|
||||
translate([58, 0, 0]) {
|
||||
cylinder(d=x, h=h+2*eps);
|
||||
translate([0, 49, 0]) cylinder(d=x, h=h+2*eps);
|
||||
}
|
||||
translate([0, 49, 0]) cylinder(d=x, h=h+2*eps);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module rev_nut_base(w=10, h=5, a=45, x=4, th=7, tw=10) {
|
||||
rotate([0, 0, a])
|
||||
translate([-w/2, -w, 0]) difference() {
|
||||
union() {
|
||||
cube([w, w, h]);
|
||||
translate([w/2, w, 0]) cylinder(d=tw, h=th);
|
||||
}
|
||||
translate([w/2, w, -eps]) {
|
||||
cylinder(d=nut_dia, h=nut_depth+2*eps);
|
||||
cylinder(d=x, h=th+2*eps);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module raspi_adapter(w=10, h=5, s=30) {
|
||||
translate([-(58+w)/2, -(49+w)/2, 0]) raspi_holder(w=w, h=h);
|
||||
difference() {
|
||||
union() {
|
||||
translate([-s, -(49+w)/2-5, 0]) rev_nut_base(a=-15-180);
|
||||
translate([ s, -(49+w)/2-5, 0]) rev_nut_base(a=-75-90);
|
||||
translate([-s, (49+w)/2+5, 0]) rev_nut_base(a=-75+90);
|
||||
translate([ s, (49+w)/2+5, 0]) rev_nut_base(a=-15);
|
||||
}
|
||||
cube([64, 55, 100], center=true);
|
||||
}
|
||||
}
|
||||
|
||||
raspi_adapter($fn=25);
|
||||
43
enclosure/rails/rs485_base.scad
Normal file
43
enclosure/rails/rs485_base.scad
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
eps=0.01;
|
||||
|
||||
nut_dia = 5.3;
|
||||
nut_depth=5.5;
|
||||
|
||||
bx=71.12;
|
||||
by=35.56;
|
||||
|
||||
w=8;
|
||||
h=5;
|
||||
s=30;
|
||||
d=w;
|
||||
bh=8;
|
||||
sd=4;
|
||||
|
||||
module qc(a, b, d, h) {
|
||||
translate([-a, -b, 0]) cylinder(d=d, h=h);
|
||||
translate([-a, b, 0]) cylinder(d=d, h=h);
|
||||
translate([ a, -b, 0]) cylinder(d=d, h=h);
|
||||
translate([ a, b, 0]) cylinder(d=d, h=h);
|
||||
}
|
||||
|
||||
module foo() {
|
||||
difference() {
|
||||
union() {
|
||||
translate([0, by/2, h/2]) cube([2*s+w, w, h], center=true);
|
||||
translate([0, -by/2, h/2]) cube([2*s+w, w, h], center=true);
|
||||
translate([-bx/2, 0, h/2]) cube([w, by, h], center=true);
|
||||
translate([bx/2, 0, h/2]) cube([w, by, h], center=true);
|
||||
|
||||
qc(a=bx/2, b=by/2, d=d, h=bh);
|
||||
qc(a=s, b=by/2, d=d, h=bh);
|
||||
}
|
||||
translate([0, 0, -eps]) {
|
||||
qc(a=bx/2, b=by/2, d=sd, h=bh+2*eps);
|
||||
qc(a=s, b=by/2, d=sd, h=bh+2*eps);
|
||||
translate([0, 0, bh-nut_depth+eps]) qc(a=bx/2, b=by/2, d=nut_dia, h=nut_depth+eps);
|
||||
qc(a=s, b=by/2, d=nut_dia, h=nut_depth+eps);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foo($fn=25);
|
||||
Loading…
Add table
Add a link
Reference in a new issue