added kitt matrix

main
zeus 2024-08-17 20:34:19 +02:00
parent d4258527b8
commit edefeee886
2 changed files with 106 additions and 0 deletions

View File

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

Binary file not shown.