// Adjustable HDD-Spoolholder
// by zeus - zeus@ctdo.de - CC-BY-NC-4.0
// -> https://www.thingiverse.com/zeus
// -> https://github.com/zeus86
// 2020-10-31
// =====================================================================
// on the given measurements you'll need springs with approx. 5.5x17mm (
// some variables 
spool_id = 32; // outer diameter of the inner ring
total_h=8.5; //...of the disc-section
brim_w=150; // ...of the disc-section
brim_h=2.7; // baseplate height
spindle_dia=25.2; // inner diameter, the hdd-spindle-motor mount
slider_hole=3.25; //slot-width
slot_num=12; // number of slots
slot_num_slider=6; // number of sliders
angle = 360/slot_num; 
angle_slider = 360/slot_num_slider;
spring_dia=5.5; // diameter of the tension springs
spring_recess=1.75; // amount of indentation into the inner ring
slider_screw_dia=4;// for M3 brass insert
handle_thickness=3; // this lip grabs onto the inner side of the spool
handle_height=10; // height of mentioned lip
insert_h=8; // M3-insert is actually 5.7 in dia, but abit more won't hurt to give a stury base to the sliders

$fn=100;
// =====================================================================

module main_spool() {
    union() {
        cylinder(r=brim_w/2, h=brim_h);
        cylinder(r=spool_id/2, h=total_h);
    }
}

module hollow_center() {
    translate([0,0,-.5]) {
        cylinder(r=spindle_dia/2, h=total_h+1);
    }
}
module slot() {
    hull(){
        translate([brim_w/2-slider_hole,0,-0.1]){
            cylinder(r=slider_hole/2,h=brim_h+0.2);
        }
        translate([spool_id/2+slider_hole,0,-0.1]){
            cylinder(r=slider_hole/2,h=brim_h+0.2);
        }
    }
}
module spring_insert() {
    rotate([0,90,0]){
        translate([-(brim_h+spring_dia/2+0.1),0,spool_id/2-spring_recess]){
            cylinder(r=spring_dia/2,h=spool_id/2-spindle_dia/2);
        }
    }
}
module base() {
    difference() {
        main_spool();
        hollow_center();
        for (n=[1:slot_num]) rotate([0,0,(n-1)*angle]) slot();
        for (n=[1:slot_num]) rotate([0,0,(n-1)*angle]) spring_insert();            
    }
}

module slider() {
    difference(){
        union(){
            cylinder(r=brim_w/2,h=insert_h); //
            translate([0,0,total_h-brim_h])cylinder(r=spool_id/2+handle_thickness,h=handle_height); // handle
        }
        translate ([0,0,-0.1])cylinder(r=spool_id/2,h=total_h-brim_h+handle_height+0.2); // center cutout
        for (n=[1:slot_num_slider]) rotate([0,0,(n-1)*angle_slider])translate([-0.5,1,-0.1])cube([1,brim_w/2,total_h+handle_height]); // slits
        for (n=[1:2:slot_num]) rotate([0,0,(n)*angle])translate([0,brim_w/2-slider_hole*2,-0.1])cylinder(r=slider_screw_dia/2,h=insert_h+0.2); //outer insert hole
        for (n=[1:2:slot_num]) rotate([0,0,(n)*angle])translate([0,brim_w/3-slider_hole*2,-0.1])cylinder(r=slider_screw_dia/2,h=insert_h+0.2); //inner insert hole
        for (n=[1:2:slot_num]) rotate([0,0,(n-1)*angle]) translate ([spring_recess/2,0,-brim_h])spring_insert(); //scpring holes
   }

}
base();
//translate([0,0,brim_h+0.1])slider();
//translate([0,0,brim_h+0.1]){
//    difference(){
//        slider();
//        translate([0,0,-0.05])cube([brim_w,brim_w,total_h+handle_height]); //cross-section cube
//    }
//}