use ; use ; $fn=50; gap = 0.24; screw_dia = 3; screw_gap = 0.6; screwhead_dia = 6; screwhead_hei = 3; screwhold_hei = 3.5; nutholder_dia = 5; nutholder_hei = 5; screwpos = 2; thickness = 1.2; sdiameter = 40; front = 4; devscrewhead_dia = 6; devscrew_dia = 4; module threaded_insert( s = undef, d = undef, l = undef) { if( 3==s) threaded_insert( d = 4.6 , l = 4.6); else if( 4==s) threaded_insert( d = 6.3 , l = 6.35); else if( 5==s) threaded_insert( d = 7.1 , l = 9.5); else if( 6==s) threaded_insert( d = 8.7 , l = 12.7); else if( 8==s) threaded_insert( d = 10.24, l = 12.7); else { assert( is_undef(s), "Unknown size (expected 3 for M3, ...) or manual (d,l)."); assert( is_num(d), "Diameter d (numeric) or size expected."); assert( is_num(l), "Length l (numeric) or size expected."); cylinder( d = d, h = l); } } module ledz( d=5, h=5) { /* tht_led_5mm(); translate([0,0,-screwhold_hei]) cylinder( d=6, h=screwhold_hei);*/ translate([0,0,-0.1]) cylinder( d=d+gap, h=h+0.1); translate([0,0,-h]) cylinder( d=d+gap+1, h=h); } rotate( [0, 0, 180]) translate( [0, 0, -2*thickness]) difference() { union() { intersection() { cylinder( d=sdiameter, h=2*thickness); translate( [0,-sdiameter/2,0]) cube( [sdiameter/2, sdiameter, 2*thickness]); } translate( [0,0,-screwhold_hei]) intersection() { cylinder( d=sdiameter, h=2*thickness+screwhold_hei); translate( [-thickness-gap,-sdiameter/2,0]) cube( [sdiameter/2+thickness+gap, sdiameter, 2*thickness+screwhold_hei]); hull() { translate( [screwpos, 0, 0]) cylinder( d=8, h=2*thickness+screwhold_hei); translate( [-thickness-gap, -8/2]) cube( [2+gap, 8, 2*thickness+screwhold_hei]); } } } // Platz hinter den Leds müssen hinten frei bleiben translate( [1, 0, 0]) union() { for( i = [-14 : 7 : 14]) if( 0 != i) translate( [3, i, 0]) { //tht_led_5mm(); /*translate([0,0,-0.1]) cylinder( d=5+gap, h=screwhold_hei+0.1); translate([0,0,-screwhold_hei]) cylinder( d=6, h=screwhold_hei);*/ ledz(); } for( i = [-10.5 : 7 : 10.5]) translate( [3+5.3, i, -1]) ledz(); for( i = [-6.5 : 6.5 : 6.5]) translate( [3+5.3+5.3, i, -1]) ledz(); } // screwhole mirror( [0, 0, 1]) translate( [screwpos, 0, -2*thickness]) { translate( [0, 0, -0.1]) cylinder( d=screw_dia+screw_gap, h=screwhold_hei+2*thickness+0.2); translate( [0, 0, -0.1]) cylinder( d=screwhead_dia+screw_gap, h=screwhead_hei+0.1); } } rotate( [0,-90,0]) translate( [0, 0, 0]) { h = 2*thickness + screwhold_hei + front + gap; translate( [0, 0, -h+front+gap]) { difference() { translate( [0,0,-gap]) intersection() { d = sdiameter+2*gap+2*thickness; cylinder( d=d, h=h+gap); translate( [-gap-thickness,-d/2,0]) cube( [d/2+gap+thickness, d, h+gap]); } translate( [0, 0, -0.1-gap]) intersection() { d = sdiameter+2*gap; cylinder( d=d, h=h+gap+0.2); translate( [-gap,-d/2,0]) cube( [d/2+gap, d, h+gap+0.2]); } d = thickness+gap; translate( [-d-0.1, -4-gap, -gap-0.1]) cube( [d+0.2, 8+2*gap, h+gap+0.2]); translate( [screwpos,0,0]) mirror([0,0,1]) threaded_insert(3); } difference() { translate( [-gap-thickness, 0, -thickness]) for( i = [0 : 1 : 90]) rotate( [0,i,0]) linear_extrude( 1) intersection() { d = sdiameter+2*gap+2*thickness; translate( [thickness+gap, 0]) circle( d=d); translate( [0, -d/2]) square( [d/2+gap+thickness, d]); } translate( [0, 0, -10]) rotate( [0, 90, 0]) { translate( [0,0,-thickness]) cylinder( d=devscrew_dia, h = 3*thickness, center = true); linear_extrude( 30) hull() { circle( d = devscrewhead_dia); translate( [30,0]) square( [1, devscrewhead_dia], center=true); } } translate( [screwpos,0,0]) mirror([0,0,1]) threaded_insert(3); } } translate( [0, 0, -2*thickness - gap - screwhold_hei]) { translate( [sdiameter/2-0.8, -6, 0]) cube( [1, 12, screwhold_hei]); for( i = [0, 1]) mirror( [0, i, 0]) translate( [-1, sdiameter/2 - 0.75, 0]) cube( [8, 1, screwhold_hei]); } }