189 lines
6.6 KiB
OpenSCAD
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();
|
|
|