added kitt matrix
parent
d4258527b8
commit
edefeee886
|
@ -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.
Loading…
Reference in New Issue