$fn=200; include ; use ; use ; use ; zakladna=[30,10,200]; // drzak na zed magnet=[20+1,10+1,3+0.5]; // vnejsi rozmery magnetu mg_a=15; // odstup magnetu od drzaku blok=[ // zakladni deska padu max(magnet.x+2*2/*okolo magnetu*/,zakladna.x+2*10), magnet.y+zakladna.y-1+mg_a+10, magnet.z+1+1+2.5 ]; minizub=[9,3,blok.y]; // zarezy na rybine istep=20.5; // rozestup bloku pro celkovou sestavu module vrut_4mm (){ translate([-0.1,0,0]){ cylinder(2,4,4); translate([0,0,2]){ cylinder(2.5,4,2); cylinder(40,2,2); } } } module zub(base,delta) { rotate([90,0,90]) translate([0,0,-base.z/2]) linear_extrude(base.z) polygon([[-base.x/2,0],[base.x/2,0],[(base.x-delta)/2,base.y],[-(base.x-delta)/2,base.y]]); } module drzak() { /* zakladna */ translate([0,zakladna.y-1,0]) rotate([90,90,0]) difference(){ zub(zakladna,4); for(i=[-1,0,1]) translate([zakladna.z*1/3*i,0,0]) vrut_4mm(); } } module drzak_sub() { /* zakladna zvetsena pro odecitani */ translate([0,zakladna.y-1,0]) rotate([0,90,-90]) zub(zakladna+[0.5,0.5,0],4+0.6);} module okraj(){ // podivny utvar pro orezavani bloku/desticky xin=minizub.y/2; r=(blok.z+xin); translate([-(blok.x/2+1),blok.y-r,r+xin+0.01]) rotate([0,90,0]) difference(){ cube(max(blok)+2); translate([xin,0,0])cylinder(max(blok)+2,r,r); } for(i=[-1,1]) translate([-(blok.x-4)/2*i,-1+blok.x*(1-i)/2,2]) rotate([0,90,i*90]) difference(){ cube(max(blok)+2); cylinder(max(blok)+2,2,2); } for(i=[-1,1]) translate([-(blok.x)/2*i,blok.x*(1-i)/2-1,2+blok.z+minizub.y+5]) rotate([0,90,i*90]) difference(){ cube(max(blok)+2); cylinder(max(blok)+2,2,2); } } module rybina(base,num,odskok=0.3) { /*base jsou rozmery ekvivalentniho hranolku, num je pocet, odskok je rezerva pro nasouvani */ translate([-base.x*num,0,-base.z]) for(i=[0:num-1]) translate([base.x*2*i,0,0]) linear_extrude(base.z) polygon([[base.y/2+odskok,0],[base.x-base.y/2-odskok,0],[base.x+base.y/2-odskok,base.y],[-base.y/2+odskok,base.y]]); } module desticka(){ // zaklad padu /*color("red")*/ translate([-blok.x/2,0,0]) cube(blok); /*color("blue") */ translate([0,0,blok.z/*+minizub.z*/]) rotate([90,0,0]) rybina(minizub, 4); } module pad(){ // pulka drzaku na noze translate([0,0,0]) { difference() { desticka(); translate([0,zakladna.y-1,0]) rotate([0,90,-90]) zub(zakladna+[0.5,0.5,0],4+0.5); translate([-magnet.x/2,zakladna.y-1+mg_a,1]) cube(magnet+[0,0,1+0.2+100]); okraj(); } } } module spacer(){ // tenka vlozka na sirku cepele noze depth=7; width=1.5; difference(){ translate([-(blok.x-4)/2,0,0]) cube([blok.x-4, zakladna.y-1+depth,width]); drzak_sub(); } } module fixer(){ // vnejsi doraz drzaku depth=10; width=10; difference(){ translate([-(blok.x-4)/2,0,0]) cube([blok.x-4, zakladna.y-1+depth,width]); drzak_sub(); translate([0,zakladna.y-0.9,width/2]) rotate([90,0,0]) { NutM3( h=2.5,tolerance=0.2); translate([0,0,-depth]) rotate([180,0,0]) BoltM3(tolerance=0.2); } } } // pad(); // celkova sestava if(true) translate([0,-100,0]){ translate([0,0,-11]) color("green") rotate([0,0,0]) fixer(); translate([0,0,7*istep]) color("green") rotate([0,0,0]) fixer(); translate([0,0,70]) color("blue") rotate([0,0,0]) drzak(); for(i=[0:6]){ translate([0,0,-1.5+i*istep]) color("green") rotate([0,0,0]) spacer(); translate([0,0,0+i*istep]) color("red") rotate([0,0,0]) pad(); translate([0,0,2*blok.z+3+i*istep]) color("yellow") rotate([0,180,0]) pad(); } } // rozpad if(false) translate([0,0,0]){ translate([-130,-20,0]) rotate([0,0,0]) fixer(); translate([130,-20,0]) rotate([0,0,0]) fixer(); translate([0,-15,9]) rotate([-90,0,90]) drzak(); for(i=[0:5]) translate([i*50-125,-50,0]) rotate([0,0,0]) spacer(); color("red") for(i=[0:6]){ translate([i*60-175,10,0]) pad(); } color("green") for(i=[0:6]){ translate([i*60-175,60,0]) pad(); } } // rozpad libovolne barvy if(false) translate([0,0,0]){ translate([-25,1,0]) rotate([0,0,0]) fixer(); translate([25,1,0]) rotate([0,0,0]) fixer(); translate([0,-15,9]) rotate([-90,0,90]) drzak(); translate([-75,1,0]) rotate([0,0,0]) spacer(); translate([75,1,0]) rotate([0,0,0]) spacer(); for(i=[0:3]) translate([i*50-75,-50,0]) rotate([0,0,0]) spacer(); } // rozpad jasne barvy - je potreba celken DVAKRAT jednou cerveny a jednou zeleny, nebo jine dve barvy if(false) translate([0,0,0]){ for(i=[0:3]) translate([i*60-175,0,0]) pad(); for(i=[0:2]) translate([i*60-175,50,0]) pad(); }