// ===================================================== // 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();