Difference between revisions of "Syraren"

From Digitálne technológie výroby
Jump to: navigation, search
Line 18: Line 18:
 
Postupovali sme nasledovne, najprv sme naprogramovali plný srdcový objekt(2 kruhy+štvorec vytiahnuté do 3D v smere osi z), od ktorého sme odrátali objekt s rovnakým tvarom, ale o niečo menší, rozdiel vo veľkosti(hrúbka nádoby) je daný parametrom thickness, veľkosť nádoby v rovine xy je daná parametrom size a výška nádoby parametrom height.
 
Postupovali sme nasledovne, najprv sme naprogramovali plný srdcový objekt(2 kruhy+štvorec vytiahnuté do 3D v smere osi z), od ktorého sme odrátali objekt s rovnakým tvarom, ale o niečo menší, rozdiel vo veľkosti(hrúbka nádoby) je daný parametrom thickness, veľkosť nádoby v rovine xy je daná parametrom size a výška nádoby parametrom height.
 
Poklopy sú tým istým princípom ako plný srdcový objekt, len majú menšiu výšku(závislú od parametra height).
 
Poklopy sú tým istým princípom ako plný srdcový objekt, len majú menšiu výšku(závislú od parametra height).
 +
 
Teraz nastala najťažšia časť a to správne vytvoriť dierky na nádobe.
 
Teraz nastala najťažšia časť a to správne vytvoriť dierky na nádobe.
 
V skratke, vymysleli sme to cez cyklus for, ktorý dokáže meniť hodnotu zadanej premennej od počiatočnej hodnoty po konečnú zadanú. Vďaka tejto funkcii sa nám podarilo úspešne parametrizovať všetky dierky na nádobe, parameter a je veľkosť dierky, width je jej rozšírenie v rovine xy, parameter densh vzdialenosť dierok v smere x, resp. y a parameter densv určuje vzdialenosť dierok v smere z.
 
V skratke, vymysleli sme to cez cyklus for, ktorý dokáže meniť hodnotu zadanej premennej od počiatočnej hodnoty po konečnú zadanú. Vďaka tejto funkcii sa nám podarilo úspešne parametrizovať všetky dierky na nádobe, parameter a je veľkosť dierky, width je jej rozšírenie v rovine xy, parameter densh vzdialenosť dierok v smere x, resp. y a parameter densv určuje vzdialenosť dierok v smere z.
 +
 
Čo sa týka poklopov, tie sa podarilo úspešne sparametrizovať len sčasti, najdôležitejšia časť a to je štvorec(srdce zložené so štvorca+2 kruhy) je sparametrizovaná správne, akurát v oblasti kruhov to trošku pokulháva, keď tomu človek nie úplne rozumie, môže odstrániť zavolanie funkcie circl v poslednej funkcii zvanej heart_shape_top2 pridaním // pred funkciu volanie funkcie circle.
 
Čo sa týka poklopov, tie sa podarilo úspešne sparametrizovať len sčasti, najdôležitejšia časť a to je štvorec(srdce zložené so štvorca+2 kruhy) je sparametrizovaná správne, akurát v oblasti kruhov to trošku pokulháva, keď tomu človek nie úplne rozumie, môže odstrániť zavolanie funkcie circl v poslednej funkcii zvanej heart_shape_top2 pridaním // pred funkciu volanie funkcie circle.
  
 
To je tak asi všetko k programovaniu našej nádoby, tu je výsledok v Openscade:
 
To je tak asi všetko k programovaniu našej nádoby, tu je výsledok v Openscade:
 
[[File:srdce.png|500px|thumb|center|srdce]]
 
[[File:srdce.png|500px|thumb|center|srdce]]
 +
 +
A nakoniec samotný kód programu:
 +
echo(version=version());
 +
heart_box(90,80,5); //parametres of box(size, height, thickness)
 +
a=1.5; //size of holes
 +
width=3; //width holes on the box
 +
densv=4*a; //density of holes in vertical direction
 +
densh=8*a; //density of holes in horizontal direction
 +
 +
module pie_slice(R, a0, a1) {   
 +
    if(a1 > a0)
 +
        polygon([
 +
            [0,0],
 +
            [R * cos(a0), R * sin(a0)],
 +
            [R * cos(a1), R * sin(a1)],       
 +
            [0,0]
 +
        ]);
 +
}
 +
 +
module heart_shape(size) {
 +
    square(size,size);
 +
    translate([size/2,size,0])
 +
        circle(size/2);
 +
    translate([size,size/2,0]) 
 +
        circle(size/2);
 +
}
 +
 +
module heart(size,thickness,height) {
 +
    linear_extrude(height=height)
 +
        minkowski() {
 +
            heart_shape(size);
 +
            circle(thickness+0.01);
 +
        }
 +
}
 +
module palica(size,height){
 +
    for(z = [0:densv:height-densv])
 +
        translate([0,0,z+4])
 +
        linear_extrude(height=a)           
 +
            pie_slice(size/2+10,0,width);       
 +
}
 +
   
 +
 +
module heart_shape2(size){
 +
    for(x = [5:densh:size-a]) {
 +
            translate([x,0,0])
 +
            scale([width,-5,0])
 +
                square(a,a);
 +
            translate([0,x,0])
 +
            scale([-5,width,0])
 +
                square(a,a);
 +
    };
 +
 +
}
 +
 +
module circl(size){
 +
    translate([size/2,size,0]){
 +
            kruh(size,2*a);
 +
            translate([0,7])
 +
                square(2*a,[0,10]);
 +
        }       
 +
        translate([size,size/2,0])
 +
        rotate(-90){
 +
                kruh(size,2*a);
 +
                translate([0,7])
 +
                    square(2*a);
 +
        }
 +
}
 +
module kruh(size,widh){
 +
    for (k = [15:densh*2:165])
 +
        {
 +
        difference(){
 +
            pie_slice(size/2-densh+3,k,widh+k);
 +
            circle(size/2-densh-widh/2+2);
 +
        };
 +
    }
 +
        for (k = [15+widh:densh*2:165-widh])
 +
        difference(){
 +
            pie_slice(size/2-2*densh+3,k,1.5*widh+k);
 +
            circle(size/2-1.9*densh-widh+2);
 +
        }
 +
}
 +
module heart_top(size,thickness,height) {
 +
    for(z = [0:densv:height-densv])
 +
        translate([0,0,z+4])
 +
        linear_extrude(height=a)
 +
            heart_shape_top2(size,height);
 +
       
 +
}
 +
module heart2(size,thickness,height) {
 +
    for(z = [0:densv:height-densv])
 +
        translate([0,0,z+4])
 +
        linear_extrude(height=a)
 +
            heart_shape2(size);
 +
       
 +
}
 +
module rund(size,height){
 +
    for(h=[180-densh/2+width/2:-densh:4])
 +
        translate([size/2,size,0])
 +
        rotate(h)
 +
            palica(size,height);
 +
    for(h=[-93+densh/2-width/2:densh:85])
 +
        translate([size,size/2,0])
 +
        rotate(h)
 +
            palica(size,height);
 +
}
 +
 +
module heart_box(size,height,thickness) {
 +
    difference() {
 +
        heart_box_p(size,height,thickness);
 +
        heart2(size,thickness,height);
 +
        rund(size, height);
 +
    }
 +
   
 +
   
 +
}
 +
module heart_box_p(size,height,thickness) {
 +
    difference() {
 +
        heart(size,thickness,height);
 +
        translate ([0, 0, -2.5])
 +
        heart(size,thickness/2,height+5);
 +
    }
 +
    top(size, height,thickness);
 +
}
 +
module top(size, height,thickness) {
 +
translate([0, -150, height+5])
 +
    rotate(60,[1, 0, 0])
 +
        {
 +
        difference() {
 +
            heart(size-2,thickness/2,height/100+8);
 +
            heart_shape_top2(size,height);
 +
        }
 +
    }
 +
    translate([0, -150, -5-height/10])
 +
    rotate(-60,[1, 0, 0])
 +
        {
 +
        difference() {
 +
            heart(size-2,thickness/2,height/100+8);
 +
            heart_shape_top2(size,height);
 +
        }
 +
    }
 +
 +
}
 +
module heart_shape_top1(size,height){
 +
    for(y = [5:densh:size]){
 +
        translate([0,y,0])
 +
        scale([1,a,0])
 +
            square(a,a);}
 +
}
 +
module heart_shape_top2(size,height){
 +
    translate([0,0,-height/24])
 +
    linear_extrude(height=height/6){
 +
        for(x = [5:densh:size]) {
 +
            translate([x,0,0])
 +
            scale([a,1,0])
 +
                heart_shape_top1(size,height);
 +
        }
 +
        circl(size);
 +
    }
 +
}

Revision as of 07:57, 26 May 2017

Co?

Syrová krabička v tvare srdca s pravidelnými perforáciami a vekom.


Preco?

Nádoby na výrobu syra v tvare srdca nepredávajú a už vôbec nie konkrétnych rozmerov, keďže moja mamka je vášnivou syrárkou a rada vyrába(a samozrejme konzumuje) syry, rozhodli sme sa pre ňu vyrobiť nádobu na syr v tvare srdiečka.


Ako?

V 3D tlačiarni vytlačíme základnú krabičku zvrchu aj zospodu deravú a potom laserom vyrežeme poklopy na vrch aj spodok.

Pre vysvetlenie, v čom je krabička na výrobu syra taká výnimočná. Pri výrobe syra je potrebné po varení ho zbaviť prebytočnej srvátky(môžme i predstaviť ako zriedené mlieko). Teda musíme ho vložiť do nádoby a vyžmýkať to z neho. Na to nám perforovaná(deravá) krabička poslúži najlepšie. Ak zvolíme veľkosť dier nie príliš veľkú, aby syr nevytekal cez ne, ale ani príliš malú, aby odtekanie netrvalo večnosť, dokážeme pomocou takejto krabičky po pridaní závažia navrch zbaviť syr prebytočnej srvátky(je potrebné dodať, že toto nie je 5 minútová záležitosť, po zaťažení poklopu to trvá pár hodín kým sa dostatočne syr vyžmýka).

V duchu tejto myšlienky sme zostavovali krabičku. Po odskúšaní viacerých programov sme sa nakoniec rozhodli pre Openscad, nevedeli sme pôvodne akú chceme veľkosť dier a možnosť parametrizácie v Openscade sa nám zapáčila. Postupovali sme nasledovne, najprv sme naprogramovali plný srdcový objekt(2 kruhy+štvorec vytiahnuté do 3D v smere osi z), od ktorého sme odrátali objekt s rovnakým tvarom, ale o niečo menší, rozdiel vo veľkosti(hrúbka nádoby) je daný parametrom thickness, veľkosť nádoby v rovine xy je daná parametrom size a výška nádoby parametrom height. Poklopy sú tým istým princípom ako plný srdcový objekt, len majú menšiu výšku(závislú od parametra height).

Teraz nastala najťažšia časť a to správne vytvoriť dierky na nádobe. V skratke, vymysleli sme to cez cyklus for, ktorý dokáže meniť hodnotu zadanej premennej od počiatočnej hodnoty po konečnú zadanú. Vďaka tejto funkcii sa nám podarilo úspešne parametrizovať všetky dierky na nádobe, parameter a je veľkosť dierky, width je jej rozšírenie v rovine xy, parameter densh vzdialenosť dierok v smere x, resp. y a parameter densv určuje vzdialenosť dierok v smere z.

Čo sa týka poklopov, tie sa podarilo úspešne sparametrizovať len sčasti, najdôležitejšia časť a to je štvorec(srdce zložené so štvorca+2 kruhy) je sparametrizovaná správne, akurát v oblasti kruhov to trošku pokulháva, keď tomu človek nie úplne rozumie, môže odstrániť zavolanie funkcie circl v poslednej funkcii zvanej heart_shape_top2 pridaním // pred funkciu volanie funkcie circle.

To je tak asi všetko k programovaniu našej nádoby, tu je výsledok v Openscade:

srdce

A nakoniec samotný kód programu: echo(version=version()); heart_box(90,80,5); //parametres of box(size, height, thickness) a=1.5; //size of holes width=3; //width holes on the box densv=4*a; //density of holes in vertical direction densh=8*a; //density of holes in horizontal direction

module pie_slice(R, a0, a1) {

   if(a1 > a0)
       polygon([
           [0,0],
           [R * cos(a0), R * sin(a0)],
           [R * cos(a1), R * sin(a1)],        
           [0,0]
       ]);

}

module heart_shape(size) {

   square(size,size);
   translate([size/2,size,0]) 
       circle(size/2);
   translate([size,size/2,0])  
       circle(size/2);

}

module heart(size,thickness,height) {

   linear_extrude(height=height) 
       minkowski() {
           heart_shape(size);
           circle(thickness+0.01);
       }

} module palica(size,height){

   for(z = [0:densv:height-densv]) 
       translate([0,0,z+4])
       linear_extrude(height=a)            
           pie_slice(size/2+10,0,width);         

}


module heart_shape2(size){

   for(x = [5:densh:size-a]) {
           translate([x,0,0])
           scale([width,-5,0])
               square(a,a);
           translate([0,x,0])
           scale([-5,width,0])
               square(a,a);
   };

}

module circl(size){

   translate([size/2,size,0]){
           kruh(size,2*a);
           translate([0,7])
               square(2*a,[0,10]);
       }        
       translate([size,size/2,0])
       rotate(-90){
               kruh(size,2*a);
               translate([0,7])
                   square(2*a);
       }

} module kruh(size,widh){

   for (k = [15:densh*2:165])
       {
       difference(){
           pie_slice(size/2-densh+3,k,widh+k);
           circle(size/2-densh-widh/2+2);
       };
   }
       for (k = [15+widh:densh*2:165-widh])
       difference(){
           pie_slice(size/2-2*densh+3,k,1.5*widh+k);
           circle(size/2-1.9*densh-widh+2);
       }

} module heart_top(size,thickness,height) {

   for(z = [0:densv:height-densv]) 
       translate([0,0,z+4])
       linear_extrude(height=a)
           heart_shape_top2(size,height);
        

} module heart2(size,thickness,height) {

   for(z = [0:densv:height-densv]) 
       translate([0,0,z+4])
       linear_extrude(height=a)
           heart_shape2(size);
        

} module rund(size,height){

   for(h=[180-densh/2+width/2:-densh:4])
       translate([size/2,size,0]) 
       rotate(h) 
           palica(size,height);
   for(h=[-93+densh/2-width/2:densh:85])
       translate([size,size/2,0])
       rotate(h) 
           palica(size,height);

}

module heart_box(size,height,thickness) {

   difference() {
       heart_box_p(size,height,thickness);
       heart2(size,thickness,height);
       rund(size, height);
   }
   
   

} module heart_box_p(size,height,thickness) {

   difference() {
       heart(size,thickness,height);
       translate ([0, 0, -2.5]) 
       heart(size,thickness/2,height+5);
   }
   top(size, height,thickness);

} module top(size, height,thickness) { translate([0, -150, height+5])

   rotate(60,[1, 0, 0])
       {
       difference() {
           heart(size-2,thickness/2,height/100+8);
           heart_shape_top2(size,height);
       }
   }
   translate([0, -150, -5-height/10])
   rotate(-60,[1, 0, 0])
       {
       difference() {
           heart(size-2,thickness/2,height/100+8);
           heart_shape_top2(size,height);
       }
   }

} module heart_shape_top1(size,height){

   for(y = [5:densh:size]){
       translate([0,y,0])
       scale([1,a,0])
           square(a,a);}

} module heart_shape_top2(size,height){

   translate([0,0,-height/24])
   linear_extrude(height=height/6){
       for(x = [5:densh:size]) {
           translate([x,0,0])
           scale([a,1,0])
               heart_shape_top1(size,height);
       }
       circl(size);
   }

}