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