маю 3d принтер і трохи подрукував, але на білій нитці elegoo проявилася серйозна проблема: білий ящик для батарейок розшарувався посередині. пошук в тенетах найчастіше видає видає результати про недостатню температуру сопла, через що пластик витікає надто в’язкий і не чіпляється до попереднього шару (розшарування), або ж взагалі перестає витікати (зупинка друку). мені видалося дивним, що це проявилося лише на новій білій нитці elegoo, але не на залишках чорного і червоного пластику, яким я чудово друкував раніше.

пошук у тенетах найчастіше видає підказку: збільшити температуру сопла для друку. це простий рецепт, але… маю сумніви. невже біла нитка з тим самим номінальним діапазоном температур (190..220 °c) і в тому ж самому режимі на принтері (215 °c перший шар, 210 °c решта моделі) зненацька створює аж таку помітну проблему там, де її не було? і якщо різні нитки справді можуть аж так відрізнятися температурою плавлення, як знайти оптимальну температуру, витративши мінімальну кількість пластику?

так я надибав температурні вежі (temperature tower, heat tower), тобто моделі, в яких різні групи шарів по висоті друкуються різними температурами (як правило від вищої до нижчої); для pla це зазвичай 230..180° з кроком 5° або 10°. варіантів багато, ось мої знахідки в порядку зменшення кількості пластику й необхідного часу:

ось ця остання вежка мені підходить: економна й швидка, перевіряє відносно довгі (2 см) місточки (bridging), висячі залишки ниток (stringing), точність за рахунок конусних стовпчиків і віконець із арками. нема надрукованих цифр для зчитування температури? ну, зате швидко і економно. звідки інформація про кількість пластику й час на один поверх вежі? елементарно, ватсоне: програма-слайсер (prusaslicer в моєму випадку) дозволяє розтинати модель на фрагменти:

результат приблизний, але для оцінки годиться; зокрема, я всюди брав перший поверх, але вибрана швидка модель має підставку, інтегровану в перший поверх, тож наступні будуть ще економніші й швидші.

головне питання інше: як принтер знатиме, що різні шари треба друкувати з різною температурою? відповідь: а ніяк! якщо йому не вказати це явно; і більшість моделей цих веж мають в комплекті втулки (python) для cura… але ж у мене prusaslicer, тож довелося трохи розбиратися, як працює gcode. коротко: файли gcode на флешці містять набір команд, зрозумілих принтерам; більшість підказок з ручного налаштування температури в gcode зводяться до чогось такого:

M104 S230   ;Set hotend temp 230 °C

тут:

це анатомія однієї команди; щоби виставляти температуру декілька разів упродовж друку, для різних шарів, використовують умовний блок (приклад з опису до smart compact temperature calibration tower, для інших веж потребуватиме модифікації!):

{if layer_z == 1.6}     ;Layer height in mm, 1st floor
M104 S230               ;...230 °C
{elsif layer_z == 11.6} ;2nd floor
M104 S225               ;...225 °C
...
{endif}

інший варіант — вираховувати необхідну температуру одним рядком:

M104 S{230 - (layer_num - 7) / 50 * 5} {if layer_num > 7} ;Tower floor {(layer_num - 7) / 50 * 5 + 1} {endif}

це та сама команда, але замість блоку з кількома if..elseif, температура і номер поверху в коментарі обраховуються динамічно, одним рядком:

що робить цей код?

нічого складного нема, але якщо ви гадаєте, що автор моделі детально розписав цю примітивну арифметику в коментарях, щоби люди не гаяли час, здогадуючись, звідки взялися оті 7 та 50, то ви помиляєтеся; мені довелося відкрити і порізати модель трошки, щоби здогадатися. так само, як не одразу второпаєш, куди тулити цей код, бо більшість підказок орієнтовані на користувачів cura… в prusaslicer (і, мабуть, slic3r так само) — вкладка параметри принтеру (от грамотії, хай їм грець, має бути «принтера»!) > користувацький g-код > g-код перед зміною шару, і додати рядок після команди G92 E0.0 (див. зняток екрана):

;BEFORE_LAYER_CHANGE
G92 E0.0
;[layer_z]
M104 S{230 - (layer_num - 7) / 50 * 5} {if layer_num > 7} ;Tower floor {(layer_num - 7) / 50 * 5 + 1} {endif}

важливо! ще раз: код містить константи (230; 7; 50), котрі залежать від моделі й потребуватимуть модифікації залежно від типу пластику, товщини підставки, товщини поверху тощо. тому для мене було важливо розібратися, як працює g-код, щоби не робити дурниць наосліп. коли розібрався, зрозумів, що:

проблема: розшарування і зупинка друку; підготовка температурної вежі

я надрукував одну таку вежку для 230..190°, спостерігаючи за температурою: принтер на екрані показує поточну/цільову температури для сопла і стола. результат мене не вдовольнив:

з’ясувалося, що це особливість команди M104 — принтер продовжує друкувати, не чекаючи. чому підказки не використовують M109 з параметром Rxxx, котра змушує принтер виставити нову температуру і дочекатися, щоби вона справді встановилася? я не знаю. отже, модифікую g-код «швидкої вежі»:

не певен на 100%, що фабрична прошивка anycubic i3 mega s розуміє M109, треба спробувати.

далі буде