// LED Diffuser heart // for basic Arduino // with d2~d13 & a0~a5... for 17 leds // By: PuZZleDucK // Licence: GPL3 // one middle and 16/2=8 either side // 7 ** ** // 6 * 2 * // 5 * * // 4 * * // 3 * * // 2 * * // 1 * $fn = 50; //make circles look good heart(); //a single heart all by itself //QuadLove: print 4 individually and print 4 joiners to recreate in real life. /* translate([0,-49,60.5]) rotate([-90,-90,0]) heart(); translate([0,49,60.5]) rotate([90,-90,0]) heart(); translate([-49,0,60.5]) rotate([180,-90,0]) heart(); translate([49,0,60.5]) rotate([0,-90,0]) heart(); */ module heart() { difference() { union() { translate([-53,0,0]) difCube();//middle bottom translate([-40,-10,0]) difCube();//bottom 'two' aka row 2 translate([-40,10,0]) difCube(); translate([-30,-20,0]) difCube();//row 3 translate([-30,20,0]) difCube(); translate([-20,-30,0]) difCube();//row 4 translate([-20,30,0]) difCube(); translate([-10,-35,0]) difCube();//row 5 translate([-10,35,0]) difCube(); translate([0,-40,0]) difCube();//row6 - outer translate([0,40,0]) difCube(); translate([0,-7,0]) difCube();//row6 - inner translate([0,7,0]) difCube(); translate([13,-32,0]) difCube();//row7 - outer translate([13,32,0]) difCube(); translate([8,-19,0]) difCube();//row7 - inner translate([8,19,0]) difCube(); //Bolt/join holders translate([3,29,0]) holeCube(); translate([3,-29,0]) holeCube(); translate([-9,0,0]) halfCube(); //Accentuate dip in middle with extra halfblock }//union //Trim a section out of the "crease" at the top translate([8.5,0,0]) cube([10,7,20], center=true); }//diff }//heart //below here be dragons... well weasels actually, but they are pretty nasty at this time. module difCube() { cubeSize = 6; ledDiam = 3.7; ledRadius = ledDiam/2; diffuserSpacing = 4.5;//total 15mm for( x = [0:2]) { for( y = [0:2] ) { difference() { union() { translate([0,0,-diffuserSpacing/2]) cube([cubeSize+2*diffuserSpacing,cubeSize+2*diffuserSpacing,cubeSize/2+diffuserSpacing], center=true); cube([cubeSize,cubeSize,cubeSize/2], center=true); }//union translate([0,0,-cubeSize/2]) cylinder(cubeSize,ledRadius,ledRadius);//led hole }//diff }//row }//col }//module module holeCube() { cubeSize = 6; ledDiam = 3.7; ledRadius = ledDiam/2; diffuserSpacing = 4.5;//total 15mm for( x = [0:2]) { for( y = [0:2] ) { difference() { union() { translate([0,0,-diffuserSpacing/2]) cube([cubeSize+2*diffuserSpacing,cubeSize+2*diffuserSpacing,cubeSize/2+diffuserSpacing], center=true); cube([cubeSize,cubeSize,cubeSize/2], center=true); } //led hole translate([0,0,-cubeSize*2]) cylinder(cubeSize*4,ledRadius,ledRadius); } }//row }//col }//module module halfCube() { cubeSize = 6; ledDiam = 3.7; ledRadius = ledDiam/2; diffuserSpacing = 4.5;//total 15mm for( x = [0:2]) { for( y = [0:2] ) { union() { translate([0,0,-diffuserSpacing/2]) cube([cubeSize+2*diffuserSpacing/2,cubeSize+2*diffuserSpacing,cubeSize/2+diffuserSpacing], center=true); cube([cubeSize,cubeSize,cubeSize/2], center=true); } }//row }//col }//module