3d-stuff/openscad/own/camp-capsule/capsule.scad

189 lines
6.6 KiB
OpenSCAD

// =====================================================
// Seidenstrasse Specs according to CCC-Congress-Wiki:
// minimal: maximal: optimal:
// Diameter:75mm 90mm 85mm
// Length: 100mm 220mm 180mm
// Weight: >0g 550g 250g
//=====================================================
// by zeus - zeus@ctdo.de - CC-BY-NC-4.0
// -> https://www.thingiverse.com/zeus
// -> https://github.com/zeus86
// 2015-08-05
// =====================================================
// DEFINITIONS
// =====================================================
// Capsule itself
h_overall=200;
h_velcro=15;
h_bulk=30;
d_bulk=85;
d_middle=67;
mt=3;
d_inner=d_middle-2*mt;
// holes for mounting some LED-Stripes
led_pos_t=1; //ledstripe near top
led_pos_m=0; //ledstripe near middle
led_pos_b=1; //ledstripe near bottom
cable_holes=1; // 1=yes, 0=no
cablehole_dia=3;
cablehole_width=2; // multiplicator to the diameter, e.g. 3 means the hole is 9 wide when its height it 3, must be >=1
ziptie_holes=1; // 1=yes, 0=no
ziptiehole_dia=2;
ziptiehole_width=3; // multiplicator to the diameter, e.g. 3 means the hole is 9 wide when its height it 3 , must be >=1
ledstripe_width=12; // in mm
// Screws
scr_hole_num=3;
scr_bighole_dia=8;
scr_body_dia=4;
scr_top_dia=4.3;
scr_block_w=11+mt;
scr_block_d=scr_block_w;
// Insert
insert=1; //1=yes
ins_gap=2.5;
ins_mt=1.5;
ins_wall_offset=4;
ins_height=105; //should be enought for raspberry PIs and most arduinos
ins_h_offset=40; //z-offset from middle
ins_v_offset=10; //vertical offset from middle (i assume otherwise a PI won't fit without because of its height)
// Top
h_top=50;
top_cam_hole=1; // 1=yes
top_cam_hole_dia=12;
// Modules
// ====================================================
module bulk(){
$fn=100;
difference(){
hull() {
cylinder(r=d_middle/2+(mt*1.5),h=1,center=true);
translate([0,0,h_bulk/2])cylinder(r=d_bulk/2,h=h_velcro,center=true);
translate([0,0,h_bulk])cylinder(r=d_middle/2,h=1,center=true);
}
translate([0,0,h_bulk/2+mt/2])cylinder(h=h_bulk,r=d_inner/2,center=true);
}
}
// ====================================================
module blockring(){
$fn=100;
intersection(){
hull() {
cylinder(r=d_middle/2,h=1,center=true);
translate([0,0,h_bulk/2])cylinder(r=d_bulk/2,h=h_velcro,center=true);
}
for (x = [0,120,240]){
rotate([0,0,x]){
translate([d_bulk/2-scr_block_w/2,0,((h_bulk-h_velcro)/2+h_velcro)/2]){
difference(){
cube([scr_block_w,scr_block_d,(h_bulk-h_velcro)/2+h_velcro],center=true);
translate([0,0,(h_bulk-h_velcro)/3]) cylinder(r=scr_body_dia/2,h=h_velcro,center=true);
}
}
}
}
}
}
// ====================================================
module top(){
$fn=100;
difference(){
bulk();
translate([0,0,h_bulk/2+h_velcro/2+mt/4]) cylinder(h=h_bulk,r=d_middle/2+1.5,center=true);
for (x = [0, 120,240])rotate([0,0,x]){
translate([d_bulk/2-scr_block_w/2,0,((h_bulk-h_velcro)/2+h_velcro)/2]) cylinder(r=scr_top_dia/2,h=h_bulk,center=true);
translate([d_bulk/2-scr_block_w/2,0,mt/2]) cylinder(r=scr_bighole_dia/2,h=(h_bulk-h_velcro)/2,center=true);
translate([d_bulk/2-scr_block_w/2,0,(h_bulk-h_velcro/2-3)]) cube([scr_block_w,scr_block_d+0.5,h_bulk-h_velcro/2],center=true);
}
}
}
// ====================================================
module insert(){
difference(){
union(){
hull(){
translate([d_inner/2-ins_wall_offset,0,0])cube([1,2*ins_mt+ins_gap,ins_height+1],center=true);
translate([d_inner/2,0,-ins_wall_offset])cube([1,2*ins_mt+ins_gap,ins_height+1+ins_wall_offset*2],center=true);
}
hull(){
translate([-d_inner/2+ins_wall_offset,0,0])cube([1,2*ins_mt+ins_gap,ins_height+1],center=true);
translate([-d_inner/2,0,-ins_wall_offset])cube([1,2*ins_mt+ins_gap,ins_height+1+ins_wall_offset*2],center=true);
}
}
translate([0,0,1])cube([d_inner,ins_gap,ins_height],center=true);
}
}
//insert();
// ====================================================
module cableholes(){
$fn=50;
rotate([90,0,0]){
hull(){
translate([0,-cablehole_dia*(cablehole_width-1)/2,0])cylinder(r=cablehole_dia/2,h=d_bulk,center=true);
translate([0,cablehole_dia*(cablehole_width-1)/2,0])cylinder(r=cablehole_dia/2,h=d_bulk,center=true);
}
}
}
// ====================================================
module singletie(){
$fn=50;
rotate([90,90,0]){
hull(){
translate([ledstripe_width/2,-ziptiehole_dia*(ziptiehole_width-1)/2,0])cylinder(r=ziptiehole_dia/2,h=d_bulk,center=true);
translate([ledstripe_width/2,ziptiehole_dia*(ziptiehole_width-1)/2,0])cylinder(r=ziptiehole_dia/2,h=d_bulk,center=true);
}
hull(){
translate([-ledstripe_width/2,-ziptiehole_dia*(ziptiehole_width-1)/2,0])cylinder(r=ziptiehole_dia/2,h=d_bulk,center=true);
translate([-ledstripe_width/2,ziptiehole_dia*(ziptiehole_width-1)/2,0])cylinder(r=ziptiehole_dia/2,h=d_bulk,center=true);
}
}
}
// ====================================================
module ziptieholes(){
rotate([0,0,45])singletie();
rotate([0,0,-45])singletie();
}
// ====================================================
module holes(){
if (cable_holes == 1) { cableholes(); }
if (ziptie_holes == 1) { ziptieholes(); }
}
// ====================================================
module centerpart(){
$fn=50;
translate([0,0,-(h_overall/2-mt/2)]) bulk();
difference(){
union(){
cylinder(r=d_middle/2,h=h_overall-mt,center=true);
translate([0,0,h_overall/2-h_bulk*0.8]) blockring();
}
translate([0,0,mt/2]) cylinder(r=d_inner/2,h=h_overall-mt*2+0.1,center=true, $fn=32);
if (led_pos_t == 1){
translate([0,0,h_overall/4+ledstripe_width/2])holes(); }
if (led_pos_b == 1){
translate([0,0,-h_overall/4+ledstripe_width/2])holes(); }
if (led_pos_m == 1){
translate([0,0,ledstripe_width/2])holes(); }
}
if (insert == 1){
for (x = [ins_v_offset, -ins_v_offset]){
translate([0,x,ins_h_offset])insert();
}
}
}
// ====================================================
translate([0,0,h_overall/2-mt/2]) centerpart();
translate([0,0,h_overall+50])mirror([0,0,1]) top();