$fn = 64; // --- Parameters --- // Hexagonal plug (sized for Honeycomb Storage Wall standard) hex_flat_to_flat = 11.4; hex_depth = 9; hex_radius = hex_flat_to_flat / sqrt(3); // Headphone hanger dimensions base_thick = 4; hook_width = 35; hook_radius = 4; module hex_plug() { // Tapered hex plug for easy insertion, overlapping slightly to ensure manifold translate([0.1, 0, 0]) rotate([0, -90, 0]) rotate([0, 0, 30]) cylinder(h=hex_depth + 0.1, r1=hex_radius, r2=hex_radius - 0.4, $fn=6); } module rounded_base() { // Flat rounded plate that rests against the wall for stability hull() { for(y = [-hook_width/2 + 2, hook_width/2 - 2]) { for(z = [-18, 12]) { translate([base_thick/2, y, z]) rotate([0, 90, 0]) cylinder(r=2, h=base_thick, center=true); } } } } module hanger_arm() { // Center coordinates defining the sweeping path of the hook p0 = [base_thick, 0, 10]; // Top of base attachment p1 = [base_thick, 0, -15]; // Bottom of base attachment p2 = [25, 0, -10]; // Start of resting bed p3 = [45, 0, -15]; // Middle of resting bed (dip for headband) p4 = [65, 0, -10]; // End of resting bed p5 = [75, 0, 5]; // Upward lip to prevent sliding // Construct the arm using hulls between points hull() { translate(p0) rotate([90, 0, 0]) cylinder(r=hook_radius, h=hook_width, center=true); translate(p1) rotate([90, 0, 0]) cylinder(r=hook_radius, h=hook_width, center=true); translate(p2) rotate([90, 0, 0]) cylinder(r=hook_radius, h=hook_width, center=true); } hull() { translate(p2) rotate([90, 0, 0]) cylinder(r=hook_radius, h=hook_width, center=true); translate(p3) rotate([90, 0, 0]) cylinder(r=hook_radius, h=hook_width, center=true); } hull() { translate(p3) rotate([90, 0, 0]) cylinder(r=hook_radius, h=hook_width, center=true); translate(p4) rotate([90, 0, 0]) cylinder(r=hook_radius, h=hook_width, center=true); } hull() { translate(p4) rotate([90, 0, 0]) cylinder(r=hook_radius, h=hook_width, center=true); translate(p5) rotate([90, 0, 0]) cylinder(r=hook_radius, h=hook_width, center=true); } } // --- Assembly --- // Best printed on its side for maximum arm strength (rotate 90 degrees in slicer) union() { hex_plug(); rounded_base(); hanger_arm(); }