Recommended resources
The freely available resources this lesson will direct you to.
Здравствуйте!
На прошлом уроке мы создали монтажные стойки, которые служат опорой для печатной платы. Теперь наша плата аккуратно позиционирована внутри корпуса, но пока никак не закреплена. Наша задача на сегодня — создать надёжный механизм крепления.
Цель этого урока — создать в стойках пилотные отверстия для саморезов по пластику. Это позволит нам надёжно прикрутить печатную плату к стойкам, обеспечив её неподвижность даже при вибрациях или если перевернуть корпус.
1. Крепёж для 3D-печати: Саморезы по пластику
Для соединения 3D-печатных деталей и крепления в них компонентов существует множество решений. Одно из самых простых и надёжных — использование самонарезающих винтов, или просто саморезов.

В отличие от обычных винтов, которым нужна предварительно нарезанная резьба, саморезы сами формируют (нарезают) её в материале при закручивании. Это значительно упрощает проектирование: вместо сложного моделирования резьбы нам достаточно создать гладкое цилиндрическое отверстие правильного диаметра.
Wait… Was I Wrong About Screw Holes (and Screws?)
Чтобы лучше понять преимущества саморезов для пластика, посмотрите небольшой фрагмент из видео от BV3D. Автор объясняет, почему они являются отличным выбором для 3D-печатных проектов.
Посмотрите два коротких отрывка: с 01:38 по 02:20, где объясняется принцип работы саморезов, и с 08:28 по 09:04, где подводится итог их преимуществ.
Как вы увидели, саморезы прощают небольшие погрешности в диаметре отверстия и не требуют сложной геометрии. Это делает их идеальным выбором для наших задач.
2. Как выбрать диаметр пилотного отверстия?
Это ключевой вопрос.
- Если отверстие будет слишком большим, резьба самореза не сможет зацепиться за материал, и соединение будет непрочным.
- Если отверстие будет слишком маленьким, при закручивании возникнет высокое напряжение, которое может расколоть стойку, особенно учитывая слоистую структуру FDM-печати.
Диаметр пилотного отверстия всегда должен быть меньше номинального диаметра самореза. Например, для самореза M3 (номинальный диаметр 3 мм) пилотное отверстие будет меньше 3 мм. Насколько именно? Это зависит от материала (PLA, PETG, ABS), высоты слоя, толщины стенок и типа самого самореза.
Практический подход и эмпирическое правило:
Лучший способ — напечатать небольшой тестовый блок с отверстиями разного диаметра (например, для M3 — 2.6, 2.7, 2.8, 2.9 мм) и попробовать вкрутить в них саморез. Так вы найдёте оптимальный баланс между лёгкостью закручивания и надёжностью фиксации.
Wait… Was I Wrong About Screw Holes (and Screws?)
В следующем фрагменте из того же видео показан именно такой эксперимент для самореза М3. Обратите внимание, какой диаметр автор считает «золотой серединой».
Посмотрите отрывок с 04:35 по 07:19. Автор тестирует отверстия от 2.6 до 3.0 мм и даёт практическую рекомендацию по выбору размера.
Как показывает практика, для саморезов М3 в PLA или PETG хорошей отправной точкой является диаметр пилотного отверстия 2.7-2.8 мм. Это соответствует рекомендации из видео — делать отверстие на 0.2-0.3 мм меньше диаметра самореза.
Для более формального подхода существуют инженерные таблицы. Например, ресурс Hole Size Data for Self-Tapping Screws предоставляет рекомендации для разных типов винтов и материалов. Учитывая ваш бэкграунд в физике, вам может быть интересно взглянуть на таблицу для High-Low Screws, где диаметр отверстия зависит от модуля упругости пластика.
3. Реализация в build123d
Начнём работу. Скопируйте enclosure_v6.py в enclosure_v7.py.
Добавим в начало файла, в раздел с параметрами, новые переменные для наших отверстий. Мы будем использовать саморезы M3.
# enclosure_v7.py
# ... другие параметры ...
# ================== ПАРАМЕТРЫ КРЕПЕЖА ==================
# Номинальный диаметр самореза (для справки)
screw_diameter = 3.0
# Диаметр пилотного отверстия
pilot_hole_diameter = 2.7
# Глубина пилотного отверстия
pilot_hole_depth = 10.0
Глубины в 10 мм будет достаточно для надёжной фиксации.
Теперь нам нужно создать цилиндры, которые мы вычтем из наших стоек. Мы можем использовать тот же список hole_centers, который получили из модели платы. Операция будет очень похожа на создание самих стоек.
Найдите в коде строку base_with_standoffs = base_with_lip + positioned_standoffs. После неё мы и будем вычитать отверстия.
# ... после создания base_with_standoffs ...
# Создаем цилиндры для вычитания (пилотные отверстия)
with BuildPart() as pilot_holes:
with Locations(*hole_centers):
Cylinder(
radius=pilot_hole_diameter / 2,
height=pilot_hole_depth,
# Выравниваем по ВЕРХНЕМУ основанию
align=(Align.CENTER, Align.CENTER, Align.TOP)
)
# Z-координата верха стоек
standoff_top_z = floor_z + standoff_height
# Перемещаем вычитаемые цилиндры на верхушки стоек
positioned_holes = pilot_holes.part.moved(Location(Vector(0, 0, standoff_top_z)))
# Вычитаем отверстия из основания со стойками
base_with_holes = base_with_standoffs - positioned_holes
Ключевой момент здесь — align=(Align.CENTER, Align.CENTER, Align.TOP). Мы создаём цилиндр так, чтобы его "потолок" находился на плоскости Z=0. Затем мы перемещаем всю деталь positioned_holes на высоту верхушек стоек (standoff_top_z). В результате цилиндры "свисают" вниз от этой плоскости, то есть уходят вглубь стоек, что нам и нужно.
Обновите код визуализации, чтобы отображать base_with_holes.
if "show_object" in locals():
show_object(base_with_holes, name="Base with Pilot Holes")
# ... остальной код визуализации ...
Запустите скрипт. В OCP CAD Viewer вы должны увидеть, что в центре каждой стойки теперь есть аккуратное пилотное отверстие.
4. Улучшение: Потай для шляпки винта (Counterbore)
Простое цилиндрическое отверстие функционально, но шляпка самореза будет выступать над поверхностью платы. Для более профессионального и аккуратного вида шляпку следует утопить. Для этого используются углубления двух типов: countersink (коническое, для винтов с потайной головкой) и counterbore (цилиндрическое, для винтов с цилиндрической или полукруглой головкой).

Для саморезов M3 с полукруглой головкой диаметр шляпки составляет примерно 5.5 мм, а высота — около 2 мм. Давайте добавим соответствующие параметры и создадим counterbore.
# enclosure_v7.py, в разделе ПАРАМЕТРЫ КРЕПЕЖА
# Диаметр углубления под шляпку винта
counterbore_diameter = 5.6
# Глубина углубления
counterbore_depth = 2.2
Мы берём размеры с небольшим запасом для лёгкой сборки.
Теперь модифицируем код, создающий отверстия, чтобы он делал и пилотное отверстие, и counterbore за один раз.
# Замените предыдущий блок `with BuildPart() as pilot_holes:` на этот:
# Создаем комбинированную деталь для вычитания (counterbore + pilot hole)
with BuildPart() as holes_to_subtract:
with Locations(*hole_centers):
# 1. Цилиндр для Counterbore (широкий и неглубокий)
Cylinder(
radius=counterbore_diameter / 2,
height=counterbore_depth,
align=(Align.CENTER, Align.CENTER, Align.TOP)
)
# 2. Цилиндр для пилотного отверстия (узкий и глубокий)
Cylinder(
radius=pilot_hole_diameter / 2,
height=pilot_hole_depth,
# Он тоже выровнен по верху, но поскольку он длиннее,
# он "пройдет" сквозь counterbore и пойдет глубже.
align=(Align.CENTER, Align.CENTER, Align.TOP)
)
# Z-координата верха стоек
standoff_top_z = floor_z + standoff_height
# Перемещаем вычитаемую деталь на верхушки стоек
positioned_holes = holes_to_subtract.part.moved(Location(Vector(0, 0, standoff_top_z)))
# Вычитаем отверстия из основания со стойками
base_with_holes = base_with_standoffs - positioned_holes
build123d автоматически объединит два этих перекрывающихся цилиндра в одну фигуру, которая и будет вычтена. Результатом будет идеальное отверстие с углублением под шляпку.
Запустите скрипт снова. Теперь отверстия в стойках должны иметь цилиндрическое углубление сверху. Это не только эстетично, но и помогает центрировать плату при монтаже.
Проверьте себя!
Предположим, вы решили использовать саморезы M2.5, для которых рекомендуемый диаметр пилотного отверстия — 2.1 мм. Кроме того, вы хотите сделать пилотное отверстие сквозным через всю стойку и дно корпуса.
Задание: Какие параметры и какую часть кода нужно изменить, чтобы реализовать сквозное пилотное отверстие M2.5?
Показать решение
Нужно изменить два аспекта:
-
Параметры:
screw_diameterможно обновить до2.5(для справки).pilot_hole_diameterнужно установить в2.1.pilot_hole_depthнужно задать значение, заведомо большее, чем высота стойки + толщина дна корпуса. Например,standoff_height + wall_thickness + 5. Это гарантирует, что вычитаемый цилиндр пройдёт насквозь.
# Новые параметры pilot_hole_diameter = 2.1 # Глубина должна быть достаточной для сквозного отверстия pilot_hole_depth = standoff_height + wall_thickness + 5.0 # Параметры counterbore для M2.5 тоже нужно будет уточнить counterbore_diameter = 4.8 counterbore_depth = 1.8 -
Код: Никаких изменений в логике
BuildPartили вычитания не требуется! Вся логика уже параметризована. Изменение значенияpilot_hole_depthавтоматически приведёт к созданию сквозного отверстия. Это и есть сила параметрического дизайна.
Ключевые выводы
- Саморезы по пластику — простое и эффективное решение для крепления компонентов в 3D-печатных корпусах.
- Диаметр пилотного отверстия — критически важный параметр. Для самореза M3 хорошей отправной точкой является диаметр 2.7–2.8 мм.
- Создание отверстий в
build123dвыполняется путём булевой операции вычитания (-) предварительно созданных тел. - Использование
Counterboreпозволяет утопить шляпку винта, что улучшает внешний вид и функциональность изделия.
Что дальше?
Мы спроектировали опоры для платы и способ её крепления. Но пока мы не учли один важный аспект: зазоры. Наша модель платы сейчас вплотную прилегает к стойкам, а в реальности между ними должен быть небольшой люфт для лёгкой сборки. В следующем уроке мы займёмся созданием зазоров (clearances) между платой и элементами корпуса.