Un semplice script parametrico OpenSCAD in grado di generare un oggetto solido esportabile ed utilizzabile nel proprio sistema CAD per praticare fori idonei a ventole di raffreddamento
Scopo dello script
A volte capita, durante la progettazione di un dispositivo, di dovere aggiungere allo stesso una o più ventole di raffreddamento. Poiché le ventole devono potere soffiare l’aria da/verso l’ambiente esterno, è necessario praticare dei fori sulla superficie del case che si va a disegnare.
Esistono, di norma, due soluzioni:
- Praticare un banale foro circolare di diametro leggermente inferiore a quello del rotore della ventola, predisponendo i necessari fori laterali per potere agganciare una griglia di protezione
- Ricavare una serie di molti, piccoli fori o fenditure di passaggio dell’aria direttamente sulla scocca del case, evitando quindi di dovere prevedere i fori per montare la griglia di protezione, e l’uso della griglia stessa.
Naturalmente, sia per ragioni di costi che di assemblaggio, la soluzione (2) è spesso preferibile. Lo script che segue consente appunto di generare il “negativo” di tali fori/fenditure. Esso costruisce una serie di oggetti solidi di dimensioni e caratteristiche parametriche, che possono essere poi usati per “forare” la superficie del case in questione.
Esempio applicativo
Di seguito un esempio pratico su come utilizzare gli oggetti generati dallo script. Si supponga di dovere praticare dei fori in questo case:
Come prima cosa, è necessario generare gli oggetti con i parametri desiderati
In seguito è sufficiente posizionarli sul case in modo da avere una intersezaione completa con le superfici da forare, e tramite il proprio CAD eseguire una operazione booleana di tipo “difference” o “combine”
L’operazione “difference/combine” va a tagliare la superficie della scocca usando il nostro modello di taglio (in rosso), e come risultato si hanno una serie di oggetti solidi che “tappano” i fori che abbiamo eseguito.
A questo punto è sufficiente rimuovere gli oggetti di foratura e gli eventuali “sfridi” rimanenti dall’operazione “difference/combine”, ed ecco i fori di ventilazione pronti per l’uso.


Lo script
// How large is the fan rotor ? (mm)
RotorDiameter=38;
// How large should each hole be ? (mm)
HolesDiameter=4;
// How much space should be left between each hole, proportionally to the hole size ?
HolesRingsSpacingFraction = 0.4; // [0.1:4.0]
// The height of the generated solids (mm)
Height = 10;
// The number of faces of each hole outer perimeter
Resoultion=20;// [3:100]
// VARIABLES INITIALIZATION
echo(“RotorDiameter=”,RotorDiameter);
echo(“HolesDiameter=”,HolesDiameter);
echo(“Height=”,Height);
echo(“Resoultion=”,Resoultion);
HolesBoundingBox = HolesDiameter*(1+HolesRingsSpacingFraction);
echo(“HolesBoundingBox=”,HolesBoundingBox);
NumberOfRings = RotorDiameter / HolesBoundingBox;
echo(“NumberOfRings=”,NumberOfRings);
OuterRadius = RotorDiameter/2;
echo(“OuterRadius=”,OuterRadius);
RingRadiusStep = HolesBoundingBox;
echo(“RingRadiusStep=”,RingRadiusStep);
difference()
{
for (i=[0:1:NumberOfRings/2])
{
difference()
{
for(j=[0:360/((i*HolesBoundingBox*6/HolesBoundingBox)):360])
{
translate([sin(j)*(i*HolesBoundingBox),cos(j)*(i*HolesBoundingBox),0])cylinder(h=Height,d=HolesDiameter, center = false, $fn=Resoultion);
}
}
}
}
I parametri dello script
Come è possibile notare, in testa allo script sono dichiarare le variabili che regolano il funzionamento dello script:
RotorDiameter=38; // il diametro esterno del rotore della ventola
HolesDiameter=5; // il diametro dei fori da praticare
HolesRingsSpacingFraction = 0.4; // lo spazio che separa un foro dall’altro, in proporzione al diametro del foro stesso
Height = 3; // altezza di estrusione della forma
Resoultion=45; // risoluzione del perimetro dei fori. Il numero rappresenta le faccie de cilindri generati
Gli esempi che seguono dimostrano il funzionamento dello script con diversi valori di questi parameri.
Per un esempio “live” di questo script, fare riferimento a
http://www.thingiverse.com/thing:476061
oppure usare direttamente il “customizer” di Thingiverse a questo indirizzo
http://www.thingiverse.com/apps/customizer/run?thing_id=476061
esempio 1
[canvasio3D width=”600″ height=”600″ border=”1″ borderCol=”#F6F6F6″ dropShadow=”0″ backCol=”#FFFFFF” backImg=”…” mouse=”on” rollMode=”off” rollSpeedH=”0″ rollSpeedV=”0″ objPath=”Multi_Holes_38_1_1_3_45” objScale=”1.5″ objColor=”56000″ lightSet=”4″ reflection=”off” refVal=”5″ objShadow=”off” floor=”off” floorHeight=”42″ lightRotate=”off” Help=”off”] [/canvasio3D]
esempio 2
[canvasio3D width=”600″ height=”600″ border=”1″ borderCol=”#F6F6F6″ dropShadow=”0″ backCol=”#FFFFFF” backImg=”…” mouse=”on” rollMode=”off” rollSpeedH=”0″ rollSpeedV=”0″ objPath=”Multi_Holes_38_2_05_3_45” objScale=”1.5″ objColor=”56000″ lightSet=”4″ reflection=”off” refVal=”5″ objShadow=”off” floor=”off” floorHeight=”42″ lightRotate=”off” Help=”off”] [/canvasio3D]
esempio 3
[canvasio3D width=”600″ height=”600″ border=”1″ borderCol=”#F6F6F6″ dropShadow=”0″ backCol=”#FFFFFF” backImg=”…” mouse=”on” rollMode=”off” rollSpeedH=”0″ rollSpeedV=”0″ objPath=”Multi_Holes_38_3_1_10_3” objScale=”1.5″ objColor=”56000″ lightSet=”4″ reflection=”off” refVal=”5″ objShadow=”off” floor=”off” floorHeight=”42″ lightRotate=”off” Help=”off”] [/canvasio3D]
esempio 4
[canvasio3D width=”600″ height=”600″ border=”1″ borderCol=”#F6F6F6″ dropShadow=”0″ backCol=”#FFFFFF” backImg=”…” mouse=”on” rollMode=”off” rollSpeedH=”0″ rollSpeedV=”0″ objPath=”Multi_Holes_38_4_04_3_45” objScale=”1.5″ objColor=”56000″ lightSet=”4″ reflection=”off” refVal=”5″ objShadow=”off” floor=”off” floorHeight=”42″ lightRotate=”off” Help=”off”] [/canvasio3D]
esempio 5
[canvasio3D width=”600″ height=”600″ border=”1″ borderCol=”#F6F6F6″ dropShadow=”0″ backCol=”#FFFFFF” backImg=”…” mouse=”on” rollMode=”off” rollSpeedH=”0″ rollSpeedV=”0″ objPath=”Multi_Holes_38_4_05_10_4” objScale=”1.5″ objColor=”56000″ lightSet=”4″ reflection=”off” refVal=”5″ objShadow=”off” floor=”off” floorHeight=”42″ lightRotate=”off” Help=”off”] [/canvasio3D]
esempio 6
[canvasio3D width=”600″ height=”600″ border=”1″ borderCol=”#F6F6F6″ dropShadow=”0″ backCol=”#FFFFFF” backImg=”…” mouse=”on” rollMode=”off” rollSpeedH=”0″ rollSpeedV=”0″ objPath=”Multi_Holes_38_4_05_10_5” objScale=”1.5″ objColor=”56000″ lightSet=”4″ reflection=”off” refVal=”5″ objShadow=”off” floor=”off” floorHeight=”42″ lightRotate=”off” Help=”off”] [/canvasio3D]
esempio 7
[canvasio3D width=”600″ height=”600″ border=”1″ borderCol=”#F6F6F6″ dropShadow=”0″ backCol=”#FFFFFF” backImg=”…” mouse=”on” rollMode=”off” rollSpeedH=”0″ rollSpeedV=”0″ objPath=”Multi_Holes_38_4_05_10_6” objScale=”1.5″ objColor=”56000″ lightSet=”4″ reflection=”off” refVal=”5″ objShadow=”off” floor=”off” floorHeight=”42″ lightRotate=”off” Help=”off”] [/canvasio3D]