meséltem már arról, mire való egy temp tower, úgyhogy most csak röviden: a temp tower egy olyan GCODE file, amiben egy meghatározott lépésközzel változik (csökken) a hotend hőmérséklete). A temp towert kinyomtatva a kész modellen jól látszik, hogy hol van az adott nyersanyaghoz szükséges ideális célhőmérséklet. A temp tower készítéséhez két dolgot kell csinálunk: egyrészt meg kell alkotni a modellt, másrészt a modellből generált GCODE fileba bele kell injektálni a hőmérsékletváltó parancsokat. A hőváltáshoz ez a jó kis tempInjector script tökéletes lesz, nekünk csak azt kell tudnunk, hogy a modellünknél hány mm-enként kell réteget váltani. Ezt persze méricskélhetjük is egy letöltött modellen, de minek, amikor van nekünk ingyen OpenSCADünk, amivel legyártathatjuk a tuti modellt:
/*
parametric temp tower - //fns.pappito.com
Use tempInjector.py from https://github.com/fablabnbg/tronxy-xy100 to inject temperatures into generated GCODE file.
tempInjector.py parameters used in this temp_tower.scad file:
STARTTEMP = temp (240)
TEMP_INCREMENTS = inc (-5)
TEMP_STEPS_HEIGHT_MM = z_bridgesole (2)
BASE_HEIGHT_MM = z_sole (10)
*/
// temp tower steps
temp = 240;
inc = -5;
steps = 8;
// bottom sole:
x_sole = 80;
y_sole = 20;
z_sole = 2;
// pillars with bridge soles
xygap_pillars = 4;
xy_pillars = y_sole - 2 * xygap_pillars;
xygap_bridgesole = 2;
xy_bridgesole = y_sole - 2 * xygap_bridgesole;
z_bridgesole = 10;
// bridge definition
gap_bridge = 1; //
zgap_bridge = 2; // gap between bridge soles
z_bridge = z_bridgesole + zgap_bridge;
xz_support = 6;
y_plank = 8;
z_plank = 2;
union() {
// tower sole
linear_extrude(height=z_sole) square(size=[x_sole, y_sole]);
// left pillar
translate([4, 4, 0]) linear_extrude(height=steps * (z_bridge + gap_bridge)) square(size=[xy_pillars, xy_pillars]);
// right pillar
translate([x_sole - xy_pillars - 4, 4, 0]) linear_extrude(height=steps * (z_bridge + gap_bridge)) square(size=[xy_pillars, xy_pillars]);
// ladder
for (i = [0 : steps]) {
// left bridge sole with numbers
difference() {
translate([(y_sole - xy_bridgesole) / 2, (y_sole - xy_bridgesole) / 2, z_sole + i * z_bridge]) leg(); // left
translate([(y_sole - xy_bridgesole) / 2 + 1, (y_sole - xy_bridgesole) / 2+2, z_sole + i * z_bridge +2]) {
// title
rotate([90, 0, 0]) linear_extrude(3) text(str(temp + i * inc), size = 6);
}
}
// right bridge sole
translate([x_sole - xy_bridgesole - (y_sole - xy_bridgesole) / 2, (y_sole - xy_bridgesole) / 2, z_sole + i * z_bridge]) leg(); // right
// bridge
//translate([xy_bridgesole + xygap_bridgesole, 0, (i+1)*z_bridge - 4]) bridge(i);
translate([xygap_bridgesole + xy_bridgesole, y_sole / 2- xy_bridgesole/2 , (i+1)*z_bridge - 4]) bridge(i);
}
}
module leg() {
linear_extrude(height = z_bridgesole) square(size = [xy_bridgesole, xy_bridgesole]);
}
module bridge(i) {
x_bridge = x_sole - 2 * xy_bridgesole - 2 * xygap_bridgesole;
x_plank = x_bridge - xz_support;
// left mount
rotate([-90,0,0]) linear_extrude(height = xy_bridgesole) polygon(points=[[0, 0], [xz_support,0], [0,xz_support]]);
// right mount
translate([x_plank,0,0]) rotate([-90,0,0]) linear_extrude(height=xy_bridgesole) polygon(points=[[0, 0], [xz_support, xz_support], [xz_support,0]]);
// bridge
translate([(x_bridge - x_plank)/2, (xy_bridgesole-y_plank)/2, 0]) linear_extrude(height=z_plank) square(size=[x_plank, y_plank]);
}]]>
- 2.x-es Phyton kell a scriptnek, mert a 3-as már másképp kezeli a print utasítást
- Python 2.x Windows installnál jelöljük be, hogy rakja be a patch-ba a phytont (a kezdők nem értenek ennyire a géphez és nem fogják tudni miért nem fut):
![]()
- így futtassuk parancssorból:
python tempinjector.py input_file.gcode output_file.gcode initial_temp temp_step element_height_mm [start_height_mm]
példa:python tempinjector.py AA2_temp_tower_240-200C.gcode AA2_temp_tower_240-200C.gcode.new 240 -5 10