--- cover: /posts/files/lets-code-3d_img/4.jpg date: '2025-08-05T20:00:00+03:00' tags: - 3D печать - гиковское title: Давай запрограммируем деталь? --- Некоторое время назад я по глупости запорол свои бокорезы, так, что для откусывания ножек радио деталей они больше не годятся. К счастью, стоят они совершенно не дорого, и тем же днём были заказанные новые в небезызвестном сервисе, который в девичестве содержал в себе название моего родного города. При получении я немного огорчился тем, что в комплекте к ним не шёл колпачок, который был у предыдущих, хотя выглядят они идентично. Штош. Я решил восполнить этот недостаток с интересом для себя и решил этот колпачок самостоятельно спроектировать и напечатать на 3D принтере, который есть у меня на хозяйстве. ![Бокорез и родной колпачок](/posts/files/lets-code-3d_img/1.jpg) Бокорезы и колпачок ## Проектирование Обычно, детали для печати проектируются в CAD программах твердотельного моделирования. Но я в них совершенно не умею, хотя и сын инженеров-конструкторов. Но зато, к счастью, я программист. И вроде, не самый худший! Посему, я решил воспользоваться свободной программой для твердотельного моделирования [OpenSCAD](https://openscad.org/). К счастью, в репозитории любимого дистрибутива (как, в прочем, и в большинстве других репозиториев) он присутствовал. Что же в нём необычного? А необычное в нём то, что деталь в нём не _рисуется_, а именно что _программируется_. Для понимания, приведу простой пример: ```openscad cube([25,35,55]); // Нарисовать куб размерами 25мм х 25мм х 55мм ``` Просто? Очень! А учитывая что язык полноценный, с циклами и условиями «напрограммировать» в нём можно многое. ## Первая версия Вот и я не стал долго думать, открыл [мануал с оффсайта](https://openscad.org/documentation.html), обмерил штангенциркулем оригинальный колпачок и пошёл проектировать программировать. На всё про всё у меня ушло где-то с полчаса. И у меня получилась первая версия колпачка. Максимально простая и дубовая. Первая куцая версия: ![Колпачок v1](/posts/files/lets-code-3d_img/2.jpg) ## Вторая версия В принципе, на этом можно было и остановиться, ведь свою функцию он выполняет. Но у меня сработал мой перфекционист и я подумал, что было бы неплохо вырезы в корпусе сделать один под другим, а не на одной линии, чтобы бокорез сидел ровно, а не под углом. Потом пришла мысль, что было бы неплохо ещё и параметризировать модель, чтобы было легко менять её размеры, а не хардкодить их. И вот получилась вторая, и на текущий момент окончательная версия: ![Колпачок v2 код](/posts/files/lets-code-3d_img/3.png) И результат «в железе», то есть в пластике :) ![Колпачок v2 результат](/posts/files/lets-code-3d_img/4.jpg) А сам код, думаю, он достаточно понятен ([исходники](/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