Здравствуйте!
На прошлом уроке мы создали монтажные стойки, которые служат опорой для печатной платы. Теперь наша плата аккуратно позиционирована внутри корпуса, но пока никак не закреплена. Наша задача на сегодня — создать надёжный механизм крепления.
Цель этого урока — создать в стойках пилотные отверстия для саморезов по пластику. Это позволит нам надёжно прикрутить печатную плату к стойкам, обеспечив её неподвижность даже при вибрациях или если перевернуть корпус.
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) между платой и элементами корпуса.