diff --git a/openscad/own/kitt-matrix/src/kitt-matrix.scad b/openscad/own/kitt-matrix/src/kitt-matrix.scad new file mode 100644 index 0000000..eea936e --- /dev/null +++ b/openscad/own/kitt-matrix/src/kitt-matrix.scad @@ -0,0 +1,106 @@ +/* +Case for LED-Matrix of the KITT-Voice-Assistant +by zeus - 2024-08-17 - CC-BY-SA-NC-4.0 +https://git.kostianix.de/zeus/3d-stuff/src/branch/main/openscad/own/kitt-matrix +*/ + +// ########################################## +// VARS: +$fn=25; // overall render quality +q=0.01; // only used to get rid of visual glitches. can be set to 0 for productive exports. +mt=9; // material thickness, NOT overall thickness in case of a rim! +pt=3; // panel thickness +mt_inner=2; // constrained wall thickness for inside-walls between LEDs +panel_w=67; // overall width of led panel +panel_h=66; // same for height +panel_t_pcb=1.5; // height of PCB +panel_t_led=1.5; // height of the soldered LED modules +panel_t=(panel_t_pcb+panel_t_led); // overall thickness of the PCB+LEDs (~50:50) +led_spacing_x=8.5; // center-to-center spacing from LED to next LED, in width/x-axis-direction +led_spacing_y=8; // same for height/Y-axis +led_w=4.5+1.5; +led_h=5+1; +led_num_x=8; +led_num_y=8; +offset_left=((panel_w-((led_num_x*led_w)+((led_num_x-1)*(led_spacing_x-led_w))))/2); // offset on one side (effectively "panel_w-e2e_x/2", but properly calculated) +offset_top= ((panel_h-((led_num_y*led_h)+((led_num_y-1)*(led_spacing_y-led_h))))/2); // offset on one side (effectively "panel_h-e2e_y/2", but properly calculated) + +e2e_x=64; // width/x-axis edge-to-edge-distance from beginning of first to end of last LED (LED-Case, not soldering-points). for reference only +e2e_y=61.75; // same for height/Y-axis + +conhole_d=4; // connection hole between frame parts +conhole_taper_h=2; // is this needed? +conhole_i_d=2.75; // should fit M3 +conhole_offset=3.5; //offset from outer perimeter +cutout_w=10; +//echo("offset left is ",offset_left); +//echo("offset top is ",offset_top); + + +// ########################################## + +// MODULES: + +module panel(){ + // PCB: + cube([panel_w,panel_h,panel_t_pcb+q],center=true); + // overcomplicated "for" to determine the exact positions of the LEDs on the board. + // The LEDs themselves are not needed for rendering + // LEDs: +/* + for (num_x=[0:led_spacing_x:led_spacing_x*(led_num_x-1)],num_y=[0:led_spacing_y:led_spacing_y*(led_num_y-1)]) + translate([-(panel_w/2-led_w/2)+offset_left+num_x,-(panel_h/2-led_h/2)+offset_top+num_y,panel_t_led])color( "#ff0000" )cube([led_w,led_h,panel_t_led],center=true); +*/ + // "lightpipes": + // left column (span 2 wide each) + for (num_x=[0:led_spacing_x:led_spacing_x*(led_num_x-1)],num_y=[0:led_spacing_y]) + translate([-(panel_w/2-led_w/2)+offset_left+num_x,-(panel_h/2-led_h/2)+offset_top+num_y,panel_t_pcb+panel_t_led*1.5])color( "#00ff00" )cube([led_w,led_h,panel_t_led*4+q],center=true); + // center column (span 2 wide each) + for (num_x=[0:led_spacing_x:led_spacing_x*(led_num_x-1)],num_y=[led_spacing_y*3:led_spacing_y*4]) + translate([-(panel_w/2-led_w/2)+offset_left+num_x,-(panel_h/2-led_h/2)+offset_top+num_y,panel_t_pcb+panel_t_led*1.5])color( "#00ff00" )cube([led_w,led_h,panel_t_led*4+q],center=true); + // right column (span 2 wide each) + for (num_x=[0:led_spacing_x:led_spacing_x*(led_num_x-1)],num_y=[led_spacing_y*6:led_spacing_y*7]) + translate([-(panel_w/2-led_w/2)+offset_left+num_x,-(panel_h/2-led_h/2)+offset_top+num_y,panel_t_pcb+panel_t_led*1.5])color( "#00ff00" )cube([led_w,led_h,panel_t_led*4+q],center=true); + // smaller inbetween columns (span 1 wide each) + for (num_x=[0:led_spacing_x:led_spacing_x*(led_num_x-1)],num_y=[led_spacing_y*2,led_spacing_y*5]) + translate([-(panel_w/2-led_w/2)+offset_left+num_x,-(panel_h/2-led_h/2)+offset_top+num_y,panel_t_pcb+panel_t_led*1.5])color( "#00ff00" )cube([led_w,led_h,panel_t_led*4+q],center=true); + +} +module panelholder(){ + translate([0,0,panel_t_pcb])difference(){ + cube([panel_w+mt,panel_h+mt,(panel_t+(panel_t_pcb+panel_t_led*2))],center=true); + translate([0,0,-(panel_t_pcb+panel_t_led)]) + panel(); + //translate([0,0,-panel_t_led*3])cube([panel_w,panel_h,(panel_t+(panel_t_led*3))],center=true); + // screwholes for M3 + for ( + pos_x=[-(panel_w+mt)/2+conhole_offset, + (panel_w+mt)/2-conhole_offset], + pos_y=[-(panel_h+mt)/2+conhole_offset, + (panel_h+mt)/2-conhole_offset] + ) + translate([pos_x,pos_y,-1]) + #cylinder(d=conhole_i_d,h=(panel_t+(panel_t_led*3)+q),center=true); + } +} + +module panelframe(){ + translate([0,0,panel_t_pcb])difference(){ + cube([panel_w+mt,panel_h+mt,(panel_t+(panel_t_led*8))],center=true); + translate([cutout_w/2,0,pt])cube([panel_w-(offset_left*2)+cutout_w,panel_h-(offset_top*2),(panel_t+(panel_t_led*8))+q],center=true); + for ( + pos_x=[-(panel_w+mt)/2+conhole_offset, + (panel_w+mt)/2-conhole_offset], + pos_y=[-(panel_h+mt)/2+conhole_offset, + (panel_h+mt)/2-conhole_offset]) + { + translate([pos_x,pos_y,0])cylinder(d=conhole_d,h=(panel_t+(panel_t_led*8))+q,center=true); + translate([pos_x,pos_y,-(panel_t+(panel_t_led*8))/2+conhole_taper_h/2])cylinder(d2=conhole_d,d1=conhole_d*1.5,h=conhole_taper_h+q,center=true); + } + } +} +// ########################################## + +// DRAW MODEL: +panelholder(); +translate([0,0,-(panel_t+(panel_t_led*3))-50])panelframe(); \ No newline at end of file diff --git a/openscad/own/kitt-matrix/stl/kitt-matrix_draft1.stl b/openscad/own/kitt-matrix/stl/kitt-matrix_draft1.stl new file mode 100644 index 0000000..8e606fe Binary files /dev/null and b/openscad/own/kitt-matrix/stl/kitt-matrix_draft1.stl differ