Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 36

Печать тестовых образцов для проверки допусков

Recommended resources

Здравствуйте!

На прошлом уроке мы завершили проектирование нашего корпуса, создав крышку и реализовав надежный механизм винтового соединения с помощью библиотеки bd_warehouse. Теперь у нас есть два полностью готовых STL-файла: enclosure_base.stl и enclosure_lid.stl. В цифровом мире они идеально подходят друг к другу. Но сохранится ли эта идеальность в физическом воплощении?

Сегодняшний урок посвящен критически важному этапу, который отделяет профессиональное прототипирование от любительского: подготовке и печати тестовых образцов для проверки ключевых допусков. Это самый эффективный способ сэкономить время и пластик, убедившись, что самые ответственные части дизайна работают как задумано, прежде чем запускать многочасовую печать всего корпуса.

Мы с вами:

  1. Определим, что такое допуски (tolerances) и зазоры (clearances) в контексте 3D-печати.
  2. Выясним, какие калибровки принтера напрямую влияют на точность размеров.
  3. Напишем код на build123d для создания небольших, быстрых в печати тестовых моделей, изолирующих критические узлы нашего корпуса.
  4. Обсудим, как проанализировать напечатанные образцы и внести корректировки в наш основной проект.

1. Допуски, зазоры и реальность FDM-печати

В нашем коде мы задали параметр LID_LIP_CLEARANCE = 0.2. Это зазор (clearance) — целенаправленно спроектированное расстояние между двумя деталями для обеспечения их правильного взаимодействия. В нашем случае, чтобы крышка свободно, но без люфта входила в основание.

Однако реальный итоговый зазор будет отличаться от проектного. Допуск (tolerance) — это допустимый диапазон отклонений реального размера детали от номинального (заданного в модели). На него влияет множество факторов:

  • Принтер: механическая точность, люфты.
  • Материал: усадка пластика при остывании (у PETG она меньше, чем у ABS).
  • Настройки слайсера: ширина экструзии, температура, скорость, компенсация "слоновьей ноги" (elephant's foot).

Ваш опыт в физике подсказывает, что это похоже на различие между теоретической моделью и результатами эксперимента, где необходимо учитывать погрешности измерительных приборов и внешние условия.

Типы инженерных посадок: Зазор, Переход и Натяг
Это классическая иллюстрация трех типов посадок. Наша цель для крышки — это **посадка с зазором (Clearance Fit)**, где детали сопрягаются свободно. Для защелок, которые мы обсуждали, может потребоваться **переходная (Transition)** или даже **посадка с натягом (Interference Fit)**, где требуется усилие для сборки.
3D Printing Design Guidelines and Tolerances
Как видите из этих рекомендаций, для сопрягаемых деталей (Connecting Parts) обычно рекомендуется зазор 0.5 мм. Мы заложили 0.2 мм — это довольно жесткое требование, которое как раз и нужно проверить на практике.

2. Основа точности: Калибровка принтера

Прежде чем тестировать допуски нашего дизайна, стоит убедиться, что наш инструмент (принтер) настроен на максимальную точность. Полная калибровка — это отдельная большая тема, но есть два параметра, которые напрямую влияют на итоговые размеры и качество сопрягаемых деталей.

3D печать с высокой точностью: калибровка с помощью OrcaSlicer

Посмотрите это видео от FabLab Moscow. Оно отлично объясняет, как с помощью современного слайсера OrcaSlicer (форка Bambu Studio) можно значительно повысить точность печати даже на бюджетном принтере. Нам не нужно выполнять все шаги, но важно понять концепции.

Сосредоточьтесь на двух разделах: Flow Rate (поток) (с 07:25 до 14:35): Поймите, почему калибровка потока важна для компенсации реального диаметра филамента и его свойств. Неправильный поток — основная причина, почему детали выходят больше или меньше, чем задумано. Pressure Advance (давление) (с 14:35 до 21:25): Эта концепция будет вам интуитивно понятна. Она компенсирует сжимаемость филамента и задержку в экструзии при изменении скорости, что критично для получения острых и точных углов. Просмотр этих фрагментов даст вам представление о том, какие параметры слайсера нужно проверить, если ваши тестовые детали не соответствуют ожиданиям по размеру.

Ключевая идея: если тестовые детали получаются слишком тугими, возможно, дело не в малом зазоре в CAD, а в завышенном Flow Rate в слайсере. И наоборот.


3. Практика: Создаем тестовые модели

Теперь самое интересное. Вместо того чтобы печатать весь корпус, мы создадим небольшие "пробники" для двух самых критичных узлов:

  1. Посадка крышки (lip/groove fit): Проверим наш зазор LID_LIP_CLEARANCE.
  2. Отверстие под термозакладную втулку: Убедимся, что втулка 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.stl
  • test_lip_groove_lid.stl
  • test_insert_hole.stl

Действия:

  1. Нарежьте (слайсинг) и напечатайте эти детали. Используйте те же настройки (высота слоя, температура, материал), которые планируете использовать для финального корпуса. Это важно для чистоты эксперимента.
  2. Проанализируйте посадку крышки:
    • Попробуйте соединить test_lip_groove_lid и test_lip_groove_base.
    • Слишком туго? Детали не соединяются или требуют большого усилия. Это значит, что зазор 0.2 мм для вашего принтера и пластика недостаточен.
    • Слишком свободно? Крышка заметно люфтит. Зазор можно уменьшить.
    • Идеально? Соединяется с легким щелчком или плотным скольжением, без люфта.
  3. Проанализируйте отверстие под втулку:
    • Возьмите паяльник (с жалом, которое вам не жалко), нагрейте его примерно до температуры печати пластика (210-230°C для PETG).
    • Поместите втулку на отверстие и аккуратно вдавите ее паяльником. Она должна входить ровно, без значительного вытекания пластика по краям.
    • Втулка не лезет или деформирует деталь? Отверстие слишком мало. Это может быть связано с настройками Flow Rate или особенностями bd_warehouse.
    • Втулка болтается после остывания? Отверстие слишком велико.
  4. Внесите корректировки:
    • Если посадка крышки неидеальна, измените значение 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 на основе результатов сегодняшних тестов и напечатаем финальную версию корпуса.