Recommended resources
The freely available resources this lesson will direct you to.
IЗдравствуйте! На прошлом уроке мы реализовали надежный механизм соединения частей корпуса с помощью винтов и бобышек. Это классический подход, но он требует дополнительного крепежа и инструментов для сборки.
Сегодня мы изучим альтернативу — консольные защёлки (cantilever snaps). Это умный способ соединения деталей, использующий упругость самого материала. Такие защёлки позволяют собирать корпус буквально одним щелчком, без винтов и отвёрток. Ваш опыт в физике и понимание механики деформаций даст вам глубокое интуитивное понимание того, как они работают.
Цель этого урока — научиться проектировать консольные защёлки в build123d, разобравшись в ключевых принципах, которые делают их прочными и функциональными при FDM 3D-печати.
1. Что такое консольная защёлка?
Консольная защёлка — это, по сути, небольшое гибкое "плечо" (консоль), которое является частью одной детали и зацепляется за ответный элемент на другой. При сборке это плечо изгибается, а затем возвращается в исходное состояние, фиксируясь в специальном пазу или за кромку.

Преимущества:
- Быстрая сборка: Не нужны инструменты или винты.
- Меньше деталей: Крепёжный элемент является частью самого корпуса.
- Экономия: Снижение стоимости за счёт отсутствия дополнительного крепежа.
Недостатки:
- Сложнее в проектировании: Требуют точного расчёта геометрии и допусков.
- Менее долговечны при частых сборках/разборках: Могут изнашиваться или ломаться при многократном использовании.
- Зависят от материала и настроек печати: Требуют правильного выбора материала и ориентации при печати.
2. Ключевые принципы проектирования защёлок для 3D-печати
Просто нарисовать крючок на ножке недостаточно — он, скорее всего, сломается при первой же попытке использования. Чтобы защёлка работала, нужно следовать нескольким критически важным правилам.
Правило №1: Ориентация при печати
Это самый важный аспект. FDM-печать создаёт объекты послойно, и прочность связи между слоями всегда ниже, чем прочность самого слоя. Если приложить изгибающее усилие вдоль линий слоёв, деталь легко расслоится и сломается.
Stop Snapping Your Snap Fits | Design for Mass Production 3D Printing
Посмотрите короткий фрагмент из видео канала Slant 3D, который наглядно демонстрирует эту проблему и её фундаментальное решение.
Обратите внимание на объяснение проблемы (с 0:21 по 0:45) и на наиболее эффективное решение — печать детали на боку, чтобы слои проходили вдоль гибкого элемента (с 2:58 по 3:30).
Вывод: Гибкое плечо защёлки всегда должно быть ориентировано параллельно плоскости печати (в плоскости XY). Это обеспечивает максимальную прочность на изгиб.
Правило №2: Геометрия и пропорции
Правильная геометрия распределяет напряжение и обеспечивает нужную гибкость.
Guide to 3D Printed Snap Fits +[Design Tips]
В этом руководстве от Unionfab собраны отличные практические рекомендации по проектированию. Они пришли из промышленного дизайна и идеально подходят для 3D-печати.
Прочтите раздел 'Snap-Fit Design Guidelines', обращая особое внимание на пункты 'Arm Length', 'Hook Angle' и 'Fillets and Radii'. Это займет около 5-7 минут.
Давайте суммируем ключевые моменты из этого руководства:
- Длина и толщина плеча: Длина плеча должна быть примерно в 2–3 раза больше его толщины. Это обеспечивает достаточную гибкость без излишней хрупкости.
- Скругление (Fillet) у основания: Острый угол у основания плеча — это концентратор напряжений и самое вероятное место излома. Обязательно добавляйте скругление с радиусом, равным примерно 0.5–1.0 толщины плеча.
- Угол зацепа (Hook Angle): Угол на передней грани зацепа (lead-in angle) определяет лёгкость защёлкивания. Рекомендуется 30°–45°. Задний, или запирающий, угол может быть круче (например, 90°), если деталь не предназначена для разборки.
- Материалы: Для защёлок лучше подходят более гибкие и прочные материалы, такие как PETG или Nylon, по сравнению с хрупким PLA.
3. Реализация защёлок в build123d
Теперь давайте применим эти знания на практике. Мы добавим две защёлки на длинные стороны крышки нашего корпуса. Они будут зацепляться за нижний край основания.
Откройте ваш предыдущий файл enclosure_v9.py и сохраните его как enclosure_v10.py.
3.1. Добавляем параметры защёлок
Как и раньше, вынесем все "магические числа" в параметры в начало файла. Добавьте этот блок после параметров крепления.
# enclosure_v10.py
# ... другие параметры ...
# ================== ПАРАМЕТРЫ ЗАЩЁЛОК ==================
snap_arm_thickness = 1.5 # Толщина плеча защёлки
snap_arm_length = 6.0 # Длина гибкого плеча
snap_width = 10.0 # Ширина защёлки (вдоль стенки)
snap_hook_depth = 1.0 # Глубина зацепа
snap_base_fillet = 1.0 # Скругление у основания для прочности
snap_clearance_from_wall = 0.5 # Зазор между защёлкой и стенкой
3.2. Создание шаблона защёлки
Самый чистый способ — создать одну защёлку как отдельную деталь в центре координат, а затем разместить её копии в нужных местах. Этот подход упрощает код и делает его более читаемым.
Добавьте этот код после создания lid_final, но перед финальным блоком if "show_object" in locals():.
# ================ СОЗДАНИЕ ОДНОЙ ЗАЩЁЛКИ (ШАБЛОН) ================
with BuildPart() as snap_template:
# Создаём эскиз профиля защёлки в плоскости XZ.
# Ось Z будет направлена вдоль плеча защёлки.
with BuildSketch(Plane.XZ) as snap_profile:
# Прямая часть (плечо)
arm = Line((0, 0), (0, snap_arm_length))
# Скос на конце для зацепа
hook = Line(arm @ 1, arm @ 1 + Vector(snap_hook_depth, -snap_hook_depth / tan(radians(45))))
# Замыкаем профиль, создавая толщину
Polyline(hook @ 1, (snap_arm_thickness, arm.length), (snap_arm_thickness, 0), (0, 0))
make_face()
# Выдавливаем эскиз, чтобы придать защёлке ширину
extrude(amount=snap_width / 2, both=True)
# Добавляем ключевое скругление у основания для прочности
fillet(
objects=snap_template.part.edges().filter_by(Axis.Z),
radius=snap_base_fillet,
)
snap_part = snap_template.part
Разбор кода:
- Мы используем
BuildSketchв плоскостиXZдля рисования 2D-профиля защёлки. LineиPolylineиспользуются для создания контура плеча и зацепа. Угол в 45° для зацепа мы реализуем через простую тригонометрию.make_face()превращает замкнутый контур в поверхность.extrude(..., both=True)симметрично выдавливает профиль, создавая трёхмерное тело.fillet()добавляет скругление к рёбрам у основания, которые мы находим, фильтруя по осиZ.
Проверьте себя!
Мы выбрали толщину плеча snap_arm_thickness = 1.5 мм. Основываясь на рекомендациях из руководства Unionfab, в каком диапазоне должна находиться длина плеча snap_arm_length для обеспечения хорошей гибкости? Соответствует ли наш выбор 6.0 мм этим рекомендациям?
Показать ответ
Руководство рекомендует соотношение длины к толщине от 2:1 до 3:1.
При толщине 1.5 мм рекомендуемый диапазон длины составляет от 1.5 * 2 = 3.0 мм до 1.5 * 3 = 4.5 мм.
Наш выбор 6.0 мм (соотношение 4:1) делает плечо более гибким, чем рекомендуется в качестве отправной точки. Это может быть полезно, если используется более жёсткий материал (как PLA), или если требуется меньшее усилие для защёлкивания. Однако это также может сделать защёлку менее прочной. Для прототипирования это приемлемое значение, которое легко можно будет скорректировать.
3.3. Размещение защёлок на крышке
Теперь, когда у нас есть snap_part, разместим две копии на внутренней стороне длинных стенок крышки.
# ================ ДОБАВЛЕНИЕ ЗАЩЁЛОК К КРЫШКЕ ================
# Крышка будет защёлкиваться на основание
with BuildPart() as lid_with_snaps:
add(lid_final)
# Вычисляем Y-координату для размещения на внутренней стенке крышки
y_pos = pocket_dimensions.Y / 2 - snap_arm_thickness - snap_clearance_from_wall
# Создаём два положения: на одной стенке и на противоположной (с поворотом)
snap_locations = [
Location(Vector(0, y_pos, base_height + lip_height)),
Location(Vector(0, -y_pos, base_height + lip_height), rotation=Rotation(0, 0, 180)),
]
for loc in snap_locations:
add(snap_part, location=loc, mode=Mode.ADD)
lid_final_with_snaps = lid_with_snaps.part
Разбор кода:
- Мы начинаем с
lid_final(полой крышки с выступом-фальцем). - Рассчитываем
y_pos— координату, на которой будет располагаться основание защёлки. Мы отступаем от внутреннего края (pocket_dimensions.Y / 2) на толщину самой защёлки и добавляем небольшой зазор (snap_clearance_from_wall), чтобы плечо могло свободно изгибаться. - Создаём список
snap_locations. Для второй защёлки мы используем ту же позицию с отрицательнымyи поворачиваем её на 180° вокруг осиZ. - В цикле добавляем
snap_partв вычисленныхLocation.
Наконец, обновите код визуализации, чтобы увидеть результат.
# В конце файла
if "show_object" in locals():
# Показываем основание и крышку с защёлками
show_object(base_final, name="base_final")
# show_object(pcb_model, name="pcb_model")
show_object(lid_final_with_snaps, name="lid_with_snaps")
Запустив скрипт, вы увидите крышку с двумя симметрично расположенными защёлками. Обратите внимание, как они "растут" из внутренней стенки — именно такая ориентация обеспечит их прочность при печати.
Ключевые выводы
- Консольные защёлки — эффективный способ соединения деталей без дополнительного крепежа.
- Ключ к прочности 3D-печатной защёлки — её ориентация: плечо должно изгибаться поперёк слоёв печати (т.е., быть в плоскости XY).
- Правильная геометрия, особенно скругление у основания, критически важна для предотвращения излома в точке концентрации напряжений.
- В
build123dудобно создавать параметрический шаблон сложного элемента (как защёлка), а затем размещать его копии в нужных местах с помощьюLocationиRotation.
Что дальше?
Мы создали защёлки на крышке, но пока им не за что цепляться. В следующем уроке мы завершим этот механизм: добавим на основание ответные вырезы (пазы), за которые будут зацепляться наши защёлки. Это потребует точного учёта допусков, чтобы соединение было надёжным, но при этом разъёмным.