From 9d1d76dcc825cc49799454c57e6f98d15ca10f09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gy=C3=B6rgy=20Kurucz?= <gyuri@sajt.pw> Date: Mon, 24 Jun 2019 21:55:06 +0200 Subject: [PATCH] Add sd_card_holder model. Add helper script. --- .gitignore | 1 + dump_csg.sh | 11 +++ include/common_objects.scad | 2 + include/screw.scad | 4 +- src/pill_box.scad | 4 +- src/rpi_case.scad | 12 ++-- src/sd_card_holder.scad | 139 ++++++++++++++++++++++++++++++++++++ src/tablet_holder.scad | 2 +- 8 files changed, 167 insertions(+), 8 deletions(-) create mode 100644 .gitignore create mode 100755 dump_csg.sh create mode 100644 include/common_objects.scad create mode 100644 src/sd_card_holder.scad diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1fcb152 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +out diff --git a/dump_csg.sh b/dump_csg.sh new file mode 100755 index 0000000..52076ac --- /dev/null +++ b/dump_csg.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +dir=out/${1:-default} +mkdir -p $dir + +for file in $(find src -type f -name '*.scad'); do + a=${file##*/} + b=$dir/${a%.scad}.csg + printf 'CSG %s -> %s\n' $file $b + openscad $file --hardwarnings -o $b +done diff --git a/include/common_objects.scad b/include/common_objects.scad new file mode 100644 index 0000000..d0d5c67 --- /dev/null +++ b/include/common_objects.scad @@ -0,0 +1,2 @@ +co_sd_card = [32, 24, 2.1]; +co_usd_card = [15, 11, 1]; diff --git a/include/screw.scad b/include/screw.scad index 8cf45a0..c9ddf7f 100644 --- a/include/screw.scad +++ b/include/screw.scad @@ -49,6 +49,8 @@ module _screw_thread(N=10, R=10, R_min=12, R_maj=15, P=3, taper=true) { ); } +function metric_screw_d_min(P, D_maj, tol=0) = 2 * (D_maj/2+tol-5/16*sqrt(3)*P); + /* P: pitch D_maj: major diameter @@ -58,7 +60,7 @@ module _screw_thread(N=10, R=10, R_min=12, R_maj=15, P=3, taper=true) { */ module metric_screw(P=3, D_maj=14, tol=0, h=30, taper=true) { R_maj=D_maj/2+tol; - R_min=R_maj-5/16*sqrt(3)*P; + R_min=metric_screw_d_min(P, D_maj, tol) / 2; R=R_min-sqrt(3)/8*P; N=ceil(h/P); intersection() { diff --git a/src/pill_box.scad b/src/pill_box.scad index 6fd6fd0..a30e303 100644 --- a/src/pill_box.scad +++ b/src/pill_box.scad @@ -1,4 +1,4 @@ -use </home/kgy/repos/3d_models/include/screw.scad>; +use <../include/screw.scad>; slots=8; r=40; @@ -121,4 +121,4 @@ module segment() { ]); } } -} \ No newline at end of file +} diff --git a/src/rpi_case.scad b/src/rpi_case.scad index 1804ae4..53bf850 100644 --- a/src/rpi_case.scad +++ b/src/rpi_case.scad @@ -124,12 +124,16 @@ module case_top() { } } rpi(5); - translate([pcb.x/2, pcb.y/2, space_below+pcb.z + space_above + corner_r - corner_r/2]) linear_extrude(h=corner_r) text("rPi", halign="center", valign="center", font="DejaVu Sans Mono", size=17); + translate([pcb.x/2, pcb.y/2, space_below+pcb.z + space_above + corner_r - corner_r/2]) linear_extrude(corner_r) text("rPi", halign="center", valign="center", font="DejaVu Sans Mono", size=17); } case_lip(1, 0.3); pillars_top(); } -//rpi(); -//case_bottom(); -translate([0, 0, 10]) rotate([180, 0, 0]) case_top(); \ No newline at end of file +module canonical() { +translate([0,10,corner_r]) case_bottom(); +translate([0, 0, space_below + pcb.z + space_above + corner_r]) rotate([180, 0, 0]) case_top(); +translate([0,pcb.y + 20,0]) rpi(); +} + +canonical(); diff --git a/src/sd_card_holder.scad b/src/sd_card_holder.scad new file mode 100644 index 0000000..1f0fc43 --- /dev/null +++ b/src/sd_card_holder.scad @@ -0,0 +1,139 @@ +use <../include/screw.scad>; +include <../include/common_objects.scad>; + +module flower2(r = 10, v = .2, n = 15) { + function rfn(a) = r - abs(sin(a*n))*v; + polygon([ for (i=[0:0.25:359.9999]) + [ cos(i)*rfn(i), sin(i)*rfn(i) ] ]); +} + +s_sd = co_sd_card + [.7, .5, .5]; +s_usd = co_usd_card + [.5, .5, .4]; +s_ad = [12, 25.1, 2.7] + [.4, .4, .3]; + +/*function n_parents(s, i = 0) = i < $parent_modules ? +n_parents(s, i + 1) + (parent_module(i) == s ? 1 : 0) : + 0;*/ + +/* + R: outside radius + r: inside radius + h: total outside height + w: top wall thickness + g: inside gap +*/ +module screw_box(R = 10, r = -1, h = 10, w = 1, g = 0, + txt = "", txt_size = 0) { + h2 = h / 2; + _r = r < 0 ? R * 0.9 : r; + P = (h2-w-g)/2; + tol = 0.7; + d_min = metric_screw_d_min(P = P, D_maj = 2*_r, + tol = tol); + module shape() { flower2(r = R, v = R * 0.025); } + module screw(tol = 0) { + intersection() { + translate([0,0,h-w-g]) + rotate([180,0,0]) + metric_screw(P=P, + D_maj=_r*2,tol=tol,taper=true); + translate([-R,-R,0]) + cube([R*2,R*2, h-w]); + } + } + module base() { + intersection() { + union() { + linear_extrude(h2) shape(); + screw(); + } + corner_r = 6; + minkowski() { + translate([0,0,corner_r]) + cylinder(r=R - corner_r, h=h, $fn=70); + sphere(r=corner_r, $fn=50); + } + } + } + module cap() { + difference() { + translate([0,0,h2]) linear_extrude(h2) + shape(); + screw(tol = 0.7); + cylinder(d=d_min, h = h-w, $fn=100); + translate([0,0,h-w/2]) linear_extrude(w) + text(txt, halign="center", + valign="center", size=txt_size); + } + } + /* cap = n_parents("mark_cap") > 0; + flat = n_parents("mark_flat") > 0; + aside = n_parents("mark_aside") > 0; */ + cap = !is_undef($mark_cap); + flat = !is_undef($mark_flat); + aside = !is_undef($mark_aside); + translate([aside ? 2*R : 0, 0, 0]) + if (!cap) { base(); } else { + if (flat) { + translate([0,0,h]) rotate([180,0,0]) cap(); + } else { cap(); } + } +} + +/*module mark_cap() { children(); } +module mark_flat() { children(); } +module mark_aside() { children(); }*/ + +module screw_box_params() { + screw_box(R = 22.5, h = s_sd.y + 2.5, g = 3, + txt = "SD cards", txt_size = 7.5); +} + +module sd_cards() { + g = 3; + G = 2; + module sd() { + translate([-s_sd.x/2,-G/2,1]) + rotate([90,0,0]) cube(s_sd); + } + module usd() { + translate([-g/2 + s_usd.z/2, + s_sd.z + 1, + s_sd.y - s_usd.x + 1]) + rotate([0,-90,0]) cube(s_usd); + } + module usds() { for (i = [0:2]) + translate([-g*i,0,0]) usd(); } + module usdss() { mirror([1,0,0]) usds(); usds(); } + usdss(); + translate([0,-1,0]) { + sd(); + mirror([0,1,0]) sd(); + translate([s_ad.y/2, -5.5, s_sd.y - s_ad.x + 1]) + rotate([0,-90,90]) cube(s_ad); + } + + //translate([0,-1,26]) scale([1,1.3,1]) sphere(r=10, $fn=100); + translate([0,0,33]) sphere(r=19, $fn=100); +} + +module base() { + difference() { screw_box_params(); sd_cards(); } +} +module cap() { + $mark_cap = true; + screw_box_params(); +} + +module assembled() { + base(); + translate([0,0,.1]) cap(); +} + +module print() { + translate([1,0,0]) { + $mark_aside = true; $mark_flat = true; cap(); } + base(); +} + +print(); diff --git a/src/tablet_holder.scad b/src/tablet_holder.scad index fdfb88c..3fcb53e 100644 --- a/src/tablet_holder.scad +++ b/src/tablet_holder.scad @@ -1,4 +1,4 @@ -use <../../include/rounded_square.scad>; +use <../include/rounded_square.scad>; wall_t = 5; //wall thickness wall_front = 19-2; //wall height on the front -- GitLab