Recommended resources
The freely available resources this lesson will direct you to.
Здравствуйте!
На прошлом уроке мы завершили проектирование нашего корпуса, создав крышку и реализовав надежный механизм винтового соединения с помощью библиотеки bd_warehouse. Теперь у нас есть два полностью готовых STL-файла: enclosure_base.stl и enclosure_lid.stl. В цифровом мире они идеально подходят друг к другу. Но сохранится ли эта идеальность в физическом воплощении?
Сегодняшний урок посвящен критически важному этапу, который отделяет профессиональное прототипирование от любительского: подготовке и печати тестовых образцов для проверки ключевых допусков. Это самый эффективный способ сэкономить время и пластик, убедившись, что самые ответственные части дизайна работают как задумано, прежде чем запускать многочасовую печать всего корпуса.
Мы с вами:
- Определим, что такое допуски (tolerances) и зазоры (clearances) в контексте 3D-печати.
- Выясним, какие калибровки принтера напрямую влияют на точность размеров.
- Напишем код на
build123dдля создания небольших, быстрых в печати тестовых моделей, изолирующих критические узлы нашего корпуса. - Обсудим, как проанализировать напечатанные образцы и внести корректировки в наш основной проект.
1. Допуски, зазоры и реальность FDM-печати
В нашем коде мы задали параметр LID_LIP_CLEARANCE = 0.2. Это зазор (clearance) — целенаправленно спроектированное расстояние между двумя деталями для обеспечения их правильного взаимодействия. В нашем случае, чтобы крышка свободно, но без люфта входила в основание.
Однако реальный итоговый зазор будет отличаться от проектного. Допуск (tolerance) — это допустимый диапазон отклонений реального размера детали от номинального (заданного в модели). На него влияет множество факторов:
- Принтер: механическая точность, люфты.
- Материал: усадка пластика при остывании (у PETG она меньше, чем у ABS).
- Настройки слайсера: ширина экструзии, температура, скорость, компенсация "слоновьей ноги" (elephant's foot).
Ваш опыт в физике подсказывает, что это похоже на различие между теоретической моделью и результатами эксперимента, где необходимо учитывать погрешности измерительных приборов и внешние условия.


2. Основа точности: Калибровка принтера
Прежде чем тестировать допуски нашего дизайна, стоит убедиться, что наш инструмент (принтер) настроен на максимальную точность. Полная калибровка — это отдельная большая тема, но есть два параметра, которые напрямую влияют на итоговые размеры и качество сопрягаемых деталей.
3D печать с высокой точностью: калибровка с помощью OrcaSlicer
Посмотрите это видео от FabLab Moscow. Оно отлично объясняет, как с помощью современного слайсера OrcaSlicer (форка Bambu Studio) можно значительно повысить точность печати даже на бюджетном принтере. Нам не нужно выполнять все шаги, но важно понять концепции.
Сосредоточьтесь на двух разделах: Flow Rate (поток) (с 07:25 до 14:35): Поймите, почему калибровка потока важна для компенсации реального диаметра филамента и его свойств. Неправильный поток — основная причина, почему детали выходят больше или меньше, чем задумано. Pressure Advance (давление) (с 14:35 до 21:25): Эта концепция будет вам интуитивно понятна. Она компенсирует сжимаемость филамента и задержку в экструзии при изменении скорости, что критично для получения острых и точных углов. Просмотр этих фрагментов даст вам представление о том, какие параметры слайсера нужно проверить, если ваши тестовые детали не соответствуют ожиданиям по размеру.
Ключевая идея: если тестовые детали получаются слишком тугими, возможно, дело не в малом зазоре в CAD, а в завышенном Flow Rate в слайсере. И наоборот.
3. Практика: Создаем тестовые модели
Теперь самое интересное. Вместо того чтобы печатать весь корпус, мы создадим небольшие "пробники" для двух самых критичных узлов:
- Посадка крышки (lip/groove fit): Проверим наш зазор
LID_LIP_CLEARANCE. - Отверстие под термозакладную втулку: Убедимся, что втулка
M3вплавляется корректно.
Создадим новый файл test_pieces.py.
Тест №1: Посадка крышки
Мы создадим небольшой блок, имитирующий угол основания с пазом, и второй блок, имитирующий угол крышки с выступом.
# test_pieces.py
from build123d import *
from ocp_vscode import show_object
# --- Параметры из основного проекта, которые нам нужны ---
WALL_THICKNESS = 1.6
LID_LIP_CLEARANCE = 0.2
LID_HEIGHT = 10.0
# --- Код тестового образца №1 ---
def create_lip_groove_test(clearance: float) -> tuple[Part, Part]:
"""
Создает две маленькие детали для проверки посадки выступа в паз.
Одна имитирует стенку основания, другая - край крышки.
"""
test_size = 20.0 # Размер тестового блока
# 1. Блок "Основание" с пазом (groove)
with BuildPart() as base_tester:
Box(test_size, test_size, LID_HEIGHT)
# Вырезаем внутреннюю полость
with Locations(Vector(0, 0, WALL_THICKNESS)):
Box(
test_size - 2 * WALL_THICKNESS,
test_size - 2 * WALL_THICKNESS,
LID_HEIGHT,
mode=Mode.SUBTRACT,
)
# 2. Блок "Крышка" с выступом (lip)
lip_height = LID_HEIGHT / 2
with BuildPart() as lid_tester:
# Основная пластина крышки
Box(test_size - 2 * WALL_THICKNESS, test_size - 2 * WALL_THICKNESS, WALL_THICKNESS)
# Выступ, который входит в паз
lip_size = test_size - 2 * WALL_THICKNESS - 2 * clearance
with Locations(Vector(0, 0, -lip_height)):
Box(lip_size, lip_size, lip_height)
# Перемещаем для удобства визуализации и печати
lid_tester.part.locate(Location(Vector(0, 0, lip_height)))
return base_tester.part, lid_tester.part
# --- Код тестового образца №2 ---
# (Добавим позже)
# --- Сборка и экспорт ---
if __name__ == "__main__":
# Создаем тестовые детали для посадки
test_base, test_lid = create_lip_groove_test(LID_LIP_CLEARANCE)
show_object(test_base, name="Test_Base_Groove")
show_object(
test_lid,
name="Test_Lid_Lip",
options={"alpha": 0.7, "color": (1, 0.5, 0)},
at=Location(Vector(0, 0, WALL_THICKNESS)),
)
# Экспортируем для печати
test_base.export_stl("test_lip_groove_base.stl")
test_lid.export_stl("test_lip_groove_lid.stl")
Этот код создаст две маленькие детали, которые можно напечатать за 15-20 минут.
Тест №2: Отверстие под втулку
Теперь создадим модель для проверки отверстия под термозакладную втулку M3. Нам нужен просто цилиндр (имитация бобышки) с правильным отверстием внутри.
# test_pieces.py (дополняем)
from build123d import *
from ocp_vscode import show_object
# Импортируем инструменты из bd_warehouse
from bd_warehouse.fastener import HeatSetNut, InsertHole
# --- Параметры из основного проекта ---
SCREW_BOSS_DIAMETER = 8.0
SCREW_BOSS_HEIGHT = 10.0 # Произвольная высота для теста
HEAT_SET_NUT_TYPE = "M3-0.5-Standard"
# --- Код тестового образца №1 ---
# (остается без изменений)
# --- Код тестового образца №2 ---
def create_insert_hole_test(nut: HeatSetNut, boss_radius: float, boss_height: float) -> Part:
"""Создает тестовую бобышку с отверстием для термозакладной втулки."""
with BuildPart() as boss_tester:
Cylinder(radius=boss_radius, height=boss_height)
# Создаем отверстие в центре верхней грани
with Locations(boss_tester.faces().sort_by(Axis.Z)[-1].center()):
InsertHole(fastener=nut)
return boss_tester.part
# --- Сборка и экспорт ---
if __name__ == "__main__":
# ... (код для теста №1 остается) ...
# Создаем тестовую деталь для втулки
m3_nut = HeatSetNut(size=HEAT_SET_NUT_TYPE, fastener_type="Hilitchi")
test_boss = create_insert_hole_test(
nut=m3_nut,
boss_radius=SCREW_BOSS_DIAMETER / 2,
boss_height=SCREW_BOSS_HEIGHT,
)
show_object(test_boss, name="Test_Boss_InsertHole")
test_boss.export_stl("test_insert_hole.stl")
Проверьте себя!
Вы хотите создать единый тестовый блок для посадки крышки, который бы проверял сразу три варианта зазора: 0.15 мм, 0.20 мм и 0.25 мм, чтобы выбрать оптимальный за один раз. Как можно было бы модифицировать функцию create_lip_groove_test для этой цели?
Показать ответ
Можно создать один длинный блок "основания" и три отдельных блока "крышки", каждый со своим зазором. Или, что элегантнее, создать один блок основания с тремя пазами разной ширины.
Примерный подход для создания одного основания с тремя пазами:
def create_tolerance_checker(clearances: list[float]):
# Базовый блок
base_width = 60
base_depth = 25
with BuildPart() as base:
Box(base_width, base_depth, 10)
# Размещаем пазы с разными зазорами
num_slots = len(clearances)
slot_pitch = base_width / num_slots
for i, clearance in enumerate(clearances):
# Рассчитываем положение и размер каждого паза
slot_x_pos = -base_width/2 + slot_pitch/2 + i*slot_pitch
slot_width = 15 - 2 * clearance # 15 - номинальная ширина выступа
with Locations(Vector(slot_x_pos, 0, 0)):
# Вырезаем паз
Box(slot_width, base_depth, 5, mode=Mode.SUBTRACT)
# Можно добавить текст с размером зазора
Text(str(clearance), font_size=3, align=(Align.CENTER, Align.MIN), at=(0, base_depth/2 + 2))
# Отдельно создаем "калибр" - выступ номинального размера (15 мм)
with BuildPart() as gauge:
Box(15, base_depth - 2, 8)
# ...
Такой подход, где один "калибр" проверяется в нескольких "отверстиях", очень распространен в инженерной практике.
4. Печать, анализ и внесение правок
Теперь у вас есть 3 STL-файла:
test_lip_groove_base.stltest_lip_groove_lid.stltest_insert_hole.stl
Действия:
- Нарежьте (слайсинг) и напечатайте эти детали. Используйте те же настройки (высота слоя, температура, материал), которые планируете использовать для финального корпуса. Это важно для чистоты эксперимента.
- Проанализируйте посадку крышки:
- Попробуйте соединить
test_lip_groove_lidиtest_lip_groove_base. - Слишком туго? Детали не соединяются или требуют большого усилия. Это значит, что зазор 0.2 мм для вашего принтера и пластика недостаточен.
- Слишком свободно? Крышка заметно люфтит. Зазор можно уменьшить.
- Идеально? Соединяется с легким щелчком или плотным скольжением, без люфта.
- Попробуйте соединить
- Проанализируйте отверстие под втулку:
- Возьмите паяльник (с жалом, которое вам не жалко), нагрейте его примерно до температуры печати пластика (210-230°C для PETG).
- Поместите втулку на отверстие и аккуратно вдавите ее паяльником. Она должна входить ровно, без значительного вытекания пластика по краям.
- Втулка не лезет или деформирует деталь? Отверстие слишком мало. Это может быть связано с настройками
Flow Rateили особенностямиbd_warehouse. - Втулка болтается после остывания? Отверстие слишком велико.
- Внесите корректировки:
- Если посадка крышки неидеальна, измените значение
LID_LIP_CLEARANCEв вашем основном файлеfull_script.pyна новое (например,0.25или0.15). Можно перепечатать тестовый образец с новым значением для подтверждения. - Если отверстие под втулку не подошло, можно попробовать найти в документации
bd_warehouseпараметры для его тонкой настройки или, как крайняя мера, использовать функцию компенсации размера отверстий в слайсере (в OrcaSlicer этоX-Y hole compensation).
- Если посадка крышки неидеальна, измените значение
Ключевые выводы
- Никогда не доверяйте цифровой модели на 100%. Тестирование — обязательный шаг.
- Маленькие, изолированные тестовые образцы экономят массу времени и ресурсов.
- Точность печати — это функция системы "принтер + материал + слайсер". Базовая калибровка (
Flow Rate,Pressure Advance) решает 90% проблем с размерами. - Создание параметрических тестовых моделей на
build123dпозволяет быстро итерировать и находить оптимальные значения допусков для вашего проекта.
Что дальше?
Поздравляю! Вы выполнили работу инженера-технолога: проверили и подтвердили технологичность вашего дизайна. Теперь, когда вы уверены в значении зазора для крышки и в том, что крепеж будет установлен правильно, мы готовы к финальному шагу. В последнем уроке мы внесем финальные правки в наш full_script.py на основе результатов сегодняшних тестов и напечатаем финальную версию корпуса.