Здравствуйте!
На прошлом уроке мы разобрались с правилом 45 градусов и научились проектировать самоподдерживающиеся элементы, чтобы минимизировать или полностью исключить необходимость в поддержках. Это был важный шаг в освоении принципов проектирования для производства (Design for Manufacturing, DFM).
Сегодня мы изучим еще один тонкий, но критически важный аспект DFM, напрямую связанный с механикой производственного процесса. Наша цель — научиться применять технику "собачьей кости" (dog-bone) для компенсации скругления внутренних углов инструментом. Это необходимо для создания деталей, которые должны точно сопрягаться друг с другом. Например, чтобы печатная плата с острыми углами идеально входила в предназначенный для нее паз в корпусе.
1. Проблема: Неизбежное скругление внутренних углов
Любой производственный процесс, будь то фрезеровка на станке с ЧПУ или FDM 3D-печать, использует инструмент конечного радиуса.
- На фрезерном станке это радиус концевой фрезы.
- На 3D-принтере это, по сути, радиус сопла, а точнее — ширина линии экструзии пластика.
Когда такой круглый в сечении "инструмент" пытается создать внутренний острый угол (например, 90°), он физически не может этого сделать. Его круглая форма оставляет в углу небольшой радиус скругления.

Для ваших задач это означает, что если вы спроектируете в корпусе прямоугольный паз, точно соответствующий размерам печатной платы, то из-за этих скруглений в углах плата просто не войдет в него. Углы платы упрутся в скругления паза.
2. Решение: Техника "Собачья кость" (Dog-bone)
Решение этой геометрической проблемы простое и элегантное. Вместо того чтобы пытаться создать идеальный острый угол, мы намеренно вырезаем в углу дополнительный материал, чтобы освободить место для угла сопрягаемой детали. Этот вырез чаще всего имеет форму окружности и из-за характерного вида на чертежах получил название "собачья кость" (dog-bone).

Основная идея — создать в углу паза "карман", который будет глубже самого угла. Диаметр этого "кармана" должен быть как минимум равен диаметру "инструмента" (в нашем случае — ширине экструзии). На практике его делают чуть больше для гарантии.
3. Реализация в build123d
Давайте рассмотрим, как реализовать эту технику на практике. Мы создадим небольшую пластину с прямоугольным пазом — сначала в "наивном" варианте, а затем с применением техники "собачьей кости".
Шаг 1: Определяем параметры
В профессиональном подходе, который вы предпочитаете, все ключевые размеры должны быть параметризованы. Нам понадобятся размеры "платы", которую мы хотим вставить, и эффективный диаметр нашего "инструмента". Для FDM-печати в качестве диаметра инструмента разумно взять ширину линии экструзии (extrusion width), которую выставляете в слайсере. Типичное значение для сопла 0.4 мм — около 0.45 мм.
# Параметры нашего проекта
pcb_length = 50.0
pcb_width = 30.0
pocket_depth = 2.0
base_height = 5.0
# Эффективный "диаметр инструмента" - ширина линии экструзии в слайсере
tool_diameter = 0.45
Шаг 2: Создание паза с dog-bones
Теперь создадим модель. Мы начнем с базовой пластины, затем на ее верхней плоскости создадим эскиз паза и выдавим его. Ключевой момент происходит на этапе создания эскиза.
- Рисуем основной прямоугольник паза.
- Получаем его угловые вершины.
- В каждой вершине добавляем к эскизу окружность ("собачью кость") с радиусом, равным половине
tool_diameter. - Выдавливаем (вычитаем) получившийся сложный контур.
from build123d import *
# Параметры из предыдущего шага
pcb_length = 50.0
pcb_width = 30.0
pocket_depth = 2.0
base_height = 5.0
tool_diameter = 0.45
# Создаем базовую пластину
with BuildPart() as pocket_plate:
Box(length=100, width=80, height=base_height)
# Работаем на верхней грани пластины
with BuildSketch(pocket_plate.faces().sort_by(Axis.Z)[-1]) as pocket_sketch:
# 1. Создаем основной прямоугольник паза
rect = Rectangle(pcb_length, pcb_width)
# 2. Получаем вершины прямоугольника
corners = rect.vertices()
# 3. В каждой вершине добавляем окружность-вырез
# Используем Locations для размещения объектов в нужных точках
with Locations(*corners):
Circle(radius=tool_diameter / 2)
# 4. Выдавливаем эскиз, создавая паз
extrude(amount=-pocket_depth, mode=Mode.SUBTRACT)
# Для отображения в ocp_vscode_viewer, если используется
# show_object(pocket_plate)
В этом коде rect.vertices() возвращает список вершин созданного прямоугольника, а Locations(*corners) позволяет применить операцию (в данном случае, создание Circle) ко всем этим точкам одновременно. Это чистый и расширяемый способ, полностью соответствующий духу build123d.
В результате выполнения этого кода вы получите паз, в углах которого будут небольшие круглые вырезы. Теперь, когда вы вставите в этот паз печатную плату 50x30 мм, ее острые углы попадут точно в эти вырезы, и плата ляжет на дно паза идеально ровно.
Проверьте себя!
Представьте, что вы проектируете посадочное место для стандартной шестигранной гайки M3 (hex nut). Гайка имеет 6 острых внутренних углов в своем профиле, если смотреть на нее сверху. Сколько "собачьих костей" и где нужно добавить в эскиз паза, чтобы гайка вошла в него без зазора и не вращалась?
Показать ответ
Нужно добавить 6 "собачьих костей" — по одной в каждом из шести внутренних углов шестиугольного паза. Это позволит острым углам гайки полностью войти в паз, обеспечив плотную посадку.
Ключевые выводы
- Внутренние углы не бывают острыми: Из-за конечного радиуса инструмента (сопла принтера) все внутренние углы в напечатанной детали будут иметь небольшое скругление.
- Проблема сопряжения: Это скругление мешает плотной посадке деталей с острыми углами (например, печатных плат в пазы).
- Решение — "Dog-bone": Намеренный вырез дополнительного материала в углах паза позволяет "спрятать" в нем угол сопрягаемой детали.
- Реализация в
build123d: Техника элегантно реализуется на уровне 2D-эскиза путем добавления окружностей (Circle) в вершины (vertices) основной фигуры перед операцией выдавливания (extrude).
Что дальше?
Сегодня вы добавили в свой арсенал еще один мощный прием из области DFM. Теперь вы умеете не только избегать поддержек, но и проектировать детали для точной сборки.
В следующем, заключительном уроке этого модуля, мы рассмотрим последнюю важную тему оптимизации — как модифицировать геометрию для предотвращения деформации (warping) и улучшения межслойной адгезии. Это особенно актуально для крупных плоских деталей, таких как дно корпуса, которые склонны отрываться от печатного стола во время печати.