diff options
| author | 2026-01-31 20:38:50 +0300 | |
|---|---|---|
| committer | 2026-01-31 23:38:53 +0300 | |
| commit | 49458f5ffd5a48c465117ec27f6437683f75acc1 (patch) | |
| tree | a99ee68116d10c2b2e5a70c442cdadec95ba793c /content/posts/2025-08-05-lets-code-3d.md | |
| download | blog-49458f5ffd5a48c465117ec27f6437683f75acc1.tar.gz blog-49458f5ffd5a48c465117ec27f6437683f75acc1.tar.bz2 blog-49458f5ffd5a48c465117ec27f6437683f75acc1.tar.xz blog-49458f5ffd5a48c465117ec27f6437683f75acc1.zip | |
initial
Diffstat (limited to 'content/posts/2025-08-05-lets-code-3d.md')
| -rw-r--r-- | content/posts/2025-08-05-lets-code-3d.md | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/content/posts/2025-08-05-lets-code-3d.md b/content/posts/2025-08-05-lets-code-3d.md new file mode 100644 index 0000000..3809861 --- /dev/null +++ b/content/posts/2025-08-05-lets-code-3d.md @@ -0,0 +1,154 @@ +--- +cover: /posts/files/lets-code-3d_img/4.jpg +date: '2025-08-05T20:00:00+03:00' +tags: +- 3D печать +- гиковское +title: Давай запрограммируем деталь? +--- + +Некоторое время назад я по глупости запорол свои бокорезы, так, что для +откусывания ножек радио деталей они больше не годятся. К счастью, стоят они +совершенно не дорого, и тем же днём были заказанные новые в небезызвестном +сервисе, который в девичестве содержал в себе название моего родного города. При +получении я немного огорчился тем, что в комплекте к ним не шёл колпачок, +который был у предыдущих, хотя выглядят они идентично. + +Штош. Я решил восполнить этот недостаток с интересом для себя и решил этот +колпачок самостоятельно спроектировать и напечатать на 3D принтере, который есть +у меня на хозяйстве. + +<!--more--> + + Бокорезы и +колпачок + +## Проектирование + +Обычно, детали для печати проектируются в CAD программах твердотельного +моделирования. Но я в них совершенно не умею, хотя и сын +инженеров-конструкторов. Но зато, к счастью, я программист. И вроде, не самый +худший! Посему, я решил воспользоваться свободной программой для твердотельного +моделирования [OpenSCAD](https://openscad.org/). К счастью, в репозитории +любимого дистрибутива (как, в прочем, и в большинстве других репозиториев) он +присутствовал. Что же в нём необычного? А необычное в нём то, что деталь в нём +не _рисуется_, а именно что _программируется_. Для понимания, приведу простой +пример: + +```openscad +cube([25,35,55]); // Нарисовать куб размерами 25мм х 25мм х 55мм +``` + +Просто? Очень! А учитывая что язык полноценный, с циклами и условиями +«напрограммировать» в нём можно многое. + +## Первая версия + +Вот и я не стал долго думать, открыл [мануал с +оффсайта](https://openscad.org/documentation.html), обмерил штангенциркулем +оригинальный колпачок и пошёл <del>проектировать</del> программировать. На всё +про всё у меня ушло где-то с полчаса. И у меня получилась первая версия +колпачка. Максимально простая и дубовая. Первая куцая версия: + + + +## Вторая версия + +В принципе, на этом можно было и остановиться, ведь свою функцию он выполняет. +Но у меня сработал мой перфекционист и я подумал, что было бы неплохо вырезы в +корпусе сделать один под другим, а не на одной линии, чтобы бокорез сидел ровно, +а не под углом. Потом пришла мысль, что было бы неплохо ещё и параметризировать +модель, чтобы было легко менять её размеры, а не хардкодить их. И вот получилась +вторая, и на текущий момент окончательная версия: + + + +И результат «в железе», то есть в пластике :) + + + +А сам код, думаю, он достаточно понятен ([исходники](/posts/files/source.scad) и +[STL модель](/posts/files/result.stl) я прикладываю к этому посту): + +```openscad +// Толщина стенки +wall = 2; + +// Высота внешняя +height = 12; + +// Длина основной части (внутренняя) +l1 = 15; + +// Длина носика (внутренняя) +l2 = 20; + +// Ширина у основания (внутренняя) +w = 15; + +// Толщина метала бокорезов +toolWidth = 2.1; + +// Нижняя крышка +cover(0); + +// Верхняя крышка +cover(height - wall); + +// Корпус +difference() { + linear_extrude(height) + polygon( + [ // Полигон идёт против часовой стрелки + [0, 0], + [wall, 0], + [wall, l1], + [w / 2 + wall, l1 + l2], // Внутренний кончик носика + [w + wall, l1], + [w + wall, 0], + [w + wall * 2, 0], + [w + wall * 2, l1], + [w / 2 + wall / 2 + wall, l1 + l2 + wall], // Внешний кончик носика + [w / 2 - wall / 2 + wall, l1 + l2 + wall], + [0, l1], + ] + ); + + // Вырезы + translate([w + wall, 0, height / 2 - toolWidth]) // Правый вырез чуть ниже середины + cube([wall, l1 / 2, toolWidth]); + translate([0, 0, height / 2]) // Левый вырез чуть выше середины + cube([wall, l1 / 2, toolWidth]); +} + + +// Крышка +module cover(z) { + translate([0, 0, z]) + linear_extrude(wall) + polygon( + [ // Полигон идёт против часовой стрелки + [0, 0], + [w + wall * 2, 0], + [w + wall * 2, l1], + [w / 2 + wall / 2 + wall, l1 + l2 + wall], + [w / 2 - wall / 2 + wall, l1 + l2 + wall], + [0, l1], + ] + ); +} +``` + +Надеюсь, я кому-то показал что даже без специального конструкторского +образования, но умея программировать - можно получать не только эфимерные +программки, но и вполне себе физические предметы, которые пригождаются в быту. +И если интересно, подбиваю экономику: напечатано 2 колпачка (1 и 2 версия), +каждый весом по 4 грамма, то есть примерно по 4₽ за штуку. Печатал пластиком +PLA, как моим самым любимым. + +## Ссылки + +- Сайт OpenSCAD - https://openscad.org/ +- Документация - https://openscad.org/documentation.html +- Шпаргала по функциям - https://openscad.org/cheatsheet/index.html +- Библиотеки - https://openscad.org/libraries.html |
