Files @ 3cb27b58edd5
Branch filter:

Location: Wearables/Neopixel-Respirator/3D_Models/Holder.scad

Dennis Fink
Added tag h0.1v0.1 for changeset 9b1a5d5af6f4
overall_outer_diameter = 75;
overall_thickness = 15;

neopixel_holder_thickness = 7.5;
translucent_disk_thickness = overall_thickness - neopixel_holder_thickness;

ring_24_outer_diameter = 65.6;
ring_24_inner_diameter = 52.3;

ring_12_outer_diameter = 36.8;
ring_12_inner_diameter = 23.3;

ring_thickness = 6.7;
ring_z_offset = neopixel_holder_thickness - ring_thickness;

channel_length = (ring_12_outer_diameter - ring_12_inner_diameter);
channel_position = (-ring_12_outer_diameter - ring_12_inner_diameter)/2;

cable_channel_width = (overall_outer_diameter/2 - ring_24_outer_diameter/2)/2;
cable_channel_position = (-overall_outer_diameter/2) + cable_channel_width;

alignment_pin_diameter = 2.5;
alignment_pin_height = neopixel_holder_thickness - 2.5;
alignment_pin_position = (-overall_outer_diameter/2) + alignment_pin_diameter;

$fn = 200;

module ring(h, od, id) {
    difference() {
        cylinder(h=h, d=od);
        cylinder(h=h, d=id);
    }
};

module channel() {    
    translate([channel_position, -1.25, ring_z_offset])
        cube([channel_length, 2.5, ring_thickness+1]);
    
    mirror([1, 0, 0])
        translate([channel_position, -1.25, ring_z_offset])
            cube([channel_length, 2.5, ring_thickness+1]);
    
    translate([cable_channel_position, 0, -1])
        cylinder(h=neopixel_holder_thickness+2, d=2.5);
    
    translate([cable_channel_position, -1.25, ring_z_offset])
        cube([cable_channel_width+0.1, 2.5, ring_thickness+0.1]);
};

module neopixel_holder() {
    alignment_pin_z_position = neopixel_holder_thickness - alignment_pin_height;
    
    difference () {
        
        cylinder(h=neopixel_holder_thickness, d=overall_outer_diameter);
        
        for (d=[[ring_24_outer_diameter, ring_24_inner_diameter], [ring_12_outer_diameter, ring_12_inner_diameter]])
            translate([0, 0, ring_z_offset])
                ring(h=ring_thickness+1, od=d[0], id=d[1]);
        
        channel();
        
        translate([-alignment_pin_position, 0, alignment_pin_z_position])
            cylinder(h=alignment_pin_height+0.1, d=alignment_pin_diameter);
        
        for (y=[alignment_pin_position, -alignment_pin_position])
            translate([0, y, alignment_pin_z_position])
                cylinder(h=alignment_pin_height+0.1, d=alignment_pin_diameter);
    };

};

module translucent_disk() {
    alignment_pin_diameter_l = alignment_pin_diameter - 0.1;
    cylinder(h=translucent_disk_thickness, d=overall_outer_diameter);
        
    translate([-alignment_pin_position, 0, translucent_disk_thickness])
        cylinder(h=alignment_pin_height, d=alignment_pin_diameter_l);
        
    for (y=[alignment_pin_position, -cable_channel_position])
        translate([0, y, translucent_disk_thickness])
            cylinder(h=alignment_pin_height, d=alignment_pin_diameter_l);
};

translate([-(overall_outer_diameter/2+1), 0, 0]) neopixel_holder();
translate([(overall_outer_diameter/2+1), 0, 0]) rotate([180, 180, 0]) translucent_disk();